Первая программа на Smalltalk
Play ITЗагрузка интерактивного демо…
Первая программа на Smalltalk
Где применяют Smalltalk
Smalltalk — один из родоначальников ООП и GUI — всё — объекты, сообщения вместо вызовов функций, среда image (Pharo, Squeak). Учит мыслить объектами и live coding; влиял на Java, Ruby, Objective-C.
Первая программа — workspace, Transcript show: 'Hello'.
Давайте "пощупаем" язык. Установим всё нужное и напишем первую программку на этом языке.
Классический Hello World в одну строку
В Playground достаточно выражения (нужно открытое окно Transcript):
Transcript show: 'Hello, world!'
Здесь видны две стороны Smalltalk — посылка сообщения (show: с аргументом-строкой объекту Transcript) и синтаксис без скобок — получатель, пробел, селектор и аргумент, без точки после получателя. Ниже — тот же вывод через класс и метод в браузере.
Шаг 1 — Установка Pharo на Windows
Установка программ обычно выглядит так (у Pharo Launcher — похожий мастер, хотя ставится образ VM, а не "компилятор"):
Play ITЗагрузка интерактивного демо…
Smalltalk не устанавливается как обычный язык. У нас не будет gcc или dotnet. Вместо этого — образ системы (image) и виртуальная машина (VM). Нам нужен Pharo Launcher — удобный менеджер образов или просто Pharo Desktop — готовый пакет.
- Перейдите на официальный сайт: https://pharo.org
Кстати, ссылка может быть недоступна в некоторых странах, так что главное - достаньте клиент.
- Нажмите "Download" → "Pharo Launcher" for Windows.


- Скачайте Pharo-Launcher-Win64.msi (установщик). Если работаете на другой ОС, выберите подходящий вариант, запустите установщик и следуйте инструкциям. Установка там стандартная. После установки появится ярлык Pharo Launcher на рабочем столе. Потом нужно запустить программу.
Шаг 2. Запуск.
После того, как запустите лаунчер, вы увидите список доступных версий. В нём нужно будет сначала нажать на "New" (1) а затем выбрать из списка стабильную версию. В моём случае это 13.

После выбора версии автоматически установится Image name, но можете и указать своё. Назовём его Test и нажмём Create Image. После этого начнётся скачивание образа с серверов. И потом запустится окно Pharo.
Это не IDE, это вся система целиком - с кодом, объектами, интерфейсом. Будет непривычно, возможно и запутаться, но смысл такой - вас приветствует мастер, который подскажет вам некоторые моменты и предложит выбрать тему оформления. Я выбрал тёмную. Затем вы просто закройте окно - учтите, что всё что происходит - будет внутри окна - это и есть виртуальная машина.
Для начала освойтесь — просмотрите вкладки, панели и инструменты. Нам понадобится Browse (браузер классов) и Playground. Названия пунктов меню могут слегка отличаться между версиями Pharo.
Шаг 3. Работа с объектами.

Начнём с самого начала. Выберите вкладку Browse и откройте Система Browser.
Перед вами откроется целый набор пакетов, среди которого можно запутаться. Но пока не торопитесь.
Начнём с создания класса.

Нажмите правой кнопкой мыши на левой панели, например в моём случае я нажал ПКМ на пакете _UnpackagedPackage из списка.
Затем нажмите New package, для добавления нового пакета. Так мы создадим пакет. Давайте назовём его MyApp.

Затем выберите созданный пакет MyApp в списке, и в соседней панели нажмите "New class", добавив новый класс в пакете.

Откроется редактор.
В нём определяется класс (Class definition).
Как видите - это объект MyClass, который имеет определенный набор свойств.
Можете сразу нажать Ctrl+S или OK.

После создания класса можно его изучить. Сбоку будет иерархия. Нам нужно выбрать MyClass и нажать "New protocol", после чего выбрать "accessing".

Тело метода пишется в нижней части окна - там и находится редактор кода.
Попробуйте добавить туда следующий код для нашего нового метода:
getMessage
^ 'Hello, World!'
И нажмите Ctrl+S, чтобы сохранить.
И всё, метод сразу доступен. Никакой пересборки.

Затем перейдите в Browse - Playground - и напишите:
(MyClass new getMessage)
После этого нажмите "Do it all" или Ctrl+P и увидите "Hello, World!".

Необычно и просто. В промышленной разработке Smalltalk встречается редко, но вы увидели, как устроены живая среда, классы и сообщения — это полезно и для Java, C#, Python, Ruby. Создание класса и метода здесь занимает минуты; в крупных системах добавляются пакеты, тесты, экспорт в Git (Tonel) и дисциплина протоколов методов.
На вкладках Playground вы можете посмотреть, из чего состоит такая простая команда вывода Hello World - в Items вы увидите значения $H, $e, $l, $l, $o, $, Character space, $W, $o, $r, $l, $d, $! - можно открыть любой элемент и изучить его, увидев его особенности:

Но если будете копаться, кроме удовлетворения собственного интереса, особо вам это ничего не даст. Пойдёмте дальше.
Частые ошибки
| Симптом | Причина |
|---|---|
| Окно Pharo не открывается | Не хватает RAM для image — закройте лишние приложения |
Syntax error в Playground | В Smalltalk выражение без . в конце |
| Изменения пропали | Не сохранили image — Save в меню |
Что попробовать
- Создайте класс
Greeterс методомsayHiчерез Class browser. Transcript show: 'test'; cr— вывод в лог-сессию.- Сравните с Ruby — тоже "всё объект".
Частые ошибки
| Симптом | Причина |
|---|---|
| Окно Pharo не открывается | Не хватает RAM для image — закройте лишние приложения |
Syntax error в Playground | В Smalltalk выражение без . в конце |
| Изменения пропали | Не сохранили image — Save в меню |
Что попробовать
- Создайте класс
Greeterс методомsayHiчерез Class browser. Transcript show: 'test'; cr— вывод в лог-сессию.- Сравните с Ruby — тоже "всё объект".
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Первые шаги (маршрут подборки) — Первая программа на Lua, Первая программа на Groovy, Первая программа на Swift, Первая программа на Haskell, Первая программа на Rust, Первая программа на Scala.