Smalltalk — итоги
Кратко — что стоит унести из раздела "Smalltalk". Если пункт кажется туманным — откройте указанную главу или оглавление.
FAQ — Часто задаваемые вопросы
Типичные сбои и ситуации, с которыми сталкиваются новички в среде Smalltalk. Здесь — что делать и где копать в главах; определения для зачёта — в чек-листе.
Вопрос. Pharo не запускается после сбоя или "зависания" — образ повреждён?
Ответ. Сначала откройте последний .changes + .image из резервной копии; Pharo часто оставляет autosave. Если образ не грузится — скачайте чистый Pharo и подтяните код через FileIn/Metacello. Подробнее здесь — первая программа, о языке.
Вопрос. Написал метод в Browser, Playground его "не видит" — MessageNotUnderstood.
Ответ. Код не принят в систему — нужно нажать Accept (Ctrl+S / Cmd+S) в Browser или Playground. Без accept изменения живут только в буфере редактора. Подробнее здесь — оглавление, ООП.
Вопрос. В Smalltalk "нет синтаксиса" — откуда вообще учиться, если всё сообщениями?
Ответ. Синтаксис минимален (литералы, [ ] для блоков, три вида сообщений), но правила приоритета неочевидны. Начните с синтаксиса и философии, печатайте выражения в Playground. Подробнее здесь — первая программа.
Вопрос. Где main()? Как "запустить программу" как .exe?
Ответ. Точка входа — живой образ (image), который уже запущен VM. Вы выполняете выражения и сохраняете image, а не собираете бинарник как в C. Подробнее здесь — о языке, оглавление.
Вопрос. Как сохранить работу — Ctrl+S в Notepad не помогает.
Ответ. В Pharo: Save image из меню (или accept в Browser для отдельных методов). Закрытие окна без save image теряет несохранённое состояние с последнего save. Подробнее здесь — о языке, первая программа.
Вопрос. Ошибка MessageNotUnderstood: #myMethod — объект "не знает" метод.
Ответ. Опечатка в селекторе, метод в другом классе, или сообщение отправлено не тому объекту (nil, число вместо коллекции). Откройте debugger и посмотрите стек. Подробнее здесь — синтаксис, ООП.
Вопрос. Subclass: #Foo падает — " superclass does not understand …".
Ответ. Имя суперкласса с опечаткой или класс ещё не определён/не загружен. Сначала определите родителя или используйте существующий (Object, Model). Подробнее здесь — ООП, справочник.
Вопрос. Пишу if (x > 0) { ... } — синтаксическая ошибка.
Ответ. Условия — сообщения булевым объектам: (x > 0) ifTrue: [ ... ] ifFalse: [ ... ]. Скобки вокруг сравнения обязательны из-за приоритета. Подробнее здесь — синтаксис, типы.
Вопрос. Playground vs Method Browser — когда что открывать?
Ответ. Playground — короткие эксперименты и выражения; Browser — определение классов и методов, которые останутся в системе. Для учебных классов — Browser + accept. Подробнее здесь — первая программа, ООП.
Вопрос. Metacello: Load пакета падает с dependency error.
Ответ. Несовместимая версия Pharo, нет доступа к сети или устаревший repo в baseline. Обновите Pharo до рекомендуемой версии пакета, проверьте URL репозитория. Подробнее здесь — справочник, о языке.
Вопрос. Файл .image весит сотни мегабайт — это нормально?
Ответ. Да — image хранит всю систему целиком (классы, методы, объекты). Для деплоя используют trimmed image или headless-сборки; для учёбы — не пугайтесь размера. Подробнее здесь — о языке, философия.
Вопрос. Как "выложить на сервер" Smalltalk-приложение?
Ответ. Обычно деплоят образ + VM (Pharo deploy, GemStone) или экспортируют код (Monticello/FileOut) и грузят на сервере. Это другая модель, чем upload .php. Подробнее здесь — о языке, справочник.
Вопрос. Как отладить — поставить breakpoint как в IDE?
Ответ. В Pharo при ошибке открывается Debugger; можно также self halt в методе или "Debug it" в Playground. Инспектор показывает ivars объекта в момент остановки. Подробнее здесь — первая программа, справочник.
Вопрос. Скопировал код из PDF — "Unexpected token" и красные кавычки.
Ответ. "Умные" кавычки и длинное тире из PDF ломают строки. Перепишите '...' обычными апострофами в Playground. Подробнее здесь — синтаксис, типы.
Вопрос. Morphic и MVC — что выбирать для интерфейса?
Ответ. В Pharo по умолчанию Morphic — прямое построение UI из объектов; классический MVC — историческая модель Smalltalk-80. Новичку достаточно знать, что GUI тоже объекты. Подробнее здесь — философия, ООП.
Вопрос. Smalltalk "мертв" — зачем его учить для карьеры?
Ответ. В mass-market вакансий мало, но Smalltalk даёт фундамент ООП, IDE и TDD, понятный Ruby/Python/Objective-C. Полезен для архитектурного мышления и истории IT. Подробнее здесь — философия, о языке.
Вопрос. Squeak или Pharo — что ставить школьнику?
Ответ. Для курса энциклопедии — Pharo (актуальный Browser, документация). Squeak ближе к Scratch и Smalltalk-80. Подробнее здесь — оглавление, первая программа.
Вопрос. Scratch "похож" на Smalltalk — можно перейти без перелома мышления?
Ответ. Scratch — упрощённый потомок Squeak: блоки = сообщения, спрайты = объекты. Переход на текстовый Smalltalk проще, если уже понимали блоки. Подробнее здесь — философия, о языке.
Вопрос. 3 / 2 даёт 1 — где дробная часть?
Ответ. / для целых даёт целочисленное деление; для дроби используйте 3 / 2.0, 3 // 2 vs 3 quo: 2 или приведите к Fraction. Подробнее здесь — типы, синтаксис.
Вопрос. Блок [ :x | x + 1 ] видит старое значение переменной снаружи — баг?
Ответ. Блоки замыкают окружение; для цикла с накоплением объявите | sum | как временную переменную метода, не полагайтесь на глобаль без понимания. Подробнее здесь — синтаксис, типы.
Вопрос. Как поделиться кодом с одногруппником без git?
Ответ. FileOut категории/класса в .st файл или экспорт через Monticello. Одногруппник делает FileIn в свой образ. Git для Pharo тоже есть (Iceberg), но для учебы хватит fileout. Подробнее здесь — справочник, ООП.
Вопрос. Бесконечная рекурсия сообщений — окно зависло.
Ответ. Прервите процесс через меню Process Browser или закройте зависший debugger; ищите метод, который отправляет себе же сообщение без базового случая. Подробнее здесь — синтаксис, философия.
Вопрос. Не могу найти Class Browser — меню Pharo перегружено.
Ответ. Откройте Spotlight (Ctrl+O / Cmd+O), введите "Browser" или "Class"; альтернатива — клик правой кнопкой по классу в коде → browse class. Подробнее здесь — первая программа, оглавление.
Вопрос. SUnit-тест был зелёный, после рефакторинга красный — метод переименован.
Ответ. Тесты в образе тоже объекты — обновите селектор в тесте и accept. Smalltalk поощряет запускать тесты после каждого accept. Подробнее здесь — справочник, ООП.
Вопрос. FFI к C-библиотеке падает — "access violation".
Ответ. Неверные типы аргументов, освобождённый указатель или calling convention. Начните с минимального примера одной функции; для учебы FFI можно отложить. Подробнее здесь — о языке, справочник.
Вопрос. Долгий цикл в UI-процессе — моргает интерфейс.
Ответ. Тяжёлая работа блокирует UI-процесс — вынесите в фоновый Process/Task (в Pharo — fork/async паттерны) или разбейте на шаги с WorldState defer:. Подробнее здесь — философия, справочник.
Вопрос. #symbol vs 'string' — в чём разница на практике?
Ответ. Символ неизменяем и уникален — его используют как ключи словарей и селекторы; строка — для текста пользователя. Сравнение символов быстрее (==). Подробнее здесь — типы, синтаксис.
Вопрос. super не вызывает метод родителя — снова заходит в override.
Ответ. super — только для отправки родителю в том же методе; нельзя сохранить super в переменную. Проверьте, что селектор совпадает и super не в блоке с неочевидным self. Подробнее здесь — ООП, справочник.
Вопрос. Учебник на VisualWorks, у меня Pharo — половина меню не совпадает.
Ответ. Идеи те же (Browser, Debugger, сообщения), но имена инструментов и hotkeys отличаются. Ищите эквивалент через Spotter/Help в Pharo. Подробнее здесь — оглавление, о языке.
Вопрос. Что такое Smalltalk простыми словами?
Ответ. Язык, где всё — объекты, а программа общается с ними сообщениями; код и среда живут в одном "образе" (image). Родоначальник ООП и современных IDE. Подробнее здесь — о языке, философия.
Вопрос. Smalltalk скачать бесплатно — где взять Pharo?
Ответ. Официальный сайт pharo.org — установщик для Windows/macOS/Linux. После установки откройте Playground и первую программу раздела. Подробнее здесь — оглавление.
Вопрос. Smalltalk для начинающих — с чего начать изучение?
Ответ. Установить Pharo → Playground → синтаксис сообщений → класс в Browser → ООП. Маршрут в intro. Подробнее здесь — первая программа, чек-лист.
Вопрос. Чем Smalltalk отличается от Java?
Ответ. Java — файлы, компиляция, статическая типизация; Smalltalk — динамический образ, сообщения и изменение классов на лету. Java унаследовала идеи ООП от Smalltalk, но модель выполнения другая. Подробнее здесь — философия, Java — о разделе.
Вопрос. Smalltalk и объектно-ориентированное программирование — связь.
Ответ. Smalltalk-80 сформулировал ООП как объекты + сообщения + инкапсуляция; отсюда пошли термины "метод", "сообщение", MVC. Подробнее здесь — ООП в Smalltalk, ООП в разделе "Код".
Вопрос. Pharo или Squeak — что скачать?
Ответ. Pharo — для обучения и современной документации; Squeak — ближе к Scratch и Smalltalk-80. В курсе энциклопедии ориентир — Pharo. Подробнее здесь — оглавление, о языке.
Вопрос. Smalltalk мёртвый язык в 2025 году?
Ответ. В массовых вакансиях нишевый, но жив в Pharo, GemStone, наследии Scratch и как фундамент для понимания ООП. Активное open-source-сообщество. Подробнее здесь — философия, о языке.
Вопрос. Scratch и Smalltalk — в чём связь?
Ответ. Scratch вырос из Squeak/Smalltalk: спрайты — объекты, блоки — визуальные сообщения. Переход на текстовый Smalltalk проще после Scratch. Подробнее здесь — философия, о языке.
Вопрос. Hello World на Smalltalk — как написать?
Ответ. В Playground: 'Hello, World!' displayNl или Transcript show: 'Hello'. Нет функции main — выражение выполняется сразу. Подробнее здесь — первая программа, синтаксис.
Вопрос. Алан Кэй и Smalltalk — кто автор языка?
Ответ. Alan Kay, Dan Ingalls, Adele Goldberg и команда Xerox PARC в 1970-х; эталон — Smalltalk-80. Подробнее здесь — о языке, философия.
Вопрос. Smalltalk image — что это за файл?
Ответ. Снимок всей системы — классы, методы, объекты, часть UI. Запуск = загрузка image в VM; Save image = сохранение состояния. Подробнее здесь — о языке, первая программа.
Вопрос. Smalltalk или Python — что проще?
Ответ. Python проще для скриптов и вакансий; Smalltalk — необычная модель (сообщения, image), но мало синтаксиса. Smalltalk ценят за обучение мышлению, не за скорость трудоустройства. Подробнее здесь — философия, Python.
Вопрос. Как учить Smalltalk онлайн бесплатно?
Ответ. Pharo Mooc, документация pharo.org и раздел оглавление энциклопедии — первая программа, синтаксис, ООП, справочник. Подробнее здесь — первая программа, справочник.
Вопрос. MVC в Smalltalk — что это?
Ответ. Model–View–Controller впервые целостно реализовали в Smalltalk-80: модель данных, представление, контроллер ввода. Сейчас MVC везде в веб-фреймворках. Подробнее здесь — философия, ООП.
Вопрос. Сообщения вместо вызовов функций в Smalltalk.
Ответ. Пишут объект селектор аргумент — унарные, бинарные (+) и keyword (at:put:). Полиморфизм через поиск метода в классе объекта. Подробнее здесь — синтаксис, философия.
Вопрос. TDD и SUnit в Smalltalk — откуда пошли unit-тесты?
Ответ. SUnit придумали в Smalltalk; Kent Beck перенёс идеи в JUnit. В Pharo тесты — объекты, запуск из Test Runner. Подробнее здесь — справочник, ООП.
Вопрос. Вакансии Smalltalk разработчик — есть ли рынок?
Ответ. Ниша: финтех, GemStone, legacy-системы, исследования. Для карьеры чаще учат Java/C#; Smalltalk — за глубиной ООП и историей. Подробнее здесь — карьера в IT, о языке.
Вопрос. GemStone Smalltalk — что это?
Ответ. Коммерческая объектная СУБД + Smalltalk для высоконагруженных систем с персистентными объектами. Отдельная ветка от учебного Pharo. Подробнее здесь — о языке, философия.
Вопрос. Синтаксис Smalltalk примеры для новичка.
Ответ. 3 + 4, (1 to: 10) do: [:i | ...], 'abc' size, условие (x > 0) ifTrue: [...]. Подробнее здесь — синтаксис, типы.
Вопрос. Object oriented programming Smalltalk — почему "чистый" ООП?
Ответ. Нет примитивов вне объектов — даже 3 — экземпляр SmallInteger, арифметика — сообщения. Подробнее здесь — ООП, типы.
Вопрос. VisualWorks Smalltalk — что это?
Ответ. Коммерческая среда Cincom VisualWorks/VA Smalltalk для enterprise; идеи те же, что в Pharo, другой UI инструментов. Подробнее здесь — о языке, оглавление.
Вопрос. Рефлексия в Smalltalk — изменить класс на лету.
Ответ. Классы и методы — объекты; Browser добавляет методы в работающую систему после Accept. Подробнее здесь — ООП, справочник.
Вопрос. Morphic Pharo — интерфейс без XML.
Ответ. Morphic — UI из вложенных "морфов"-объектов, рисование и обработка событий сообщениями. Альтернатива классическому MVC в старых ST-80 UI. Подробнее здесь — философия, о языке.
Вопрос. Smalltalk виртуальная машина (VM) — зачем нужна?
Ответ. VM исполняет байткод образа, управляет памятью (GC) и платформой. Аналог JVM, но для объектного образа целиком. Подробнее здесь — о языке, первая программа.
Что запомнить
Smalltalk — это чисто объектно-ориентированный язык программирования, созданный в 1970-х годах в исследовательском центре Xerox PARC. Он стал одной из первых сред, где всё без исключения является объектом — числа, строки, классы, методы, даже сама среда разработки. Smalltalk не просто язык — это интегрированная среда выполнения и разработки, в которой код, данные и интерфейс существуют в едином живом пространстве.
Основные особенности Smalltalk:
- Всё — объект: нет примитивных типов в традиционном понимании; даже целое число — экземпляр класса;
- Сообщения вместо вызовов: взаимодействие между объектами происходит через отправку сообщений, а не прямые вызовы функций;
- Динамическая типизация и позднее связывание: тип объекта определяется во время выполнения, методы могут добавляться или изменяться на лету;
- Интерактивная среда: система работает как "живой" образ (image), который сохраняет всё состояние — от переменных до открытых окон;
- Минималистичное ядро: синтаксис состоит всего из нескольких правил, но выразительность достигается за счёт библиотек и метапрограммирования;
- Рефлексия первого класса: программа может анализировать и модифицировать себя во время выполнения.
Smalltalk оказал огромное влияние на развитие программирования:
- Ввёл концепции ООП, которые легли в основу Java, C++, Python, Ruby;
- Стал прообразом современных IDE (инспекторы, отладчики, браузеры классов);
- Вдохновил на создание MVC-архитектуры, используемой повсеместно в веб- и GUI-разработке;
- Продемонстрировал мощь интерактивной разработки и "живого" программирования.
Современные реализации Smalltalk:
- Pharo — активно развиваемая, открытая, ориентированная на образование и исследования;
- Squeak — основан на оригинальном Smalltalk-80, используется в образовательных проектах (например, Scratch);
- VisualWorks, VA Smalltalk — коммерческие версии для промышленного применения;
- GemStone/S — высокопроизводительная система с постоянным хранением объектов.
Три основных правила эффективной работы с Smalltalk:
- Мыслить в терминах объектов и сообщений, а не процедур и данных;
- Использовать среду как расширяемый инструмент — редактировать, отлаживать и тестировать прямо в образе;
- Писать маленькие, сфокусированные методы, следуя принципу "один метод — одно действие".
Три фундаментальных момента:
- Smalltalk — это философия программирования, основанная на простоте, единообразии и интерактивности;
- Его сила — в согласованности: один и тот же механизм (сообщения) управляет всем поведением системы;
- Изучение Smalltalk расширяет понимание того, что такое "программа" и как она может существовать в динамической среде.
Куда идти дальше
| Тема | Раздел |
|---|---|
| "PHP — о разделе" | "PHP — о разделе" |
| "Kotlin — о разделе" | "Kotlin — о разделе" |
| "C++ — о разделе" | "C++ — о разделе" |
| "Go — о разделе" | "Go — о разделе" |
Проверьте себя: Чек-лист самопроверки.