Несмотря на то, что я достаточно опытен в Objective-C, я не настолько глубоко разбираюсь в Smalltalk, как многие, но я сделал немного.
Было бы трудно действительно перечислить список того, какой язык имеет какие особенности по нескольким причинам.
Во-первых, что такое "языковая особенность" вообще? В Objective-C даже блоки действительно создаются в сочетании с API-интерфейсами Foundation, и такие вещи, как синтаксис for(... in ...)
, требуют соответствия протоколу относительно высокого уровня. Вы действительно можете больше говорить о языке, не принимая во внимание особенности наиболее важных API? То же самое касается Smalltalk.
Во-вторых, оба они очень похожи с точки зрения того, как работает обмен сообщениями и как реализовано наследование, но они также сильно отличаются в том, как код переходит от мысли в вашей голове к работе на вашей машине. Концептуально отличается тем, что делает сложным сравнение двух функций.
Ключевое различие между ними действительно сводится к фундаменту, на котором они построены. Objective-C построен поверх C и, таким образом, наследует все сильные и слабые стороны (скорость, мобильность, гибкость и т. Д.) И слабые стороны (по сути, макро-ассемблер, тупой вызов ABI, отсутствие какой-либо сети безопасности) C & скомпилированные в металл языки. В то время как Objective-C накапливает кучу функций OO относительно высокого уровня, как времени компиляции, так и времени исполнения, существуют ограничения из-за природы C.
Smalltalk, с другой стороны, использует гораздо более совершенную модель OO; все, вплоть до представления немного, является объектом. Даже стек вызовов, исключения, интерфейсы, ... все ... является объектом. И Smalltalk работает на виртуальной машине, которая, как правило, сама по себе является относительно небольшим собственным интерпретатором байтового кода, который использует поток байтового кода Smalltalk, который реализует функциональность более высокого уровня. В smalltalk речь идет не столько о создании автономного приложения, сколько о настройке виртуальной машины с набором состояний и функциональных возможностей, которые предоставляют необходимые вам функции (при этом эта конфигурация может быть эффективно скопирована и распределена как приложение).
Все это означает, что у вас всегда - вне заблокированных режимов - есть оболочка очень высокого уровня для взаимодействия с виртуальной машиной. Эта оболочка обычно также является вашей IDE. Вместо edit-compile-fix-compile-run вы, как правило, пишете код в среде, где код сразу же становится активным, когда он синтаксически звучит. Границы между отладчиком, редактором, средой выполнения и программой размыты.