![Smalltalk Logo](https://habrastorage.org/getpro/habr/post_images/ffc/eb5/5fb/ffceb55fbcad69f54f650883f8ec6d2f.jpg)
Однако, это неправда! Все это время 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 написанная сообществом. Весьма занятная и интересная — рекомендую, если вам понравится первый туториал
На этом разрешите откланяться и удалится. Если на этот Хабратопик будет много положительных отзывов, то я скорее всего продолжу.
![](https://habrastorage.org/getpro/habr/post_images/b67/b74/ef2/b67b74ef2f778107162d791ef3138a9c.png)