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


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

    Комментарии 57

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

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

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

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

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

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

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

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

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

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

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

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

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

                                        после этого сквик просто вылетает. как исправить?
                                          0
                                          Извените, а какой образ выбрали? Squeak basic?
                                            0
                                            пробовал это сделать в Development images by Damien Cassou и Pharo. там и там при попытке изменить шрифт меню сквик вылетает(
                                              0
                                              Когда вылетает виртуальная машина, в папке с образом остается парочка новых файлов с отладочной информацией, если вам не сложно — пришлите их мне (почта в профайле). Это необычное поведение.
                                          0
                                          вылетает он только из-за этого:
                                          Preferences setMenuFontTo: font.
                                            0
                                            Я проверю завтра на WinXP. Но у меня под Линукс — все в порядке.
                                            0
                                            спасибо. вся информация собрана в единое целое и представляет стартовую площадку для интереса. а с языком я хотел ознакомиться уже давно.
                                              0
                                              Друзья ярушники:) На здоровье. Может помогу чем в освоении.
                                              0
                                              Странно, меня учили, что Squeak — не диалект или реализация Smalltalk, а отдельный язык, хотя и продолжающий идеи Smalltalk. Всё-таки они не только набором библиотек и расширений отличаются, но и синтаксисом.
                                                0
                                                Ну вообще-то Squeak — это диалект и реализация Smalltalk-80. Не смотря на то, что все диалекты отличаются, среди некоторых эти отличи больше, среди других меньше. Но если я правильно помню, то в смолтолке 5 зарезервированных слов, все остальное сахар. Я также могу добавить свою ложечку сахара, отредактировав дерево классов Compiler.
                                                0
                                                а в чём смысл smalltalk-a? какие задачи проще решаются именно в нём?
                                                  0
                                                  Вообще это язык общего назначения. Соответсвенно решать на нем можно весь спектр задач адресованных данному классу ЯП.
                                                  Ввиду специфики архитектуры безумно продуктивен при использовании TDD и других XP практик.
                                                  Весьма занимательное видео: pharocasts.blogspot.com/2010/02/rest-xml-parsing-and-photos.html
                                                  обратите внимание, что человек делает, когда возникает Exception. Он просто в отладчике исправляет ошибку и говорит «Выполнить метод заново». Запущенная программа не останавливается.
                                                    0
                                                    но для каких конкретных задач smalltalk даёт принципиальное преимущество по сравнению с более популярными оо-языками? какие задачи лучше реализовывать в нём, а не в c++, c# или java?
                                                      0
                                                      Те, которые не предьявляют высоких требований к производительности. Очень хорошо справляется с интеграционными задачами в гетерогенных ИС. Диалект GNU Smalltalk находит применение в задачах связанных с системным администрированием, наряду с Perl и Python.
                                                      По тегу Smalltalk есть ссылка на видео материалы со встречи RSUG в Санк-Петербурге. На ней участники рассказывали об опыте использования в различных областях.
                                                        0
                                                        к сожалению не вижу специфичных задач ни для одного из перечисленных языков (ну кроме c++). наверное поэтому не могу привести конкретные примеры

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое