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

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

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

«Язык 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 () можно защитить фрагмент кода от одновременного выполнения сразу несколькими нитями.»

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

Добавить комментарий


Защитный код
Обновить