Здравствуйте, Mamut, Вы писали:
Возвращаясь к отправной точке — какие возможности мы потеряли, перейдя с Lisp/Smalltalk на всякие VB/Delphi/C++? а потом на всякие Java/C# и т.д., и какие возможности теперь заново изобретают (в худших формах) в этих новых "язвках"?
Что потеряли:
— возможности метапрограммирования (используя тот же язык и ту же парадигму программирования)
— простоту языков, "отсутствие" синтаксиса (сравните количество ключевых слов в Smalltalk и Java/C#/C++)
— стройность концепции языка (чистый ООП в Smalltalk)
— динамическую типизацию и Block Closure (на мой взгляд это очень важно)
Все эти взаимосвязанные между собой пункты позволяют значительно легче "объяснять свою идеи компьютеру" на более абстрактном уровне, а не в терминах Byte & Integer. Так "отсутствие" синтаксиса позволяет при необходимости написать и использовать свой DSL.
Что "изобретают":
— generics / препроцессоры
— кодогенерация
— DSL с использованием XML
— новые ключевые слова в языках
— делегаты
Наверное, много чего еще можно добавить...
P.S. И почему Smalltalk считается экзотическим языком? Тот же ООП только в более ярко выраженной форме. Поменьше точек и скобок, плюс вызов метода немного иначе выглядит, а так все принципы те же что и в Java/C#
Java:
foo.findText(text, bigText);
for (int i=0; i<10; i++) {
foo.go(i)
}
Smalltalk:
foo findText: text in: bigText.
0 to: 9 do: [:i | foo go: i].