войти зарегистрироваться

Как попробовать 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 написанная сообществом. Весьма занятная и интересная — рекомендую, если вам понравится первый туториал


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

_________
Текст подготовлен в ХабраРедакторе

комментарии (52)

  • Одобряю! ) И советую перенести в какой-нибудь тематический блог, чтоб пост попал на главную.
    • Спасибо. Перенесу в Языки программирования
      • Если будет серия, может имеет смысл создать блог Smalltalk? :)
  • Спасибо, очень интересно. Но читать тяжело — у вас очень много лишних запятых.
    • Поправьте пожалуйста, я исправлю.
  • Неплохо, однако, хотелось бы услышать прагматичное сравнение с той же Схемой.
    • К сожалению со Scheme не знаком. Но Scheme, хоть и мультипарадигменный, но прежде всего функциональный, а Smalltalk чистый ООП.
      • А какую реализацию проще всего установить, чтобы поиграться именно с языком?

        Я как-то не осилил Squeak. :( (там было как-то многовато окошек с кнопочками..)
        • Если у вас Windows, то можете попробовать Dolphin. У него хорошие туториалы в комплекте. В противном случае могу присоветовать Pharo. Но Squeak такой неуклюжий и аляповатый только на первый взгляд. Если пойти по первому приведенному в списке туториалу, то будете понимать его значительно лучше. И он не будет больше вызывать различных позывов, свойственных эпилептикам, при виде такого буйства красок :)
          • > Если у вас Windows, то можете попробовать Dolphin.

            Я красноглазик, признаюсь.

            > Если пойти по первому приведенному в списке туториалу, то будете понимать его значительно лучше.

            Окей, так и сделаю. Thnx!
            • Только будь осторожны и сохраняйте образ почаще :) Автор не предупреждает, но когда вы на ходу меняете обработчик отрисовки и допускаете в нем ошибку — это может привести к различным StackOverflow и иже с ними. :)
              Удачи :)
        • Я тоже его не осилил по началу. Но когда перешёл на Линукс, выбора как-то не осталось :)
  • > Я расскажу про самые популярные образа в мире Squeak.

    Вот оно, программирование с Божьей помощью!
    • :) Ну кто-то до сих пор на столе иконы держит.
  • Большое спасибо! Очень интересная статья. Ждём продолжения!
    • Кушайте, на здоровье. (с)
      • запятая не нужна, если предполагалось «кушайте для здоровья» ;)
  • А почему блог Smalltalk не создадите? Тем более если решили продолжать писать.
    • Полуживой блог — это не то, чего хочется. Как наберется статей десять и будет постоянная аудитория, тогда и блог можно. А пока пускай тут полежит — поди не потеряется.
      • Плюс блога в том что на него можно подписаться:) Да и вообще следить за новыми статьями проще.
        • Сократим минимум до 4 статей. Просто на самом деле, у меня времени бывает — не бывает. Пока обнадеживать никого не хочу, если только кто компанию составит :)
      • Это вот точно. Не хотелось бы, чтобы на хабре появилось нечто вроде мёртвого community.livejournal.com/ru_smalltalk
        • ru_smalltalk — укрепляет представление о языке, как о мертвом :)
  • А какие преимущества у Smalltalk перед тем же Ruby к примеру?

    Нет, он конечно был более успешным ООП-языком, чем его предшественник Simula, ну и первые серьёзные реализации VM/IDE мы увидели именно в нём. Но сейчас то зачем? Когда есть Java/Groovy/Ruby/etc…
    • Странно, что вы не упомянули scala :)
      Я уверен, что когда появится MagLev вопросы отпадут сами собой.
      И, кстати, он не был, а есть. У Smalltalk есть ряд достоинств, но не перед конкретным языком, а сами по себе. Если он для како-то задачи подходит меньше чем Groovy, то целесообразнее использовать именно Groovy.
  • Скачал 3.10 со стандартным образом, разработческий образ не нашёл, у вас по ссылке не gz скачивается, а исходник. Названия пунктов меню не соответствовали, дофантазировал. Выбрал установку шрифтов. Всё повисло.

    Кстати, напишите, что описание под мак, а то в винде таких шрифтов как 'Liberation Sans' нет, хотя я до этого не добрался.

    • Squeak-dev images — разработческие образа.
      По ссылке на исходник (gz) щелкните правой кнопкой и выберите «Save as» — это именно gz архив.
      Вместо моих названий шрифтов можете указать любой установленный в вашей системе, например «Arial».
      У меня не Мак, а Ubuntu.
      • Вот это они, а вот тут ftp.squeak.org/3.9/SqueakV39.sources.gz не они,
        по крайней мере мне 7zip сказал, что это не архив, да и при открытии блокнотом не похоже.
        • Не хочу показаться упертым, но это gz архив :) Как минимум в пользу этой гипотезы говорит тот факт, что после его распаковки появляется файл SqueakV39.sources по объему в 4 раза превышающий оригинал.
        • Понял в чем проблема. Контент отдавался с gzip заголовком. Мой файрфокс так и сохранил архив. А вот IE сохранил распакованный поток. Интересно. Так, что скорее всего вам не надо ничего распаковывать, а только переименовать (убрать расширение gz), ориентируйтесь по размеру — он должен быть в районе 16Мб.
      • я то titlу окна, подумал, что мак.
    • Кстати, что у вас за система?
    • Уточните, пожалуйста про пункты меню. Просто, я скорее всего, не учел что в squeak-dev и squeak-basic они могут отличаться.
      • Могут и для разных операционок сборки различаться)

        • Для разных операционок отличаются только виртуальные машины. Образы абсолютно платформо-независимы.
      • Universe browser (enchanced) у меня не было, был только Universe browser (basic).
        Списка версий пакетов у меня не было, просто в списке пакетов были
        FreeType Plus version 0.3
        FreeType Plus version 0.4
        FreeType Plus version 0.5

        Скорее всего потому что браузер — базик.

        Про среднюю кнопку меня ещё заклинило. Если вы про среднюю кнопку мыши, то у меня её уже давно нет, а на ноуте и мыши нет.
        • Да, моя оплошность. Я изначально хотел три скринкаста записать, но сил уже не было. Наверное все же в будущем перейду на скринкасты.
          Да с кнопками мыши в Squeak — целое приключение. Это отдельная тема
  • Данная статья ни какого отношения к SmallTalk-у не имеет, а рассказывает о том, как настроить одну среду (по сути — текстовый редактор), причем, далеко не самую популярную. Я ожидал увидеть хотя бы маленький кусочек кода типа «hello world» разложенный по косточкам, а так же сравнение некоторых базовых конструкций с тем же C++. Без этого «попробовать на вкус» язык не представляется возможным. За это автор получает твердый минус!
    • Для того, что б попробовать язык первое что нужно сделать — поставить среду исполнения. И эта нетривиальная задача как раз здесь и описывается. Я надеюсь что автор этого поста и другие любители Smalltalk вскоре продолжат этот пост в серию статей.
      Но ещё нужно сказать в защиту Smalltalk, что там можно начать играться с языком даже без особых познаний синтаксиса. А примеры синтаксиса отлично просматриваются в браузере методов.
    • К сожалению, у меня было не так много времени, что бы написать портянку на 10 печатных страниц. Но я учту ваше пожелание в будущем. Но хочу сказать, что установка Squeak и настройка шрифтов, а что самое главное — настройка юникодного ввода, далеко не самая тривиальная задача, а вот работу облегчает.

      >>Данная статья ни какого отношения к SmallTalk-у не имеет, а рассказывает о том, как настроить одну среду (по сути — текстовый редактор), причем, далеко не самую популярную.
      Я скажу вам по секрету, что IDE для Smalltalk — была неотделима от самого языка с 70-х годов, с самого зарождения. А Squeak — самый доступный во всех отношениях диалект.
  • *положительный отзыв*
  • , затем нажмем Ctrl+A,Ctrl+D (выполнили);

    после этого сквик просто вылетает. как исправить?
    • Извените, а какой образ выбрали? Squeak basic?
      • пробовал это сделать в Development images by Damien Cassou и Pharo. там и там при попытке изменить шрифт меню сквик вылетает(
        • Когда вылетает виртуальная машина, в папке с образом остается парочка новых файлов с отладочной информацией, если вам не сложно — пришлите их мне (почта в профайле). Это необычное поведение.
  • вылетает он только из-за этого:
    Preferences setMenuFontTo: font.
    • Я проверю завтра на WinXP. Но у меня под Линукс — все в порядке.
  • спасибо. вся информация собрана в единое целое и представляет стартовую площадку для интереса. а с языком я хотел ознакомиться уже давно.
    • Друзья ярушники:) На здоровье. Может помогу чем в освоении.
  • Странно, меня учили, что Squeak — не диалект или реализация Smalltalk, а отдельный язык, хотя и продолжающий идеи Smalltalk. Всё-таки они не только набором библиотек и расширений отличаются, но и синтаксисом.
    • Ну вообще-то Squeak — это диалект и реализация Smalltalk-80. Не смотря на то, что все диалекты отличаются, среди некоторых эти отличи больше, среди других меньше. Но если я правильно помню, то в смолтолке 5 зарезервированных слов, все остальное сахар. Я также могу добавить свою ложечку сахара, отредактировав дерево классов Compiler.
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.