
С выходом на большую арену 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:
- Кликаем левой кнопкой по незанятому окнамм пространству (рабочему столу), если все пространство занято, то закройте окно
Preference Browser;
- В появившемся меню кликаем по пункту
open... и в подменю выбираем Universe browser (enchanced);
- В окне нажимаем на
Update list from network после того, как обновление завершится, выберите категорию Fonts, а в ней пакет FreeType Plus. В списке версий кликните средней кнопкой на самой свежей версии и в контекстном меню выберите Select this version;
- После нажатия на кнопку
Install selection начнется процесс установки, а когда он завершится, ваш образ будет уметь делать вызовы к C библиотекам и работать с FreeType;
- Далее опять откроем меню
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 (выполнили). Все тоже самое можно сделать через меню, но займет это больше времени, ибо данное меню не удобно :(;
- Теперь откройте
Preference Browser (World->Open...->preference Browser) и в категории FreeType подберите параметры отображения по вкусу;
- Затем перейдите в категорию
Windows и установите UI Theme в наиболее понравившуюся (мой выбор Watery 2);
- PROFIT!
Для Pharo-based образов:
- Левый клик по рабочему столу и в меню
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 (выполнили);
- Открываем
Preference Browser (World->System...->Preferences...->Preference Browser) и настраиваем FreeType и тему, как приведено выше;
- PROFIT!
UTF-8
Вроде бы теперь Squeak выглядит пристойно, но если вы попробуете набрать текст по-русски, то вряд ли, что-то кроме вопросиков увидите. Нам надо исправить такое прискорбное поведение:
- Скачиваем файл (так просто быстрее всего);
- Открываем
File Browser (Pharo: World->Tools...->File Browser Squeak: World->Open...->File list);
- Находим скачанный файл, выделяем его и щелкаем по кнопке
Install;
- Надо закрыть и открыть образ заново (не знаю почему, но ввод не подхватывается).
World->Save and Quit;
- 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 написанная сообществом. Весьма занятная и интересная — рекомендую, если вам понравится первый туториал
На этом разрешите откланяться и удалится. Если на этот Хабратопик будет много положительных отзывов, то я скорее всего продолжу.

_________
Текст подготовлен в
ХабраРедакторе
комментарии (52)
Я как-то не осилил Squeak. :( (там было как-то многовато окошек с кнопочками..)
Я красноглазик, признаюсь.
> Если пойти по первому приведенному в списке туториалу, то будете понимать его значительно лучше.
Окей, так и сделаю. Thnx!
Удачи :)
Вот оно, программирование с Божьей помощью!
Нет, он конечно был более успешным ООП-языком, чем его предшественник Simula, ну и первые серьёзные реализации VM/IDE мы увидели именно в нём. Но сейчас то зачем? Когда есть Java/Groovy/Ruby/etc…
Я уверен, что когда появится MagLev вопросы отпадут сами собой.
И, кстати, он не был, а есть. У Smalltalk есть ряд достоинств, но не перед конкретным языком, а сами по себе. Если он для како-то задачи подходит меньше чем Groovy, то целесообразнее использовать именно Groovy.
Кстати, напишите, что описание под мак, а то в винде таких шрифтов как 'Liberation Sans' нет, хотя я до этого не добрался.
По ссылке на исходник (gz) щелкните правой кнопкой и выберите «Save as» — это именно gz архив.
Вместо моих названий шрифтов можете указать любой установленный в вашей системе, например «Arial».
У меня не Мак, а Ubuntu.
по крайней мере мне 7zip сказал, что это не архив, да и при открытии блокнотом не похоже.
Списка версий пакетов у меня не было, просто в списке пакетов были
FreeType Plus version 0.3
FreeType Plus version 0.4
FreeType Plus version 0.5
Скорее всего потому что браузер — базик.
Про среднюю кнопку меня ещё заклинило. Если вы про среднюю кнопку мыши, то у меня её уже давно нет, а на ноуте и мыши нет.
Да с кнопками мыши в Squeak — целое приключение. Это отдельная тема
Но ещё нужно сказать в защиту Smalltalk, что там можно начать играться с языком даже без особых познаний синтаксиса. А примеры синтаксиса отлично просматриваются в браузере методов.
>>Данная статья ни какого отношения к SmallTalk-у не имеет, а рассказывает о том, как настроить одну среду (по сути — текстовый редактор), причем, далеко не самую популярную.
Я скажу вам по секрету, что IDE для Smalltalk — была неотделима от самого языка с 70-х годов, с самого зарождения. А Squeak — самый доступный во всех отношениях диалект.
после этого сквик просто вылетает. как исправить?
Preferences setMenuFontTo: font.