Возможности Smalltalk во время выполнения отсутствуют на Objective-C? - PullRequest
5 голосов
/ 22 сентября 2011

Я не очень хорошо знаю Smalltalk, но я знаю какой-то Objective-C.И мне очень интересен Smalltalk.

Их синтаксис сильно отличается, но основные структуры времени выполнения (то есть функции) очень похожи.А функции времени выполнения поддерживаются средой выполнения.

Я думал, что два языка очень похожи в этом смысле, но на Smalltalk есть много функций, которые отсутствуют в Objective-C.Например, thisContext, который управляет стеком вызовов.Или non-local return, который раскручивает выполнение блока.block с.Это было только на Smalltalk, во всяком случае, теперь оно реализовано и в Objective-C.

Поскольку я не специалист по Smalltalk, я не знаю такого рода функций.Специально для продвинутых пользователей.Какие функции доступны только в Smalltalk?По сути, я хочу знать о расширенных возможностях Smalltalk.Так что все в порядке, функции, уже реализованные в Objective-C, такие как block.

Ответы [ 3 ]

7 голосов
/ 22 сентября 2011

Несмотря на то, что я достаточно опытен в 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 вы, как правило, пишете код в среде, где код сразу же становится активным, когда он синтаксически звучит. Границы между отладчиком, редактором, средой выполнения и программой размыты.

1 голос
/ 22 сентября 2011

Не языковая особенность, но поведение большинства платформ Objective-C с нулевым потреблением дает совершенно иной опыт разработки, чем всплывающее окно-отладчик, исправление и продолжение smalltalk.

Несмотря на то, что Objective-C теперь поддерживает блоки, крайне уродливый синтаксис вряд ли приведет к большому использованию. В Smalltalk используются блоки.

0 голосов
/ 22 сентября 2011

Objective-C 2.0 поддерживает блоки .

Он также имеет нелокальные возвраты в форме из return, но, возможно, вы имели в виду особенно нелокальные возвраты внутри блоков, передаваемых в качестве параметров другим функциям.

Насколько я знаю,

thisContext не поддерживается повсеместно. Конечно, есть Smalltalks, которые не разрешают использовать продолжения, например. В любом случае, это что-то, предоставленное виртуальной машиной, поэтому я могу представить себе среду выполнения Objective-C, предоставляющую такую ​​возможность.

Единственное, чего нет у Objective-C, это become: (который атомарно меняет два указателя на объект). Опять же, это то, что предоставляется виртуальной машиной.

В противном случае я должен был бы сказать, что, как указывает bbum, основное отличие, вероятно, заключается в (а) инструментах / среде и, следовательно, (б) быстрой обратной связи, которую вы получаете из среды, подобной REPL. Это действительно сильно отличается, работая в среде Smalltalk и, скажем, в Xcode. (Я сделал оба.)

...