Открыть сервис

Smalltalk-80: The Language and its Implementation

Smalltalk-80 — это объектно-ориентированный язык программирования и среда разработки, выпущенные в 1980 году компанией Xerox PARC. Является второй стабильной версией языка Smalltalk (после Smalltalk-72 и Smalltalk-76) и считается эталонной реализацией, заложившей основы современного объектно-ориентированного программирования. Книга «Smalltalk-80: The Language and its Implementation» (авторы — Адель Голдберг, Дэвид Робсон и др.) стала официальной спецификацией языка и описанием его виртуальной машины, оказав значительное влияние на развитие языков Java, C++, Objective-C и Python.

История

Предпосылки создания

В 1970-х годах в исследовательском центре Xerox PARC (Palo Alto Research Center) под руководством Алана Кея разрабатывалась концепция «персонального компьютера для всех возрастов». В рамках проекта Dynabook были созданы первые версии языка Smalltalk (Smalltalk-72, Smalltalk-76), которые уже использовали идеи объектов, сообщений и динамической типизации. Однако к концу 1970-х годов стало очевидно, что язык нуждается в стандартизации и документировании для распространения за пределами лаборатории.

Разработка и выпуск

В 1979 году группа инженеров Xerox PARC (Адель Голдберг, Дэвид Робсон, Дэн Ингаллс, Тед Кэлер и др.) начала работу над третьей версией языка, получившей название Smalltalk-80. Основные цели:

  • Упрощение синтаксиса по сравнению с Smalltalk-76.
  • Создание переносимой виртуальной машины (VM), написанной на подмножестве Smalltalk.
  • Разработка полной среды разработки (IDE), включающей редактор кода, отладчик, браузер классов и инспектор объектов.

В 1980 году вышла одноимённая книга «Smalltalk-80: The Language and its Implementation», которая содержала:

  • Полное описание синтаксиса и семантики языка.
  • Исходный код виртуальной машины на языке Smalltalk.
  • Спецификацию байт-кода и системы объектной памяти.

Влияние на индустрию

Хотя Smalltalk-80 не получил массового коммерческого распространения (из-за высокой стоимости лицензий Xerox и требований к аппаратному обеспечению), его идеи были заимствованы:

Архитектура виртуальной машины

Основные компоненты

Виртуальная машина Smalltalk-80 (VM) состоит из трёх ключевых частей:

  1. Интерпретатор байт-кода — выполняет инструкции, сгенерированные компилятором.
  2. Менеджер памяти — реализует автоматическое управление памятью (сборку мусора) на основе поколенческой модели.
  3. Объектная память (Object Memory) — хранит все объекты, классы и методы в виде графа объектов.

Формат объекта

Каждый объект в Smalltalk-80 имеет заголовок (header) из 32 бит, содержащий:

  • Указатель на класс (8 бит) — идентификатор класса объекта.
  • Флаги (4 бита) — для сборки мусора и блокировки.
  • Размер (20 бит) — количество полей (слотов) объекта.

Байт-код

Smalltalk-80 использует 256 байт-кодов (из которых 128 зарезервированы для часто используемых инструкций). Ключевые категории:

  • Отправка сообщений (send, super send) — 32 кода.
  • Управление стеком (push, pop, dup) — 16 кодов.
  • Арифметика (add, sub, mul, div) — 8 кодов.
  • Управление потоком (jump, jump if true/false) — 8 кодов.

Синтаксис и семантика

Основные конструкции

Smalltalk-80 использует минималистичный синтаксис, основанный на трёх типах сообщений:

  • Унарные — без аргументов: object message.
  • Бинарные — с одним аргументом: object + argument.
  • Ключевые — с несколькими аргументами: object at: index put: value.

Пример кода: ``smalltalk "Создание списка чисел" numbers := OrderedCollection new. numbers add: 1; add: 2; add: 3. "Вычисление суммы" sum := numbers inject: 0 into: [:acc :each | acc + each]. ``

Классы и метаклассы

В Smalltalk-80 каждый класс является объектом класса Metaclass. Иерархия:

  • Классы — описывают структуру и поведение экземпляров.
  • Метаклассы — описывают поведение самих классов (например, методы создания экземпляров).
  • Класс Object — корневой класс всей иерархии.

Динамическая типизация

Все переменные в Smalltalk-80 являются ссылками на объекты. Тип проверяется только во время выполнения при отправке сообщения. Это позволяет реализовывать полиморфизм без наследования (так называемая «утиная типизация»).

Среда разработки

Инструменты

Smalltalk-80 включает в себя интегрированную среду разработки (IDE), которая работает в реальном времени:

  1. Браузер классов — просмотр и редактирование иерархии классов.
  2. Редактор кода — написание методов с подсветкой синтаксиса.
  3. Отладчик — пошаговое выполнение с просмотром стека вызовов.
  4. Инспектор объектов — просмотр и изменение состояния объектов.
  5. Системный браузер — управление пакетами и версиями.

Живая система

Smalltalk-80 является «живой» системой (live system): весь код хранится в образе (image) — файле, содержащем все объекты в сериализованном виде. Разработчик может изменять код во время выполнения, не перезапуская среду. Это свойство было унаследовано от Lisp и стало основой для современных сред (например, Pharo, Squeak).

Применение

Образовательные цели

Smalltalk-80 активно использовался в 1980-х годах для обучения объектно-ориентированному программированию в университетах (Стэнфорд, MIT, Калифорнийский университет в Беркли). Книга «Smalltalk-80: The Language and its Implementation» служила учебным пособием.

Прототипирование

Благодаря быстрой среде разработки, Smalltalk-80 применялся для создания прототипов графических интерфейсов, игр и систем управления. Например, компания Apple использовала Smalltalk-80 для прототипирования интерфейса Lisa.

Научные исследования

Smalltalk-80 стал платформой для исследований в области:

Критика

Производительность

Интерпретатор байт-кода Smalltalk-80 работал медленнее, чем компилируемые языки (C, Pascal). Это ограничивало применение в системах реального времени. Позднее были разработаны JIT-компиляторы (например, в системе VisualWorks), но они не устранили проблему полностью.

Сложность переносимости

Виртуальная машина Smalltalk-80 была написана на подмножестве Smalltalk, что требовало написания «загрузчика» (bootstrap) на ассемблере для каждой новой платформы. Это замедлило распространение языка на не-Xerox компьютеры.

Отсутствие статической типизации

Динамическая типизация приводила к ошибкам времени выполнения, которые в статически типизированных языках (Java, C++) обнаруживались на этапе компиляции. Это критиковалось сторонниками строгой типизации.

Наследие

Современные реализации

  • Squeak (1996) — открытая реализация Smalltalk-80, написанная на самом себе.
  • Pharo (2008) — форк Squeak, ориентированный на промышленное использование.
  • VisualWorks (1990) — коммерческая реализация от Cincom Systems.

Влияние на языки

  • Java — виртуальная машина, сборка мусора, байт-код.
  • C# — свойства, события, LINQ (частично).
  • Ruby — блоки кода, итераторы, динамическая типизация.
  • Python — интерактивная среда, динамическая типизация.

Интересные факты

  • Книга «Smalltalk-80: The Language and its Implementation» была издана в 1983 году издательством Addison-Wesley и до сих пор считается одним из наиболее полных описаний объектно-ориентированной системы.
  • В 1981 году журнал Byte посвятил Smalltalk-80 целый номер, что способствовало популяризации языка.
  • Smalltalk-80 стал первой системой, в которой использовалась концепция «рефакторинга» (перестройка кода без изменения поведения).

Источники

  • Goldberg, A., Robson, D. «Smalltalk-80: The Language and its Implementation». Addison-Wesley, 1983.
  • Kay, A. «The Early History of Smalltalk». ACM SIGPLAN Notices, 1993.
  • Ingalls, D. «The Smalltalk-80 System». Byte Magazine, 1981.
  • «Smalltalk-80: The Interactive Programming Environment». Xerox PARC Technical Report, 1980.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →