Почему Objective-C использует квадратные скобки для сообщений?

Я читаю книгу о Smalltalk (Charmond Liu Smalltalk, объекты и дизайн). Он рассказывает о том, как сообщения работают в Smalltalk с помощью объекта HomeBudget в качестве примера того, как отправлять одно сообщение с несколькими параметрами:

HomeBudget spend: 229 on: 'VCR'

Objective-C использует много идей от Smalltalk, таких как объекты обмена сообщениями и двоеточия для параметров, но всегда включает сообщение отправки в квадратных скобках. Тот же вызов будет:

[homeBudget spend:229 on:@"VCR"];

Почему Objective-C использует квадратные скобки (вместо того, чтобы оставлять сообщения наподобие Smalltalk)? Требуется ли синтаксис из-за того, что он основан на C? Это стилистический выбор? Предлагает ли он больше выбора в том, что вы можете выразить? Есть ли другая причина?

Ответы

Ответ 1

Я нашел интервью с Brad Cox, которое, похоже, подсказывает, что квадратные скобки были для синтаксиса:

DD: Квадратные скобки являются отличительной частью синтаксиса Objective-C. Как появились квадратные скобки и это было сделано?

BC: Да, это был я. Довольно буквально это был поиск чего-то, что не было принято. Были сделаны кудрявые скобы. Были взяты обычные круглые скобки. Это был просто поиск скобок, которые не сталкивались бы с чем-то используемым C.

Tom Love также зачисляет себя квадратными скобками в Masterminds of Programming, но он, кажется, говорит, что это был стилистический выбор:

Я часто называю себя парнем, ответственным за квадратные скобки в Objective-C, потому что мы с Брэдом долго беседовали. У нас есть синтаксис C, который является последовательно C, или мы создаем гибридный язык, где я описываю его как "квадратная скобка - это переход передач в объектную землю"? На наш взгляд, если бы у вас был гибридный язык, вы могли бы создать набор базовых классов, чтобы в какой-то момент большая часть работы выполнялась в квадратных скобках. Это позволяет скрыть множество деталей от типичного прикладного программиста.

Квадратные скобки являются индикацией сообщения, отправленного в Objective-C. Первоначальная идея заключалась в том, что как только вы создали набор библиотек классов, то вы потратите большую часть своего времени на фактическую работу внутри квадратных скобок, так что вы действительно выполняете объектно-ориентированное программирование, используя базовую структуру объектов, которые были разработаны в гибридный язык, который был комбинацией процедурного и объектно-ориентированного языка. Затем, когда вы начали создавать библиотеки функциональности, все меньше и меньше требовалось отказаться от процедурного мира, и вы могли остаться в квадратных скобках. Было преднамеренное решение разработать язык, который по существу имел два уровня - как только вы создали достаточно возможностей, вы могли бы работать на более высоком уровне. Я на самом деле думаю, что это одна из причин. Если бы мы выбрали синтаксис C-типа, я не уверен, что кто-то уже будет знать название языка, и он, вероятно, все еще не будет использоваться где-нибудь.

Ответ 2

Objective-C является строгим надмножеством "C" , и поэтому все дополнения должны были не изменять язык "C" . То, что все программы "С" также были действительными Objective-C программами.

С++ OTHO внесло изменения в язык "C" , так что не все допустимые "C" программы будут компилироваться с помощью компилятора С++, также не являются допустимыми программами на С++.

Таким образом, необходимо было найти символы, которые не использовались в "С" или, по крайней мере, не использовались в конфликтующем контексте. Таким образом, много использования "@" в Objective-C. В других случаях добавлять символы для устранения двусмысленности с "C" .