AppleInsider.ru
X
О проекте Реклама
Чат
с читателями
Присоединяйтесь
в Телеграме

Objective-C и C++, рождение

Удивительно, но всего 15-20 лет назад между поклонниками этих языков шла чуть ли не война. Асимметричная. Со стороны “ущемляемого меньшинства”. “Большинство” даже не подозревало о существовании противника и не сопротивлялось. Интересно: в наши дни кто-нибудь догадается какой из этих языков был “большинством”, а какой – наоборот? Открою еще одну Америку: у каждого из этих языков были и есть свои фирменные недостатки, и они оба относятся к великим языкам программирования. Автору этих срок довелось “пожить” в этих языках, 6 лет в C++ и 15 в Objective-C, что ни о чем не говорит и ничего не гарантирует. Кроме того, пожалуй, что автор кое-что про эти языки знает…

Кто родился раньше?

Удивительно, но если бы Objective-C и в самом деле появился на свет раньше, чем C++, в споре между поклонниками этих языков это был бы, скорее, аргумент в пользу C++.

Вот что мне удалось установить: информация об этих языках была впервые опубликована в 18 томе авторитетного издания SIGPLAN, в 1983 году. Про Objective-C – в первом номере этого тома, в январе. Про C++ – в каком-то другом (не первом) номере. То есть, позже. Ура!

А теперь разберемся. Эмоции, бушевавшие двадцать с лишним лет тому назад, больше не искажают реальность, и теперь я могу писать про Objective-C объективно. Архив SIGPLAN в сети есть, но доступ к текстам статей… платный.

Но это не единственный источник информации об этих языках. В 1979 году, датский программист Бьярн Строустроп пришел к выводу (который хоть и перестал в наши дни быть очевидным, но все еще правильный), что объектно-ориентированный подход на порядок ускоряет и облегчает разработку сложного программного обеспечения.

Вот только простому программисту в 1979 году этот подход был недоступен. А программы, которыми мы пользуемся, которые сразу любим и ненавидим, пишутся именно “простыми” программистами, которые занимаются этим непростым делом по 8-10 часов в день пять дней в неделю, год за годом…

Проект, разрабатываемый для себя, Бьярн назвал “C с классами” (C with Classes). Суть замысла была проста и логична: из всех преимуществ ООП (объектно-ориентированное программирование) важнее всего то, что ускоряет и облегчает разработку.

Поэтому “C с классами” был объектно-ориентированным языком только в исходном коде, где существовали классы и объекты, наследование и другие признаки ООП. Компилятор превращал все эти теоретические построения в обычный процедурный код, который не уступал (в начале почти не уступал) по эффективности коду, написанному на традиционных языках программирования обычным способом, без привлечения магии.

С 1979 по 1983 Бьярн выполнил колоссальный объем работы, спроектировав и реализовав “улучшенный C”, добившись его устойчивой работы и даже опубликовал несколько статей о CwC (C with Classes), которые привлекли к ним внимание. В 1983 году Бьярн решил, что язык имеет смысл не только для него, и что пришло время для его активного продвижения. Бьярн переименовал его в C++, написал статью в SIGPLAN и приступил к написанию книги “C++ Programming Language”.

C++ впервые был упомянут в 1983, в публикации в SIGPLAN – это правда, но не вся правда. К тому моменту это был реально существующий язык, его уже пробовали сотни (или даже тысячи) добровольцев. Перед публикацией его, всего лишь, переименовали в “дважды приплюснутый Си”.

В 1985 году C++ стал продаваться, и к началу 90-х тал главным языком программирования во всем мире. Я начал им пользоваться в 1995, по сравнению с Object Pascal C++ был как Боинг 787 по сравнению с кукурузником. Сложнее, разнообразнее, современнее. Мощнее, в конце концов.

Освоение C++ требовало времени и приличных усилий (язык непрост), но он того стоил.

Замысел, приведший к появлению Objective-C

Статья в первом номере 18 тома SIGPLAN называлась “The object-oriented pre-compiler: programming Smalltalk 80 methods in C language”. То есть, “Объектно-ориентированный пре-компилятор: программирование методов Smalltalk 80 на языке C”. В статье, и в отзывах на неё, для обозначения предка Objective-C использовали аббревиатуру OOPC.

В 1983 году OOPC появился в публичном пространстве, находясь в эмбриональной фазе своего развития. Он был чем-то вроде “C с классами”, но от еще одной команды.

Когда соотношение числа использующих Objective-C и C++ было примерно 1:1000, если не 1:10000 (умозрительная оценка), почему-то это причиняло боль и требовало оправданий. Оправдания были найдены: создатели Objective-C, Брэдли Кокс и Том Лав, названные в википедии “учеными”, будто бы просто экспериментировали, и вообще не планировали для него никакого коммерческого применения.

Просто так, ради чистой науки. Глава и владелец частной компании StepStone Брэд Кокс и один из сотрудников той же компании Том Лав. Ну да…

По сравнению с понятной и привлекательной для обычного программиста концепцией C++, замысел Брэда и Тома был глубже и, поскольку никто так и не смог его внятно и понятно изложить, казался заумным и притянутым за уши.

Но мы исправим их ошибку: замысел был что надо.

По старому программистскому поверью, в каждых ста строках нового кода, независимо от того насколько тщательно и педантично он тестируется, обязательно есть два серьезных бага, которые проявят себя только оказавшись в руках пользователей. При увеличении размера кода в N раз, число таких багов возрастает в N в третьей степени раз.

Это, естественно, преувеличение и шутка юмора, но реально существующая проблема в ней отражена точно. Есть ли способ решения этой проблемы? Есть.

Повторное использование кода (reuse). Код, который уже обкатан на пользователях, в котором уже выявили и истребили всех (почти всех) багов, заведомо надежнее чем новый, только что написанный, код.

В объектно-ориентированных средах программирования (типа Smalltalk) нужный эффект достигается проще и быстрее, чуть ли не сам собой (или при соблюдении определенной гигиены при принятии решений). Вот только… Этот подход, как уже сообщалось в эпизоде про создание C++, простому программисту в начале 80-х был практически недоступен.

Использовать Smalltalk можно было только на мощных рабочих станциях (то есть, на очень дорогих), даже на этих станциях написанный на Smalltalk код был невероятно медлителен. И лицензия на сам Smalltalk была, мягко говоря, не бесплатной.

А кроме того, язык был слишком необычен – как используемыми в нем принципами (всё, что в нем есть – объекты, включая числа и классы; все действия, в том числе арифметика, осуществляются отправкой сообщений от объекта к объекту…), так и синтаксисом.

Это не так сложно, как кажется. Язык был разработан в Xerox PARC (Palo Alto Research Center) в Learning Research Group (LRG, группе исследований процесса обучения), проект и группу возглавлял Алан Кэй, и разработчики Smalltalk проводили опыты над детьми.

Дети от 8 до 15 лет, после короткого и совсем несложного обучения основным принципам Smalltalk, запросто решали очень сложные задачи, приводя гостей центра в изумление. На решение подобных задач у взрослых и опытных программистов ушли бы месяцы…

Но взрослому, тем более профессионалу, тем более во власти привычек и под гнетом его производственной программы, совершить подобное насилие над собой намного сложней.

Рождение OOPC (Objective-C)

Брэд, Том и оставшиеся безымянными сотрудники StepStone, разработали OOPC, язык для пре-компилятора – код на “чистом C” с добавленными в него обращениями к объектно-ориентированной среде времени исполнения, полностью реализующей ОО-парадигму Smalltalk, за исключением двух её “фич”: сборщика мусора и замыканий.

ОО-парадигма Smalltalk звучит страшновато, на самом деле в С были добавлены три или четыре грамматические конструкции, и она директива. Минимум!

И сам пре-компилятор, который превращал исходные коды на OOPC в коды на обычном стандартном C – который скармливали стандартному компилятору, получая на выходе работающие программы.

Все это делалось в одним из Unix’ов, и к 1983 году работало безупречно. Среда времени исполнения, на порядок более “легкая”, чем аналогичная среда Smalltalk, устанавливалась в Unix’е легко, непринужденно и стандартными средствами.

Для тех, кто понимал что к чему, эффект был потрясающий.

Помимо “повторного использования кода”, о котором мечтали Брэд и Том, и которое эта система разве что делала более удобным и естественным (но его она не гарантировала), это была настоящая действующая объектно-ориентированная среда, аналоги которой стоили десятки (если не сотни) тысяч долларов, которой было достаточно самого обычного компьютера.

Замечательные инженеры и отличные программисты, они так и не смогли превратить созданное ими чудо в источник доходов, сделав его достоянием всего мира. Сколько они хотели за OOPC, неизвестно. Книгу (куда более необходимую для OOPC, чем для C++) они даже не пытались написать.

Канал распространения – через знакомых, знакомых этих знакомых, никакой рекламы. А Интернета еще не было. Трети желающих OOPC достался вообще за так.

В OOPC управление памятью (создание и уничтожение объектов) было делегировано C. Никаких счетчиков ссылок, они появились только в NeXTSTEP 2.0.

В базовом классе (благодаря особенностям OOPC, проблема “хрупкого базового класса” библиотекам OOPC не грозила) Object, был реализован механизм превращения любого объекта в “плоское” представление, для сохранения на диск, и для восстановления из “плоского” представления, и два метода, save и load, для переопределения в подклассах.

Библиотека OOPC была фрагментом библиотеки Smalltalk, в которой отсутствовало все, что связано с графическим пользовательским интерфейсом, с перехватом и обработкой событий, с графикой в любом виде – в современных терминах это был Foundation Kit.

В конце 80-х, когда NeXT взяла в аренду OOPC, язык и базовая библиотека OOPC почти не изменились. У StepStone, к тому времени, уже был полноценный компилятор Objective-C, но NeXT он чем-то не удовлетворил – и они разработали собственный, основанный на GCC.

Продолжение следует

Новости по теме
Госдума заставит Apple предустанавливать RuStore на iPhone и iPad в России уже в 2025 году
На каких iPhone и iPad больше не будет работать YouTube после обновления
«Бизнес-поток» — новый СберБизнес для iPhone. Успевай скачать, пока не удалили
Новости партнеров
Google сильно рискует перед выходом Pixel 10 Pro. Это телефон может убить всю серию
Google сильно рискует перед выходом Pixel 10 Pro. Это телефон может убить всю серию
Биткоин-ETF в США фиксируют рекордный приток капитала в 2025 году. О чём это говорит?
Биткоин-ETF в США фиксируют рекордный приток капитала в 2025 году. О чём это говорит?
Как кошка выбирает, с кем спать — 6 причин, о которых вы не подозревали
Как кошка выбирает, с кем спать — 6 причин, о которых вы не подозревали