Язык программирования Smalltalk — это динамически типизированный объектно-ориентированный язык программирования, разработанный в Xerox PARC, в разработке принимали участие: Алан Кэй , Дэн Инголс, Тед Kaehler Адель Голдберг , и другие в 1970-х годах. Язык был выпущен как Smalltalk-80 и широко использовался начиная с этого времени. .
Несмотря на свою 20-летнюю историю, широко распространено мнение, что опыт программирования и производительности языка программирования Smalltalk по-прежнему является непревзойденным другими средами разработки и языками. Программирование для чайников Smalltalk до сих пор продолжает активное развитие, и собрал вокруг себя лояльное сообщество пользователей.
Язык программирования Smalltalk оказал большое влияние на развитие многих других языков программирования, в том числе: Objective-C , Actor, Java и Ruby . Многие разработки и идеи 1990-х годов пришли из Смаллтолк сообщества, таких как шаблоны проектирования (применительно к ПО), экстремальное программирование и рефакторинг кода. Программирование для начинающих. Среди последователей языка программирования Смаллтолк можно выделить самого знаменитого — Ward Cunningham , изобретателя ВикиВики концепции (основы Википедии).
Для основ программирования вот самые грандиозные идеи, пришедшие из языка программирования Смаллтолк:
- «Все это объект «. Строки, целые числа, логические значения, определения классов, блоки кода, кадры стека, памяти все это представлено в виде объектов.
- Все доступно для модификации. Если вы хотите изменить IDE, вы можете сделать это — в работающей системе, без остановки перекомпилировать и перезапустить. Если вы хотите построить новый элемент управления в языке, вы можете добавить его. В некоторых реализациях, вы можете изменить даже синтаксис языка, или способ очистки мусора.
- Типы являются динамическими — это означает, что вы не должны определять типы данных в коде, что делает язык гораздо более кратким. Очистка мусора является встроенной и невидима для разработчика.
- Smalltalk программы, как правило, переводятся в байт-код, которым управляет виртуальная машина. Динамическая трансляция: современные коммерческие виртуальные машины перекомпилируют байт-код в машинный код для быстрого выполнения, а ведь эта методика впервые была применена на Smalltalk-80 с использованием ParcPlace системы в середине 1980-х годов. Эта идея была взята на вооружение Java десять лет спустя и названа «Компиляция на лету» (Just-in-time compilation), или JIT.
В следующем примере кода для нахождения гласных в строке демонстрируется стиль Smalltalk’s. ( «|» символ объявляет переменные, «:» объявляет параметры, а «[ ]» и «{}» являются скобками на данный момент):
| aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel].
В последней строке кода, переменная типа строка отправляется на блок выбора: где в качестве аргумента выступает блок кода. Вот код суперкласса Collection, который производит обработку этих данных делает:
| newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollection
Этот суперкласс реагирует на сообщение, перебирая каждый член (что определяется в строке do: method) и оценивая каждый раз кусок кода aBlock, который передан в качестве параметра в переменную aBlock в виде (aCharacter isVowel), при оценке создает булевскую (Boolean) переменную, которая затемпередается в блок обработки ifTrue: . Если булево значение «правда», символ добавляется в строку, которая должна быть возвращена. Так как блок выбора определен в классе абстрактных коллекций, мы можем также использовать с помощью другого кода:
| rectangles aPoint| rectangles := OrderedCollection with: (Rectangle left: 0 right: 10 top: 100 bottom: 200) with: (Rectangle left: 10 right: 10 top: 110 bottom: 210). aPoint := Point x: 20 y: 20. collisions := rectangles select: [:aRect | aRect containsPoint: aPoint].