Подтвердить что ты не робот

Почему у Objective-C есть пространства имен?

Почему Objective-C не имеет пространства имен? Это похоже на простую функцию, которая сделает некоторые имена классов более удобочитаемыми (AVMutableVideoCompositionLayerInstruction кто-нибудь?) И оденьте глупые префиксы букв на имена классов. Это в основном из-за обратной совместимости? Сложнее ли реализовать пространства имен, чем кажется?

4b9b3361

Ответ 1

Я не знаю ответа, но я подозреваю, что "это сложнее, чем кажется", возможно, это так. Вам нужно будет внедрить поддержку в компилятор и компоновщик таким образом, чтобы не нарушать существующее программное обеспечение. И хотя это, очевидно, возможно (С++ уже это сделал), предположительно, команда цепочки инструментов имела более высокие приоритеты на своей тарелке. например в недавнем прошлом у нас была сборка мусора, GCD, блоки и Objective-C 2.0, поэтому мы не можем сказать, что они ничего не делали.

Поддержка пространства имен - это единственная вещь, которую мне очень хотелось бы увидеть, представленную в Objective-C.

Ответ 2

Я не знаю, хотите ли вы узнать, есть ли какое-то официальное решение. Но пространство имен, как и многие другие функции, - выбор, выбор, сделанный языковым спонсором. PHP только недавно представил пространство имен и, например, использует Java-пакет, который действует как модули пространства имен или python.

Я думаю, что в реализации пространства имен есть накладные расходы, главным образом потому, что Objective-c является динамически типизированным, поэтому во время выполнения вы должны сделать некоторую проверку для разрешения пространства имен, для разрешения поведения по умолчанию и т.д., и я могу предположить, что Objective-c также используется во встроенной среде (AKA iPhone), очень важна скорость.

Вы должны обернуть все, что я сказал, в большом ИМХО; D

Update:

Я нашел это очень интересное обсуждение http://clang-developers.42468.n3.nabble.com/Adding-namespaces-to-Objective-C-td1870848.html#a1872744 на веб-сайте разработчика clang, объяснив, почему определенно нетривиально реализовать пространство имен в Obj -С.