ringill's Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Tuesday, October 24th, 2006

    Time Event
    7:41p
    VisualWorks Smalltalk
    Мы с коллегой недавно использовали
    Smalltalk для разработки небольшого приложения.
    Вкратце, Smalltalk -- это (a) язык программирования и (б) среда разработки с
    компилятором и отладчиком, работающая на виртуальной машине. Среда написана на Smalltalk, за исключением небольшого количества
    примитивных вызовов.


    Есть немало реализаций среды Smalltalk. Наиболее известные из них --
    Dolphin,
    Cincom
    (VisualWorks)
    ,
    MT,
    Squeak.
    Мы выбрали VisualWorks, по ряду причин:

    • Быстрая виртуальная машина;

    • Полнофункциональная версия бесплатна для некоммерческого использования (при этом коммерческая лицензия довольно «драконовская»);

    • Есть обёртка для Oracle (нет больше ни в одной реализации);

    • Для Windows поддерживаются механизмы внешних вызовов из динамических библиотек (DLL) на C, объектов COM Automation и .NET-сборок (assemblies);


    VisualWorks поддерживает

    практически все
    современные платформы, однако мы вели разработку только под Windows, с использованием COM.



    Общие впечатления от процесса разработки такие:

    • [+] Очень простой и выразительный язык. Термин «объектно-ориентированный» к нему подходит в значительно большей степени, чем к «раскрученным» C++, Java, C# и даже Python.

    • [+] Среда, в сравнении с теми же Visual Studio и Eclipse работает очень шустро. Все средства обзора и рефакторинга классов в наличии.

    • [+] Очень удобные отладчик и инспектор объектов. Особенно радует то,
      что адресное пространство у разрабатываемой программы общее со
      средой (при необходимости, саму среду можно модифицировать). С изменением
      кода «на лету» в процессе отладки нет никаких проблем.

    • [-] Все окна среды существуют не внутри «главного» окна,
      а сами по себе. В интерфейсе Windows нет виртуальных рабочих столов, и
      когда количество окон VisualWorks превышает 5, становится неудобно; у окон даже
      иконки одинаковые. Update: В репозитории Cincom есть пакет Windows Icons, который
      снабжает окна разных типов разными иконками.

    • [+] Есть удобное средство для проектировния GUI; сам язык как нельзя лучше подходит для программирования интерфейсов.

    • [-] Элементы интерфейса (widgets) -- собственные, а не «родные» системные. На последние
      планируется переход в будущих версиях.

    • [-] Поддержка COM неполна; например, нет возможности вставить в интерфейс OLE control. Есть библиотека SmallCom немецкой фирмы, но её бесплатная версия имеет
      чисто демонстрационную функциональность, и та у нас не заработала. Помимо отсутствия OLE controls, есть другое неприятное упущение.

    • [-] Поддержка Oracle неполна; авторы недоделали интерфейс для временных больших объектов (temporary LOB-s). Нам пришлось писать его самим.

    • [-] Поддержка .NET вообще «ниже плинтуса» -- ей не удалось воспользоваться, хотя мы пытались.

    • [+] Понравилось то, что вся разрабатываемая программа вместе со средой разработки и её настройками содержится в едином файле образа (image); это очень упрощает передачу проекта со всей инфраструктурой между
      машинами. С исходными текстами у VisualWorks своя кухня, которая, впрочем, не очень нарушает принцип. Для параллельной разработки в VisualWorks есть собственная система контроля версий под названием SToRE; нам она не потребовалась.

    • [-] Виртуальная машина не совсем стабильна; при аварийном закрытии теряется всё, что делалось
      со времени последнего сохранения образа. Сама по себе она «падает» редко, но с использованием
      низкоуровневых библиотек типа COM это становится проблемой, т.к. эти библиотеки работают в адресном пространстве среды.
      Update: исходники всё же можно восстановить через Tools->Change List, импортировав файл «.cha».

    • [+] Готовое приложение можно выпустить в виде монолитного исполняемого файла (single executable).
      Для этого сначала надо с помощью утилиты RuntimePackager сделать образ (runtime image), в котором будет только та часть среды, которая нужна для запуска приложения, а затем с помощью сторонней утилиты Resource Hacker запаковать
      образ и виртуальную машину VisualWorks в исполняемый файл.

    9:22p
    VisualWorks и HBITMAP
    В библиотеке VisualWorks есть класс Pixmap, являющийся обёрткой системного объекта Windows Bitmap.
    Он не поддерживает одну простую вещь: инициализацию по заданному указателю HBITMAP (bitmap handle),
    полученному, например, из COM-объекта System.Drawing.Bitmap методом GetHbitmap.



    Инструкция даётся здесь:
    надо создать pixmap и подменить вторые 4 байта в массиве handle.



    Вот кусок кода:
       image := comDriver getProperty: 'Image'.
       hbitmap := image invokeMethod: 'GetHbitmap'.
       pixmap handle longAt: 5 put: hbitmap.
       image release.


    Поле handle изначально в классе Pixmap закрыто; одноимённый метод для доступа к нему тоже необходимо создать.

    << Previous Day 2006/10/24
    [Calendar]
    Next Day >>

About LJ.Rossia.org