Smalltalk – это объектно-ориентированный язык программирования, созданный в 70-х годах. Он широко используется для разработки приложений, графических пользовательских интерфейсов, веб-серверов и других программных продуктов. Smalltalk обладает простым синтаксисом, динамической типизацией и мощной системой объектов. Язык Smalltalk также известен своими инновационными идеями, такими как “поддержка живого программирования” и концепция “все является объектом”.
Smalltalk был создан группой исследователей, возглавляемой Аланом Кэем, в исследовательском центре Xerox PARC. Первая реализация, известная как Smalltalk-71, была создана за несколько месяцев как результат спора о том, что язык программирования, основанный на идее посылки сообщений, подсказанной Симулой, должен реализовываться на «странице кода». Более поздняя версия, действительно использованная для исследовательской работы, известна сейчас как Smalltalk-72. Его синтаксис и модель исполнения сильно отличались от современного Smalltalk, настолько, что его надо рассматривать как другой язык.
После существенных переработок, которые зафиксировали несколько сторон семантики выполнения для увеличения эффективности, была создана версия, известная как Smalltalk-76. В этой версии добавились наследование, синтаксис, более близкий к Smalltalk-80, и среда разработки, включающая большинство инструментов, знакомых современным Smalltalk-разработчикам.
В Smalltalk-80 были добавлены метаклассы, что делало фразу «всё — объекты» истинной путём связывания с индивидуальными классами свойств и поведения. Smalltalk-80 был первой версией, доступной за пределами PARC — сначала как Smalltalk-80 Version 1, розданный небольшому количеству компаний и университетов для «экспертной оценки». Позже, в 1983 году, были выпущены общедоступная реализация, известная как Smalltalk-80 Version 2 — в виде образа (независимый от платформы файл, содержащий объекты) и спецификации виртуальной машины.
Представляет собой интегрированную среду разработки и исполнения, объекты которой доступны для модификации через саму неё, и программирование в которой в итоге сводится к модификации её собственного поведения.
Основными идеями Smalltalk являются:
- Всё — объекты, и всё их взаимодействие — через посылку сообщений. Строки, целые числа, логические значения, определения классов, блоки кода, стеки, память, составляющие самой интегрированной среды разработки и исполнения — всё представляется в виде объектов. У объектов есть методы и состояние. Любому объекту может быть послано любое сообщение. При отправке сообщения среда исполнения всегда ищет у объекта-получателя подходящий метод и выполняет его, а если не находит — выполняет у объекта-получателя специальный метод для неопознанных сообщений. Объект-получатель сам определяет, является ли полученное сообщение правильным, и что надо сделать, чтобы его обработать.
- Всё доступно для изменения. Если вы хотите изменить саму интегрированную среду разработки и исполнения, вы можете сделать это в работающей системе, без остановки, перекомпиляции и перезапуска. Если вам необходима в языке новая управляющая конструкция языка, вы можете добавить её. В некоторых реализациях вы можете также изменить синтаксис языка или способ работы сборщика мусора.
- Динамическая типизация — это означает, что вы не указываете типы переменных в программе, что делает язык гораздо лаконичней (как объяснено выше, является ли операция правильной, определяет объект-получатель, а не компилятор).
Smalltalk также использует другие современные идеи:
- Сборка мусора встроена в язык и абсолютно незаметна разработчику.
- Dynamic translation: современные коммерческие виртуальные машины компилируют байткоды в машинные коды для быстрого выполнения.
- Выполнение кода в виртуальной машине. Программы Smalltalk обычно компилируются в байткоды и выполняются виртуальной машиной, что позволяет выполнять их на любом оборудовании, для которого существует виртуальная машина, примерно так же как в Java или .NET Framework.
Одной из особенностей Smalltalk является то, что даже такие вполне традиционные конструкции, как if-then-else, for, while, и т. д. не являются частью языка. Все они реализованы исключительно с помощью объектов. Например, решение принимается с помощью посылки сообщения ifTrue: логическому объекту, и передаёт управление фрагменту текста, если логическое значение истинно.
Преимущества языка Smalltalk:
1. Простота и чистота кода. Smalltalk разработан таким образом, чтобы быть простым и прозрачным, что делает его легким для изучения и использования.
2. Объектно-ориентированная парадигма. Smalltalk был одним из первых языков, полностью основанных на объектно-ориентированном программировании, что позволяет создавать понятные и структурированные программы.
3. Интерактивная среда разработки. Smalltalk обладает мощной средой разработки, позволяющей быстро создавать, тестировать и отлаживать программы в реальном времени.
Недостатки языка Smalltalk:
1. Не очень широкое распространение. Smalltalk не так популярен, как, например, Java или Python, что может затруднить поиск совместимых библиотек и поддержку со стороны сообщества.
2. Низкая производительность. Интерпретируемые языки, такие как Smalltalk, могут иметь худшую производительность по сравнению с компилируемыми языками, такими как C++ или Java.
3. Кроме того, Smalltalk может быть не самым эффективным выбором для проектов, требующих большого объема вычислений или работы с памятью.