|
|
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 в исполняемый файл.
|
|