Cчетчик со страницы Getting Started на момент публикации статьи
С минуты на минуту случится то, чего ждали очень многие, и я в том числе. А именно: компания ObjectArts полностью открывает исходники и выпускает язык и среду разработки Dolphin Smalltalk под открытой лицензией MIT!
О проекте
DolphinSmalltalk — это среда разработки на собственном диалекте Smalltalk для Windows. Ключевыми особенностями является тесная интеграция с нативными виджетами и подсистемами операционной системы, включая COM и ActiveX, и приятный глазу графический дизайн.
Долгое время Dolphin Smalltalk был доступен в двух вариантах: условно-бесплатная ограниченная версия (community edition) и платный пакет для профессиональной разработки. Последний давал доступ ко всем функциям, включая продвинутые редакторы и публикацию приложений в standalone режиме, однако стоил около четырехсот долларов, что, по понятной причине, устраивало далеко не всех.
Похоже, что компания таки одумалась (или терять стало нечего) и решила выпустить ПО на волю. Под катом краткое описание среды разработки и размышления на тему open source будущего Dolphin Smalltalk.
Возможности среды разработки
Практически любой диалект Smalltalk предоставляет возможности, которые нынче принято считать «джентельменским набором» любой современной IDE. Dolphin Smalltalk не является исключением.
IDE предоставляет как обычные возможности, вроде code assist, навигации по коду и встроенного отладчика, так и средства, специфичные для Smalltalk: поддержку тестов SUnit, управление публикацией приложения (упаковка, вырезание лишних классов), WYSIWYG редактор интерфейсов и многое другое. Мне нравится возможность поиска по всему содержимому проекта, включая классы, методы и комментарии, доступная в тулбаре любого окна.
Навигация
Разбираясь с незнакомым кодом на традиционных языках мы открываем файлы исходных текстов и читаем их подряд. Smalltalk организован несколько по другому. Вместо простыни исходных текстов мы имеем иерархию классов и списки их методов. Значительное время проводится именно в изучении иерархии классов, которая в Dolphin представлена довольно аккуратным Class Browser-ом.
Отладка
Отладка динамических языков всегда была проще, чем кропотливая работа с креш дампами. В Smalltalk это вынесено на уровень выше. При отладке приложения мы можем не просто наблюдать каждый шаг работы программы, но и взаимодействовать с объектами в диалоговом режиме. Помимо тотальной интроспекции программы Dolphin предоставляет возможность буквально ткнуть в любой элемент окна и мгновенно получить все его свойства и содержимое в окне инспектора.
Часто бывает так, что при написании программы многие методы приходится оформлять заглушками, поскольку времени на все про все не хватает. Если в ходе выполнения традиционной программы управление доходит до заглушки, то нам остается только вывести сообщение в лог или вывалиться по ассерту, если дальнейшее выполнение программы невозможно.
В Smalltalk мы можем «помахать кулаками после драки»: когда виртуальная машина обнаруживает, что требуется вызвать отсутствующий в данном классе метод, то выполнение программы приостанавливается, а машина спрашивает программиста о дальнейших действиях. В этом месте мы имеем возможность доопределить метод прямо по ходу выполнения программы и продолжить выполнение, как ни в чем не бывало. Это может быть очень полезно, когда программа сложная, и приходится долго трудиться, чтобы полностью воспроизвести ситуацию.
Что это даст нам, простым смертным?
Если все будет действительно так, как заявлено, то сообщество получает отличный инструмент для быстрой разработки и прототипирования софта под Windows. Меня, как пользователя Linux, разработка под Windows не очень интересует. Тем не менее, я считаю, что это событие можно использовать и в своих целях.
В первую очередь я обратил бы внимание на внутреннее устройство виртуальной машины, которая к слову считалась весьма быстрой еще во времена Windows XP, хотя, насколько я знаю, JIT они не используют.
Если существует техническая возможность портирования Dolphin Smalltalk на другие ОС, можно ожидать появления дружественных к неподготовленному пользователю сред разработки на Smalltalk. Большое количество кода было написано в рамках интеграции с ОС. Другим средам, таким как Pharo это может быть на руку.
Наконец, удобная среда разработки с большим количеством встроенной документации и великолепным иллюстрированным туториалом может быть полезна начинающим и способствовать развитию самого языка Smalltalk.
В комментариях прошу делиться своими мыслями и предложениями.
UPD: На гитхабе появились репозитории Dolphin и DolphinVM.
А напоследок, маленький опрос:
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (15)
chaetal
29.12.2015 20:37В общем-то, результат голосования был предсказуем :)
Halt
29.12.2015 21:07+3Да, разумеется. Меня скорее интересовало распределение, а не результат.
Но лежащие рядом исходники это всегда хорошо. Можно почитать, поплеваться, а иногда и украсть идею :)chaetal
29.12.2015 21:57Да вообще интересно: как такой продукт — на минуточку, покруче Delphi будет …точнее был :) — делали и развивали два человека (если не ошибаюсь?).
Halt
29.12.2015 22:04+7Насколько я помню да, двое. Причем последнее время тянул один. Это косвенно намекает на производительность смолтока.
Мне очень жаль, что у них ничего не взлетело и что они решились на открытие исходников лишь спустя двадцать (!) лет — первые объекты DolphinVM начала крутить в феврале 1995 г.
Дабы почтить память проекта, а заодно и продемонстрировать наконец его возможности я хочу выложить обзорную статью, где пройдусь по образу и потыкаю его палочкой. Думаю, сообществу будет интересно, поскольку многие вещи до сих пор не приняты и посторонним кажутся волшебством например возможность загрузить софт ровно в том виде, в котором он был закрыт (включая окна, позиции курсора и содержимое буфера обмена).
sheknitrtch
29.12.2015 21:09Отличная новость! Dolphin Smalltalk одна из немногих реализаций Smalltalk, которые нормально выглядят и ведут себя под Windows. Тот же Pharo выглядит отталкивающе для новичков. Будем надеятся, что взлетит.
sheknitrtch
29.12.2015 21:27+1К стати, у Dolphin Smalltalk есть классная фича — экспорт в EXE файл. Раньше она была доступна только в платной версии. Но теперь её может пощупать любой.
chaetal
29.12.2015 21:46А вы давно на Pharo смотрели? :) Сугубое мое ИМХО: он уже некоторое время как не отталкивающ
Halt
29.12.2015 22:05Я думаю sheknitrtch говорит не столько о визуальном оформлении, сколько о принятых стилях пользовательского интерфейса.
chaetal
29.12.2015 22:11То есть, речь о Morphic-е? Его в Pharo урезали, но время такого интерфейса еще придет… А те, кого отпугивает, сами себе злобные буратины :)
SvyatoslavMC
29.12.2015 22:56+5Отличная новость! Проверю на досуге с помощью PVS-Studio.
Halt
30.12.2015 10:48Посмотрел код виртуальной машины — там та еще лапша. Ну и разумеется написано все на C-- (который вроде как C++, но по факту махровый C с вкроплениями ключевых слов из C++).
Я подозреваю, что вы там утонете :) Впрочем, тем интереснее посмотреть на результат.chaetal
30.12.2015 14:07…Сдается мне, это как раз основная проблема современного Smalltalk-а
Halt
30.12.2015 15:29За все реализации отвечать не могу, достоверно говорить могу только о трех: собственно DolphinSmalltalk, LittleSmalltalk и наш проект, LLST. Есть конечно еще CogVM, но я недостаточно компетентен, чтобы про него говорить (тем более что он вроде как написан на самом Smalltalk который был транслирован в Си).
Оригинальный LittleSmalltalk написан на чистом Си и там правда все печально — много необоснованного трокачества, макрос-ориентированное программирование, ручной рассчет смещений полей и прочие прелести. Все это я писал в вводной статье.
В LLST мы в первую очередь постарались свести к минимуму рутиную работу программиста и максимально облегчить ему жизнь. Например, были реализованы шаблоны безопасного доступа к элементам кучи, структуры базовых объектов и удобные операции преобразования типов с проверками. Ручное управление памятью и небезопасные операции выполняются только в ограниченном количестве мест и подробно описаны в комментариях.
В DolphinSmalltalk что-то похожее есть, но сделано весьма поверхностно. Очень много ручной магии с указателями, практически в каждой функции естьreinterpret_cast
. Ну и самое страшное — указатели смешаны с целочисленными типами данных by design. Справедливости ради стоит сказать, что сравнивать LLST и Dolphin некорректно — это проекты из разных весовых категорий. В то же время, это нисколько не извиняет разработчиков.
… Все это приводит меня к мысли, что о портировании виртуальной машины можно забыть. Да и незачем в общем-то. Основную ценность составляет высокоуровневый код Smalltalk, а не исходники виртуальной машины, которая действительно устарела на 20 лет.
Rogaven
Он [smalltalk] еще жив? :-D
Halt
Будем считать, что я не заметил сарказма и ответил серьезно.
Что значит, что язык жив? Если поскрипеть мозгами, то можно предложить такое определение: язык жив, когда он востребован, имеет стабильное комьюнити и развивается. Такому определению смолток соответствует. Востребованность существует как экономическая, так и академическая. Комьюнити сейчас составляют профессиональные разработчики (которым в общем-то нет дела до холиворов) и энтузиасты-любители, подавляющее большинство которых сосредоточено вокруг проекта Pharo, плюс отдельные извращенцы вроде меня и Humbug, которые занимаются исследованиями компиляторов и считают Smalltalk удобным модельным языком по тем или иным причинам.
Я понимаю, что «полторы вакансии» могут вызывать ехидные смешки со стороны прикладных разработчиков, но тем не менее, мы говорим о фактах а не о числах. В этом смысле Smalltalk не менее жив, чем Haskell, который еще более далек от императивного мейнстрима, но тем не менее считается живым.
В то же время следует отметить, что в отличие от сугубо утилитарных языков вроде COBOL (который, кстати, тоже живет и здравствует и участвует при переводе зарплаты вам на карточку), Smalltalk умудряется оставаться актуальным. Некоторые моменты его архитектуры не устаревают со временем и вполне могут конкурировать с современными технологиями.
Конечно, есть и недостатки. Основной на мой взгляд, это консервативное сообщество и недостаточная его вовлеченность в проблемы современной разработки. Потом, есть и проблемы чисто технического плана, например грамотная поддержка многоядерности и параллелизма, которая тем не менее решается.
Smalltalk был «забыт» в те времена, когда производительность отдельно взятой машины была критически важна для бизнеса. В то время Smalltalk выглядел медлительным а его использование казалось экономически неоправданным. В последнее время производительность электроники выросла настолько, что можно вполне успешно крутить Linux в эмуляторе x86 в броузере, да и вполне активное существование NodeJS не вызывает ни у кого вопросов. В такой среде Smalltalk вполне может получить вторую жизнь.
Надеюсь, что я ответил на ваш вопрос.