Pull to refresh

Как попробовать Smalltalk на вкус

Programming *Smalltalk *
Smalltalk LogoС выходом на большую арену Ruby и с появлением фреймворка Seaside, все чаще упоминается Smalltalk. Однако, среди молодого поколения (разработчики до 30 лет) бытует мнение, что это мертвый язык, разработанный на заре появления ПК и тогда же похороненный. Упоминание о Smalltalk на лекциях по ЯП, недалеко от COBOL, делает его еще более архаичным.

Однако, это неправда! Все это время Smalltalk жил, иногда даже рядом с нами, развивался, использовался для решения серьезных задач, а иногда — для несерьезных. вот тут просто фраза как-то странно построена. Но вот притока свежей крови в сообщество разработчиков практически не было. Причины сейчас перечислять бессмысленно.

Но что происходит когда программисту хочется попробовать что-то новенькое? Он пытается это сделать. И от того, насколько это легко или сложно, с какими проблемами он столкнется, зависит его отношение к инструменту в дальнейшем.

Что выбрать для знакомства?


Для Smalltalk'а долгие годы был характерен высокий порог входа, несмотря на то, что сам язык достаточно прост и интуитивен. Прежде всего это было связано с доступностью инструментария. Но время идет и ситуация меняется. Сейчас есть несколько доступных реализаций Smalltalk:

Как выбрать правильный диалект, чтобы не прогадать? Сначала может показаться, что лучшим вариантом будет некомерческая версия платного продукта, но так ли это?

Dolphin Smalltalk — очень хороший продукт, но он больше не поддерживается и не развивается (несмотря на опровержение). Найти под него библиотеки не самая простая задача, хотя они уже есть. Плюс добавим к этому зависимость от ОС и достаточно специфичную реализацию базовых классов. Но несмотря на это он обладает полным набором инструментов для разработки приложений под Windows прямо «из коробки».

VisualWorks Smalltalk — серьезный продукт, ориентированный на разработку сложных и серьезных приложений. Работает почти на всех популярных платформах. Но инсталяционный диск весит 650 Мб!!! И хотелось бы предупредить, что после установки, он не самая удобная среда разработки. Конечно все устанавливается и настраивается, но это требует времени, сил и знаний, а этого у нас пока нет.

GNU Smalltalk — Open Source реализация Smalltalk от GNU. Аскетичный как и все «гнутое». Интерпретатор запускается из командной строки и принимает на вход исходный код. Очень неплохо подходит для написания различных скриптов (ну может чуть похуже питона, за счет меньшего кол-ва библиотек). Разработка приложений и знакомство с языком — не конёк этого диалекта.

Squeak — Open Source реализация Smalltalk, авторами которой являются авторы самого языка: Алан Кей, Дэн Инголс и Адель Голдберг. К особенностям можно отнести то, что работает на всех популярных платформах, позволяет разрабатывать код для виртуальной машины и плагины прямо «внутри себя», используя упрощенный диалект Smalltalk. Занимает достаточно немного места и содержит весь необходимый инструментарий для разработки, в том числе и на Seaside. Но когда человек первый раз запускает Squeak, то сразу задается вопросом: «Как на этом можно программировать?» Традиционно этим запуском все и ограничивается.

Так что же выбрать незнакомому со Smalltalk'ом программисту? Я настаиваю на Squeak и дальше я покажу как можно избежать созерцания всех этих рющечек и сосредоточится на разработке, а также решение типовых проблем.

Установка


Для того, что бы запустить Squeak нам понадобится виртуальная машина. Скачать ее для своей платформы можно по адресу http://squeak.org/Download/. Для Windows и MacOS X никаких трудностей нет — качаем и распаковываем. А вот у линуксоидов есть небольшая проблемка, им надо установить VM в системе (благо скрипт уже исправили). Не советую ставить из пакета: там достаточно старая версия. Поэтому идем качаем для GNU/Linux. Распаковываем архив. И выполняем sudo ./INSTALL.

Выбор образа


Smalltalk — это image-based язык. То есть все происходит внтури образа, который загружается в виртуальную машину. Можно сравнить с ОС которая выполняется в VMWare. После того как вы нажмете Save & Quit, а затем вновь откроете образ, выполнение продолжится ровно с момента сохранения. Функциональность образа определяется содержащимся в нем набором объектов, включая объекты классов. Собственно это главное отличие одного образа от другого.

Какие образы доступны? У большинства разработчиков Squeak — есть свой образ, и некоторые выкладывают его в публичный доступ. Поэтому при глубоком изучении вопроса, может обнаружится огромное кол-во вариантов. Я расскажу про самые популярные образа в мире Squeak.

Squeak basic — стандартный образ, предоставляемый по умолчанию. Содержит всю аляповатость и прочий мусор. Исторически сложилось, что во время разработки Squeak под девизом «Multimedia & Education» в базовый образ вошли, а затем тесно переплелись различные проекты: EToys, MVC, Morphic etc. И теперь их исключить из образа крайне сложно. Также базовый образ не содержит кучи приятных для разработки пакетов. Его можно рекомендовать только с целью ознакомления с EToys или для обучения детей.

Development images by Damien Cassou — активный член сообщества раз в месяц делает сборку образов, в которые входят свежие версии инструментов для разработчика. Сборки базируются на Squeak basic образе, но все «игрушки» убраны подальше от глаз. Дэмиен делает два образа: dev и web-dev. Второй отличается от первого тем, что содержит инструменты для web разработки: Seaside, Pier, AIDA и прочие. Образы отличаются высокой стабильностью и хорошим качеством инструментов. Очень рекомендую. Также есть два аналогичных образа, основанных на Pharo.

Pharo — это целый проект. Целью проекта является создание открытой высококачественной платформы для разработки на Smalltalk. В основу лег Squeak. Одна из основных особенностей — это интенсивное использование трейтов (traits). Стандартная реализация потоков заменена на Nile — trait-based. Также, на подходе Rio — фреймворк для работы с файловой системой. Сообщество шаг за шагом удаляет из образа пережитки прошлого, оставляя только инструменты разработки. Качество образа очень высокое — кол-во красных и желтых тестов постепенно уменьшается. Очень хороший образ для непосредственной разработки — легковесный и не содержит лишнего.

На данный момент — это три самых популярных образа для Squeak. Над всеми тремя ведется интенсивная работа по улучшению. Если вы хотите начать с какого-либо туториала, то я посоветовал бы взять девелоперский образ Дэмиена. Также этот образ идеален, если вы хотите начать с Seaside или Pier. Я же пока знакомлюсь с Pharo.

Запускаем


Для начала скачиваем архив с выбранным образом, по соответствующей ссылке, и распаковываем его. Затем качаем файл с исходным кодом образа 3.9 и распаковываем его в ту-же директорию. После этого дабл-клик на файле с расширением .image и ищем squeak[.exe] (для линуксоидов он будет в /usr/local/bin). Вуаля. Smalltalk запущен. Но вам скорее всего не понравится, то что вы увидите в первый момент… Но мы можем все исправить.

Настраиваем и исправляем


Шрифты


Прежде всего — это шрифты. Стандартный растровый шрифт ужасен, по сравнению с теми, к которым мы привыкли. Что бы это исправить, нам нужно проделать несколько несложных модификаций.

Только для Squeak basic, squeak-dev и squeak-webdev:
  1. Кликаем левой кнопкой по незанятому окнамм пространству (рабочему столу), если все пространство занято, то закройте окно Preference Browser;
  2. В появившемся меню кликаем по пункту open... и в подменю выбираем Universe browser (enchanced);
  3. В окне нажимаем на Update list from network после того, как обновление завершится, выберите категорию Fonts, а в ней пакет FreeType Plus. В списке версий кликните средней кнопкой на самой свежей версии и в контекстном меню выберите Select this version;
  4. После нажатия на кнопку Install selection начнется процесс установки, а когда он завершится, ваш образ будет уметь делать вызовы к C библиотекам и работать с FreeType;
  5. Далее опять откроем меню World (клик по рабочему столу) и выберем Open...->workspace и скопируем в появившееся окно следующий код (имена шрифтов и размеры можете изменить, я использую Liberation fonts из пакета liberation-ttf, Ubuntu 8.10):
    |font codeFont tooltipFont |
    font := LogicalFont familyName: 'Liberation Sans' pointSize: 9 emphasis: TextEmphasis normal emphasisCode.
    tooltipFont := LogicalFont familyName: 'Liberation Sans' pointSize: 7 emphasis: TextEmphasis normal emphasisCode.
    codeFont := LogicalFont familyName: 'Liberation Mono' pointSize: 9 emphasis: TextEmphasis normal emphasisCode.
    Preferences setListFontTo: font.
    Preferences setMenuFontTo: font.
    Preferences setCodeFontTo: codeFont.
    Preferences setButtonFontTo: font.
    Preferences setSystemFontTo: font.
    Preferences setBalloonHelpFontTo: tooltipFont.
    font := LogicalFont familyName: 'Liberation Sans' pointSize: 11 emphasis: TextEmphasis bold emphasisCode.
    Preferences setWindowTitleFontTo: font.

    , затем нажмем Ctrl+A,Ctrl+D (выполнили). Все тоже самое можно сделать через меню, но займет это больше времени, ибо данное меню не удобно :(;
  6. Теперь откройте Preference Browser (World->Open...->preference Browser) и в категории FreeType подберите параметры отображения по вкусу;
  7. Затем перейдите в категорию Windows и установите UI Theme в наиболее понравившуюся (мой выбор Watery 2);
  8. PROFIT!

Для Pharo-based образов:
  1. Левый клик по рабочему столу и в меню World выбираем Workspace. Затем вставляем в появившееся окно следующий код:
    |font codeFont tooltipFont|
    font := LogicalFont familyName: 'Liberation Sans' pointSize: 9.
    tooltipFont := LogicalFont familyName: 'Liberation Sans' pointSize: 7.
    codeFont := LogicalFont familyName: 'Liberation Mono' pointSize: 9.
    Preferences setListFontTo: font.
    Preferences setMenuFontTo: font.
    Preferences setCodeFontTo: codeFont.
    Preferences setButtonFontTo: font.
    Preferences setSystemFontTo: font.
    Preferences setBalloonHelpFontTo: tooltipFont.
    font := LogicalFont familyName: 'Liberation Sans' pointSize: 11.
    Preferences setWindowTitleFontTo: font.

    , затем нажмем Ctrl+A,Ctrl+D (выполнили);
  2. Открываем Preference Browser (World->System...->Preferences...->Preference Browser) и настраиваем FreeType и тему, как приведено выше;
  3. PROFIT!



UTF-8


Вроде бы теперь Squeak выглядит пристойно, но если вы попробуете набрать текст по-русски, то вряд ли, что-то кроме вопросиков увидите. Нам надо исправить такое прискорбное поведение:
  1. Скачиваем файл (так просто быстрее всего);
  2. Открываем File Browser (Pharo: World->Tools...->File Browser Squeak: World->Open...->File list);
  3. Находим скачанный файл, выделяем его и щелкаем по кнопке Install;
  4. Надо закрыть и открыть образ заново (не знаю почему, но ввод не подхватывается). World->Save and Quit;
  5. PROFIT!


Что дальше?


Smalltalk установлен и ждет ваших указаний. Что сделать, что бы понять всю прелесть языка? Есть несколько интересных ресурсов с которых следует начать:
  • Squeak Development Example for Squeak 3.9 — очень хороший туториал, дающий яркое представление техникам использующимся при разработке на Smalltalk, в частности TTD, так как он зародился (для этой обучалки должен подойти squeak-dev образ, на Pharo я думаю не заработает);
  • Seaside Tutorial — туториал для Seaside иллюстрирует основные концепции фреймворка (для этой обучалки вам понадобится squeak-webdev образ или Pharo-webdev);
  • Squeak by Example — книжка по Squeak написанная сообществом. Весьма занятная и интересная — рекомендую, если вам понравится первый туториал


На этом разрешите откланяться и удалится. Если на этот Хабратопик будет много положительных отзывов, то я скорее всего продолжу.

Tags:
Hubs:
Total votes 88: ↑84 and ↓4 +80
Views 16K
Comments Comments 57