Содержание материала

«в частности именно так можно легко реализовать распределенные объекты (т.е. объекты находящиеся в различных адресных пространствах и даже на разных компьютерах).»

Очень интересно посмотреть как это реализуется и в какой оверхед обходится. Отчего-то Боресков обо всем этом умолчал.

«Язык Objective-C поддерживает нормальную работу с метаинформацией - так у объекта непосредственно на этапе выполнения можно спросить его класс, список методов (с типами передаваемых аргументов) и instance-переменных, проверить, является ли класс потомком заданного и поддерживает ли он заданный протокол и т.п.»

Ну отлично.

«Судя по заявлениям в новой версии Mac OS X 10.5 будет кроме gcc (используемого для всех предыдущих версий) еще и компилятор от Intel'а. Также по слухам в этой версии операционной системы будет использован Objective-C 2, куда в частности войдет поддержка сборки мусора (garbage collection)»

Значит ручной мэнэджмент ресурсов остался. Интересный тандем из высокоуровневой message-oriented парадигмы и низкоуровневого управления ресурсами.

«Язык Objective-C позволяет снабжать метками каждый аргумент, что заметно повышает читаемость кода и снижает вероятность передачи неправильного параметра.»

А чтоже компилятор? Неужто он не следит за правильностью передачи параметров?

«В языке Objective-C нет встроенного типа для булевский величин, поэтому обычно такой тип вводится искусственно. Далее я буду для логических величин использовать тип BOOL с возможными значениями YES и NO (как это делается в операционных системах NextStep, Mac OS X).» Тяжелое наследие C. Это несомненно делает Объектный С самым замечательным языком в мире.

«Первым достаточно серьезным применением языка Objective-C было его использование в операционной системе NextStep. Для этой системы было написано большое количество различных классов на Objective-C, многие из которых до сих пор используются в Mac OS X.»

Автору невдомек, что первое серьезное применение C++ состоялось 35 лет назад. С тех пор он был использован на множестве систем в том числе и яблочных операционках. Для C++ было огромное количество классов (не всего лишь «достатосно большое», а огромное).

«В версии runtime от Apple все классы имеют общего предка - класс NSObject, содержащий целый ряд важных методов.»

Почему-то наличие метаинформации и ретроспекции не позволило избавиться от этого уродства.

«Для ускорения поиска сообщений по dispatch table используется кэширование, позволяющее заметно снизить затраты на пересылку сообщений.»

В C++ для вызова метода через vtable ничего не надо кэшировать. Т.к. стоимость вызова виртуального метода это стоимость всего одного перехода по этой таблице. Это позволяет вызывать методы с минимальным оверхедом.

«В отличии от языка С++ (в котором несмотря на то, что всем известно, что метод - это просто функция с дополнительным параметром this, нет никакого официально документированного способа получить указатель на эту функцию) в языке Objective-C можно по селектору метода получить адрес реализующей его функции (именно как функции языка С).»

Очень интересно послушать про ситуацию когда адрес функции получен (а следовательно и указатель на объект), сам объект удален, а мы начали полученную функцию «мацать» по всякому.

«Это позволяет при необходимости многократного вызова одного и того же метода у заданного объекта полностью избежать всех расходов, связанных с пересылкой сообщений.»

Автор даже к середине своей статьи не может определиться, большой оверхед у посылки сообщений или маленький, зло это или рулез. Расширение сознания полное. Санитары в Кащенко плачут от зависти и рвут на себе белые халаты.

«В языке Objective-C поддерживается обработка исключений очень похожая на используемую в языках C++ и Java.»

Это чтоже-то получается? В белом и пушистом Объектном С используются исключения как в богомерзком C++? Господи да куда мир катится!!!

«Язык Objective-C поддерживает синхронизацию для многопоточных приложений. При помощи директивы @synchronized () можно защитить фрагмент кода от одновременного выполнения сразу несколькими нитями.»

Очень интересно как реализована блокировка нескольких объектов сразу. Интересно послушать что произойдет если попытка заблокировать объект провалится.