Перейти к основному содержимому

Первая программа на 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 — готовый пакет.

  1. Перейдите на официальный сайт: https://pharo.org

Кстати, ссылка может быть недоступна в некоторых странах, так что главное - достаньте клиент.

  1. Нажмите "Download" → "Pharo Launcher" for Windows.

image.png

image-1.png

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

Шаг 2. Запуск.​

После того, как запустите лаунчер, вы увидите список доступных версий. В нём нужно будет сначала нажать на "New" (1) а затем выбрать из списка стабильную версию. В моём случае это 13.

image-2.png

После выбора версии автоматически установится Image name, но можете и указать своё. Назовём его Test и нажмём Create Image. После этого начнётся скачивание образа с серверов. И потом запустится окно Pharo.

Это не IDE, это вся система целиком - с кодом, объектами, интерфейсом. Будет непривычно, возможно и запутаться, но смысл такой - вас приветствует мастер, который подскажет вам некоторые моменты и предложит выбрать тему оформления. Я выбрал тёмную. Затем вы просто закройте окно - учтите, что всё что происходит - будет внутри окна - это и есть виртуальная машина.

Для начала освойтесь — просмотрите вкладки, панели и инструменты. Нам понадобится Browse (браузер классов) и Playground. Названия пунктов меню могут слегка отличаться между версиями Pharo.


Шаг 3. Работа с объектами.​

image-3.png

Начнём с самого начала. Выберите вкладку Browse и откройте Система Browser.

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

Начнём с создания класса.

image-4.png

Нажмите правой кнопкой мыши на левой панели, например в моём случае я нажал ПКМ на пакете _UnpackagedPackage из списка.

Затем нажмите New package, для добавления нового пакета. Так мы создадим пакет. Давайте назовём его MyApp.

image-5.png

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

image-6.png

Откроется редактор.

В нём определяется класс (Class definition).

Как видите - это объект MyClass, который имеет определенный набор свойств.

Можете сразу нажать Ctrl+S или OK.

image-7.png

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

image-8.png image-9.png image-10.png

Тело метода пишется в нижней части окна - там и находится редактор кода.

Попробуйте добавить туда следующий код для нашего нового метода:

getMessage
^ 'Hello, World!'

И нажмите Ctrl+S, чтобы сохранить.

И всё, метод сразу доступен. Никакой пересборки.

image-11.png

Затем перейдите в Browse - Playground - и напишите:

(MyClass new getMessage)

После этого нажмите "Do it all" или Ctrl+P и увидите "Hello, World!".

image-12.png

Необычно и просто. В промышленной разработке Smalltalk встречается редко, но вы увидели, как устроены живая среда, классы и сообщения — это полезно и для Java, C#, Python, Ruby. Создание класса и метода здесь занимает минуты; в крупных системах добавляются пакеты, тесты, экспорт в Git (Tonel) и дисциплина протоколов методов.

На вкладках Playground вы можете посмотреть, из чего состоит такая простая команда вывода Hello World - в Items вы увидите значения $H, $e, $l, $l, $o, $, Character space, $W, $o, $r, $l, $d, $! - можно открыть любой элемент и изучить его, увидев его особенности:

image-13.png

Но если будете копаться, кроме удовлетворения собственного интереса, особо вам это ничего не даст. Пойдёмте дальше.


Частые ошибки​

СимптомПричина
Окно Pharo не открываетсяНе хватает RAM для image — закройте лишние приложения
Syntax error в PlaygroundВ Smalltalk выражение без . в конце
Изменения пропалиНе сохранили image — Save в меню

Что попробовать​

  1. Создайте класс Greeter с методом sayHi через Class browser.
  2. Transcript show: 'test'; cr — вывод в лог-сессию.
  3. Сравните с Ruby — тоже "всё объект".

Частые ошибки​

СимптомПричина
Окно Pharo не открываетсяНе хватает RAM для image — закройте лишние приложения
Syntax error в PlaygroundВ Smalltalk выражение без . в конце
Изменения пропалиНе сохранили image — Save в меню

Что попробовать​

  1. Создайте класс Greeter с методом sayHi через Class browser.
  2. Transcript show: 'test'; cr — вывод в лог-сессию.
  3. Сравните с Ruby — тоже "всё объект".

В подборках​

Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:

Первые шаги (маршрут подборки) — Первая программа на Lua, Первая программа на Groovy, Первая программа на Swift, Первая программа на Haskell, Первая программа на Rust, Первая программа на Scala.