ФЭНДОМ


Влияние Smalltalk можно обнаружить почти во всех языках, созданных на протяжении 1980-х. Со второй половины 1990-х оно несколько слабеет, поскольку к тому моменту выросло целое поколение людей, считающих объектно-ориентированным языком C++.

Прямые потомки Smalltalk Править

Прямыми потомками Smalltalk предлагается считать только языки, сохранившие следующие его свойства: всё без исключения является объектом; объекты живут в виртуальном образе. Семейство прямых потомков Smalltalk невелико:

Языки, испытавшие влияние Smalltalk и/или Self Править

  • Io
  • Ruby
  • Objective C (по крайней мере, существует такое мнение)
  • Objective Modula-2 (если верить Wikipedia)
  • Python (в несколько меньшей степени)
  • Dylan
  • F-Script (???)
  • AppleScript (???)
  • NewtonScript (???)
  • JavaScript (???)
  • Bistro гибрид? Java + Smalltalk!
  • Newspeak -- новая разработка, которую ведут в недрах Cadence. В настоящее время в Cadence работают три человека, известных в мире Smalltalk: Gilad Bracha, Vasili Bykov, Eliot Miranda. Наши аналитики продолжают анализ данных...

Smalltalk и Objective-C Править

Можно ли считать Objective-C "языком, испытавшим влияние Smalltalk", если в нем объектно-ориентированная модель Smalltalk почти полностью (кроме блоков и сборщика мусора) интегрирована в Си?

Примеры:

1. отправление сообщения (obj - получатель, он же - экземпляр класса (объект или класс, классы - стандартные объекты), message - сообщение (селектор); если param и label непонятны, спрашивайте; "//" - с этого места и до конца строки комментарий (комментарий в стиле BCPL, распространен в "{"-языках, вроде Си, Си++, Java)

[obj message]; //селектор сообщения "message" [obj message:param1]; //селектор сообщения "message:" [obj message:param1 label2:param2]; //селектор сообщения "message:label2"

влияние Си на Смолтолк в Obj-C:

[obj message:param1 ...]; //сообщение с переменным списком параметров (см. vararg в C)

2. интеграция модели (обозначения прежние)

id obj2 = [obj1 message]; //сообщение возвращает результат, если в его декларации не указано обратное. По умолчанию, возвращаемое значение - self (то же самое, что self в Смолтолк), тип данных id (любой объект, динамическая типизация). Объект принадлежит к некоторому классу, имя этого класса можно использовать для статической типизации. Классы - объекты класса Class, определенного в среде времени исполнения (рантайме).

Class* xx = [obj1 message]; //отправка сообщения объекту типа "класс"

[[obj1 message1 message2:[obj2 message3]]; //получатель - результат [obj1 message1, параметр селектора - результат [obj2 message3]