На чем написана mac os
На мой взгляд Mac OS X — это лучшая операционная система на данный момент. Поработав с ней совсем немного понимаешь, что всякие Винды как раньше были просто убогими, так убогими и остаются до сих пор.
Немного истории, операционная система NextStep
Свое происхождение Mac OS X ведет от легендарной операционной системы NextStep.
Когда в 1985 году один из основателей компании Apple Стив Джобс вынужден был уйти из нее, он основал новую компанию NeXT, которая должна была заниматься созданием принципиально нового компьютера и, естественно, операционной системы для него.
Цель стояла в создании компьютера для мира «of interpersonal computing». Компьютер должен быть позволять группам людей легко и удобно работать вместе, даже если они находились по разные стороны земного шара.
Всего за несколько лет компания не просто сделала революционный для того времени компьютер, но и создала операционную систему, обладавшую беспрецедентными возможностями.
Разработанная операционная система называлась NextStep. Это была полностью 32-битовая операционная система (с полноценной многозадачностью), в основе которой лежала FreeBSD и микроядро Mach.
Вся работа с графикой в ней осуществлялась через Display Postscript, т.е. можно было использовать полупрозрачность, кривые Безье, сложные области и много другое. Использование Display Postscript позволяло издательским приложениям получать на экране изображение, точно соответствующее получаемому при печати.
Сам компьютер Next содержал чип DSP и операционная система предоставляла удобные средства для работы со звуком, включая возможность вложения голосовых сообщений практически в любые документы (задолго до OLE).
Однако жемчужиной NextStep‘а стала мощнейшая библиотека готовых объектов и уникальная среда разработки интерфейсов Interface Builder.
В основу библиотеки объектов лег разработанный Брэдом Коксом (Brad Cox) необычайно гибкий и простой язык — Objective-C, фактически позволявший использовать объектную модель языка Smalltalk в языке С.
В отличии от запутанного и громоздкого С++ язык Objective-C крайне прост — программисту на С достаточно всего нескольких дней для освоения Objective-C. Вместе с тем язык обладает такой гибкостью, которая даже не снилась программистам на С++.
За счет использования языка Objective-C и его объектной модели создателям NextStep‘а удалось легко завернуть в объекты как основные структуры данных (строки, массивы, словари и т.п.), так и объекты, используемые для построения графического пользовательского интерфейса.
При этом можно было легко и быстро создать в Interface Builder‘е сложный интерфейс (причем это не сводилось просто к раскидыванию визуальных компонентов по окнам — можно было устанавливать сложные связи между объектами, позволявшие этим объектам взаимодействовать друг с другом без написание дополнительного кода).
Созданный интерфейс можно было сразу же попробовать в действие (не имея при этом вообще ни одной строчки кода — ряд возможностей осуществлялся через установку связей между объектами).
Еще одной возможностью NextStep‘а была поддержка распределенных объектов (PDO — Portable Distributed Objects) — работа с удаленными объектами осуществлялась крайне просто и красиво и немалую роль в этой простоте сыграл язык Objective-C .
Уже в 1990 году все это не только великолепно работало, под NextStep уже был создан ряд серьезных приложений, включая электронные таблицы, текстовые процессоры и многое другое.
А что же в это время было у M$ — а у них только-только вышли Windows 3.0. До появления каких-либо средств визуальной разработки (даже таких убогих как Visal Basic) оставались годы. Кроме того, IMHO как VB, так и Delphi заметно уступают средствам разработки в NextStep.
При этом NextStep обладал хорошо продуманным и красивым пользовательским интерфейсом — достаточно просто посмотреть на скриншоты. Кстати вы можете обратить внимание, что ряд визуальных элементов у Windows 95 крайне напоминают соответствующие элементы NextStep‘а.
Также в состав NextStep‘а входил стандартный набор средств из Unix, включая shell, gcc, gdb и многое другое.
Вполне закономерно, что NextStep была признана лучшей средой для разработки.
Однако цена на сам компьютер Next была довольна велика ($4000 и выше), что сильно сдерживала его распространение. Поэтому через несколько лет Next была вынуждена прекратить производство компьютеров и заняться исключительно операционной системой и продуктами под нее.
Так система была портирована под Sun и компьютеры на базе Intel 486.
Так что к моменту выхода Windows 95 уже была версия NextStep, которая отлично работала на тех же компьютерах, что Windows 95, но при этом была полноценной 32-битовой операционной системой с мощнейшей графикой и высокой надежностью.
Фактически M$ Windows 95 уступала NextStep‘у по всем параметрам с огромным отрывом (мягко говоря) за исключением цены и огромной маркетинговой компании по пропихиванию Windows 95.
Windows NT в то время также не составляло конкуренции NextStep‘у, уступая как по надежности, графике, так и по средствам разработки.
Как я читал, на первых Next-ах была надпись — «We believe that a small group of people can change the world».
Вот одна интересная с исторической точки зрения статья о Mac OS X и NextStep.
NextStep и idSoftware
Мало кто знает, что разработка игр Doom и Quake велась именно на компьютерах Next. Одной из причин отсутствия редакторов уровней от idSoftware (как и ряда других инструментов) являлось именно то, что соответствующие инструменты были написаны для NextStep.
Эта страница посвящена редактору уровней для игры Quake, использованному idSoftware. На ней можно посмотреть скриншоты редактора и скачать его исходный код.
Более того, id -это стандартный тип в языке Objective-C, обозначающий указатель на объект.
Вот некоторые высказывания Джона Кармака насчет операционных систем, обратите внимание, что хотя он признает доминирующее положение форточек, платформа NextStep является лучшей.
В этой статье можно получить более полную информацию о NextStep‘е Intro to NEXTSTEP
Несколько скриншотов. Обратите внимание на простоту и продуманность интерфейса.
На следующих двух скриншотах — NextStep на компьютерах Sun.
Легендарный DooM идет на версии NextStep для РС.
Основа программирования для Mac OS X
В конце 1996 года произошло фактическое объединение компаний Apple и Next (точнее, компания Apple приобрела Next) и NextStep был взят за основу для новой операционной системы для Маков.
На тот момент времени у Apple дела с их собственной операционной системой были весьма плачевными (мне довелось портировать приложение под Mac OS 7 и эта операционка оставила впечатление чего-то громоздкого и жутко неудобного, аналогичные комментарии есть у Кармака — см. ссылке ранее в тексте).
Подробнее об этом можно прочитать здесь — статья об объединении Apple Computers Inc. и NeXT Software Inc.
Таким образом, за основу для будущей операционной системы (Mac OS X) был взят NextStep, однако был сделан и ряд изменений.
Так основу всей графики в Mac OS X составляет не Display Postscript а Quartz (иногда называемый DisplayPDF). Работа с графикой на низком уровне ведется через OpenGL.
Был полностью переработан и весь пользовательский интерфейс, получивший название Aqua. Ниже приводятся несколько скриншотов Mac OS X, хотя для того чтобы оценить всю красоту Aqua необходимо попробовать систему самому — ряд операций с окнами анимированны и смотрятся очень красиво (при этом не надоедая).
Также в Mac OS X была добавлена полная поддержка OpenGL и языка Java (для него были сделаны интерфейсы для всех основных классов).
Еще одним отличием Mac OS X от NextStep‘а стало наличие фактически двух платформ для разработки Carbon и Cocoa. Платформа Carbon опирается на С/С++, и обладает меньшей гибкостью и удобством.
Платформа Cocoa — это фактически платформа разработки из NextStep, ориентированная на использование языка Objective-C.
Также в Mac OS X было добавлено много новых технологий и классов.
С точки зрения графики очень интересна технология CoreImage, позволяющая осуществлять обработку изображений непосредственно на GPU. При этом можно самому писать новые фильтры на некотором подмножестве языка GLSL.
Планируется целый ряд статей по программированию под Mac OS X, а пока ниже дается некоторая минимальная информация и ссылки на ресурсы.
Одной из особенностей программирования для NextStep/Mac OS X является фокус на композицию объектов и делегирование. К сожалению, в большинстве доступных книг по ООП этим важным понятиям практические не уделяется внимания, и понятно почему — они очень плохо вписываются в основные положения С++ и Java.
Основа подхода заключается в получении сложной функциональности путем композиции ряда простых объектов, т.е. выбирается набор объектов и между ними устанавливаются связи.
Простейшим примером подобной связи является делегирование — объект может передать запрос на выполнение произвольной операции другому объекту.
Программирование под Mac OS X включает активное использование паттернов проектирования — в систему вошли ПРАКТИЧЕСКИ ВСЕ паттерны из «DP». Некоторые паттерны (в основном связанные с созданием новых объектов) в явном виде не используются просто по причине их ненужности — язык Objective-C предоставляет достаточно возможностей для реализации так называемого виртуального конструктора и использование специальных паттернов для этой цели просто не нужно.
В принципе для разработки приложений под Mac OS X можно использовать не только Objective-C, но и С, С++, Java, а также различные их комбинации.
Но лучше всего использовать (особенно для приложений со сложной логикой и/или графическим пользовательским интерфейсом) именно язык Objective-C ( или язык Objective-C++ — в некотором смысле объединение Objective-C и C++, это позволяет легко работать с абстрактными типами данных, сохраняя при этом гибкость).
Также очень много полезной документации содержится на сайте developer.apple.com.
Одним из наиболее правильных документов является Cocoa Fundamentals, свободно скачиваемый с developer.apple.com.
Большое количество ссылок можно найти в разделе ссылок.
Вступление
Я думаю все слышали про Mac OS X как операционную систему для дизайнеров и домохозяек. Но хочется рассказать про средства разработки для OS X, а то хорошие программы пишут, а на чем — никто не знает.
Сразу скажу, что не буду рассказывать про кроссплатформенные фреймворки и тулкиты(такие как Qt) или про создание консольных приложений, я расскажу про то, что в плане создания приложений отличает Mac OS X от других операционных систем, а именно — фреймворк Cocoa. Оговорюсь сразу, что буду стараться избегать сравнений с другими фреймворками, я хочу просто рассказать про Cocoa.
Заглянем немного в историю. Mac OS X — дальнейшее развитие ОС NextSTEP. NextSTEP была первой ОС в которой очень широко использовался язык Objective-C, на нем была написана большая библиотека готовых объектов, причем как и обычные типы данных — строки, массивы, словари, так и объекты, используемые для построения GUI приложений. Поэтому, большая часть приложений под NextSTEP писалась на Objective-C с использованием готовых объектов. Эта самая библиотека и переросла в Cocoa framework.
Но включать в новую ОС почти незнакомый никому API было бы крайне плохим решением, поэтому добавили еще 2: Classic и Carbon.
Classic создан для того, чтобы запускались приложения Mac OS 9, на данный момент рассматривать его бессмысленно, т.к. после перехода на процессоры фирмы Intel по понятным причинам Classic был выкинут из системы.
Carbon был создан чтобы легко перенести приложения из Mac OS 9 в OS X, с возможностью добавить к уже готовому коду программы новую функциональность, доступную только в десятке. Как ни странно, но много приложений до сих пор написаны на Carbon(например MS Office for Mac и некоторые продукты Adobe).
На данный момент фреймворки Carbon и Cocoa развиваются паралельно, но со следующего релиза Mac OS X будут развивать только Cocoa.
Основным языком разработки под Cocoa является Objective-C, а поскольку в дальнейшем все примеры будут идти на этом языке, то впервой части я расскажу именно про него. Но если вы уже владеете Python или Ruby, то изучать Objective-C вам не надо, в XCode 3.0(срада разработки, о ней в следующей части) биндинги для этих языков «искаропки».
Язык программирования Objective-C
Помимо широкого известного и распространенного объектного расширения языка С — языка С++ — есть и другое его расширение — язык Objective-C, обладающий огромной простотой, полной совместимостью с языком С и очень мощной и выразительной объектной моделью, заимствованной из языка Smalltalk.
Язык был придуман Брэдом Коксом (Brad Cox) в начале 80-х годов прошлого века. Целью Кокса было создание языка, поддерживающего концепцию software IC. Под этой концепцией понимается возможность собирать программы из готовых компонент (объектов), подобно тому как сложные электронные устройства могут быть легко собраны из набора готовых интегральных микросхем (IC, integrated curcuits). При этом такой язык должен быть достаточно простым и основанным на языке С, чтобы облегчить переход разработчиков на него.
Одной из целей было также создание модели, в которой сами классы также являются полноценными объектами, поддерживалась бы интроспекция и динамическая обработка сообщений.
Получившийся в результате язык Objective-C оказался крайне прост — его освоение у С-программиста займет всего несколько дней. Он является именно расширением языка С — в язык С просто добавлены новые возможности для объектно-ориентированного программирования. При этом любая программа на С является программой и на Objective-C (для языка С++ это не верно).
Еще одной из особенностей языка является то, что он message-oriented в то время как С++ — function-oriented. Это значит, что в нем вызовы метода интерпретируются не как вызов функции (хотя к этому обычно все сводится), а именно как посылка сообщения (с именем и аргументами) объекту, подобно тому, как это происходит в Smalltalk-е. Такой подход дает целый ряд плюсов — так любому объекту можно послать любое сообщение. Объект может вместо обработки сообщения просто переслать его другому объекту для обработки (так называемое делегирование), в частности именно так можно легко реализовать распределенные объекты (т.е. объекты находящиеся в различных адресных пространствах и даже на разных компьютерах). Привязка сообщения к соответствующей функции происходит непосредственно на этапе выполнения.
Язык Objective-C поддерживает работу с метаинформацией — так у объекта непосредственно на этапе выполнения можно спросить его класс, список методов (с типами передаваемых аргументов) и instance-переменных, проверить, является ли класс потомком заданного и поддерживает ли он заданный протокол и т.п.
В языке есть нормальная поддержка протоколов (т.е. понятие интерфейса объекта и протокола четко разделены). Для объектов поддерживается наследование (не множественное), для протоколов поддерживается множественное наследование. Объект может быть унаследован от другого объекта и сразу нескольких протоколов (хотя это скорее не наследование протокола, а его поддержка).
На данный момент язык Objective-C поддерживается компилятором gcc. Довольно много в языке перенесено на runtime-библиотеку и сильно зависит от нее. Вместе с компилятором gcc поставляется минимальный вариант такой библиотеки. Также можно свободно скачать runtime-библиотеку от компании Apple: Apple’s Objective-C runtime. Эти две runtime-библиотеки довольно похожи (в основном отличие заключается в именах методов), хотя далее я буду ориентироваться на runtime-библиотеку от компании Apple.
Синтаксис языка
В языке Objective-C для обозначения объектов используется специальный тип id. Переменная типа id фактически является указателем на произвольный объект. Для обозначения нулевого указателя на объект используется константа nil. Кстати про id: движок игры Doom разрабатывался на рабочих станциях Next, так что может есть связь между типом id и названием idSoftware.
При этом вместо id можно использовать и более привычное обозначение с явным указанием класса. В частности последнее позволяет компилятору осуществлять некоторую проверку поддержки сообщения объектами — если компилятор из типа переменной не может сделать вывод о поддержке объектом данного сообщения, то он выдаст предупреждение (а не ошибку !). Тем самым язык поддерживает проверку типов, но в нестрогой форме (т.е. найденные несоответствия возвращаются как предупреждения, а не ошибки).
Для посылки сообщений используется следующий синтаксис:
[receiver message];
Сообщение может также содержать параметры:
[myRect setOrigin:30.0 :50.0];
В этом примере именем метода (сообщения) является setOrigin. Обратите внимание, что каждому передаваемому аргументу соответствует ровно одно двоеточие. При этом в приведенном примере первый аргумент имеет метку (текст перед двоеточием), а второй — нет.
Язык Objective-C позволяет снабжать метками каждый аргумент, что заметно повышает читаемость кода и снижает вероятность передачи неправильного параметра.
[myRect setWidth:10.0 height:20.0];
В этом примере в качестве имени сообщения выступает setWidth:height:.
Также поддерживается возможность передачи произвольного количества аргументов в сообщении:
[myObject makeGroup: obj1, obj2, obj3, obj4, nil];
Как и функции, сообщения могут возвращать значения, при этом в отличии от языка С, типом возвращаемым по умолчанию значения является id.
float area = [myRect area];
Результат одного сообщения можно сразу же использовать в другом сообщении:
[myRect setColor:[otherRect color]];
Как уже говорилось, в Objective-C классы сами являются объектами. Основной задачей таких объектов (называемых class objects) является создание экземпляров данного класса. При этом само имя класса играет двойную роль — с одной стороны оно выступает как тип данных (т.е. он может быть использован для описания указателей на объекты данного класса). А с другой стороны имя класса может выступать в качестве объекта, которому посылается сообщение ( в сообщениях имя класса может принимать участие только как receiver). В языке Objective-C нет встроенного типа для булевских величин, поэтому обычно такой тип вводится искусственно. Далее я буду для логических величин использовать тип BOOL с возможными значениями YES и NO(ИМХО более понятней, но не так “политкорректно” как true/false).
Создание новых классов
Все новые директивы компилятору в языке Objective-C начинаются с символа @. Как и в С++ описание класса и его реализация разделены (обычно описание помещается в заголовочные файлы с расширением h, а реализации — в файлы с расширением m).
Ниже приводится общая структура описания нового класса:
@interface ClassName: SuperClass
instance variable declarations
>
method declarations
end
В версии runtime от Apple все классы имеют общего предка — класс NSObject, содержащий целый ряд важных методов. Описание переменных ничем не отличается от описания переменных в структурах в языке С:
@interface Rect: NSObject
float width;
float height;
BOOL isFilled;
NSColor * color;
>
end
Каждое описание начинается со знака плюс или минус. Знак плюс обозначает, что данный метод является методом класса (т.е. его можно посылать только class object’у, а не экземплярам данного класса). Фактически методы класса являются аналогами статических методов в классах в языке С++. Знак минус служит для обозначения методов объектов — экземпляров данного класса. Обратите внимание, что в Objective-C все методы являются виртуальными, т.е. могут быть переопределены.
Ниже приводятся описания возможных методов для класса Rect.
@interface Rect: NSObject
float x, y;
float width;
float height;
BOOL isFilled;
NSColor * color;
>
+ newRect;
— (void) display;
— (float) width;
— (float) height;
— (float) area;
— (void) setWidth: (float) theWidth;
— (void) setHeight: (float) theHeight;
— (void) setX: (float) theX y: (float) theY;
end
Обратите внимание, что имя метода может совпадать с именем instance-переменной данного класса (например, width и heigh).
Тип возвращаемого методом значения указывается в круглых скобках сразу же после знака плюс или минус (но перед названием метода). Если тип не указан, то считается, что возвращается значение типа id. Далее идет имя метода, где после каждого двоеточия задается тип аргумента (в круглых скобках) и сам аргумент. Язык Objective-C позволяет для аргументов метода задавать также один из следующих описателей — oneway, in, out, inout, bycopy и byref. Данные описатели служат для задания направления передачи данных и способа передачи.
Метод, принимающий произвольное количество параметров, может быть описан следующим образом:
— makeGroup: (id) object, . ;
Для подключения заголовочного файла в Objective-C вместо директивы #include используется директива #import, полностью аналогичная #include, но гарантирующая что данных файл будет подключен всего один раз.
Реализация методов класса выглядит следующим образом:
#import «ClassName.h»
@implmentation ClassName
method implementations
end
Ниже приводится пример реализации методов класса Rect, описанного ранее.
#import «Rect.h»
+ newRect Rect * rect = [[Rect alloc] init];
[rect setWidth: 1.0f];
[rect setHeight: 1.0f];
[rect setX: 0.0f y: 0.0f];
>
— (float) width < return width; >
— (float) height < return height; >
— (float) area < return [self width] * [self height]; >
— (void) setWidth: (float) theWidth < width = theWidth; >
— (void) setHeight: (float) theHeight < height = theHeight; >
— (void) setX: (float) theX y: (float) theY x = theX;
y = theY;
>
end
Как видно из примера выше, в методах доступны все instance-переменные. Однако, как и в С++, есть возможность управлять видимостью переменных (видимостью методов управлять нельзя) при помощи директив private, protected и public (действующих полностью аналогично языку С++).
Как работает механизм сообщений
Компилятор переводит каждую посылку сообщения, т.е. конструкцию вида [object msg] в вызов функции objc_msgSend.
Эта функция в качестве своего первого параметра принимает указатель на объект-получатель сообщения, в качестве второго параметра выступает т.н. селектор, служащий для идентификации посылаемого сообщения. Если в сообщении присутствуют аргументы, то они также передаются objc_msgSend как третий, четвертый и т.д. параметры. Далее происходит поиск подходящей функции среди функций данного класса, если такой не найдено, то среди функций родительского класса, если и там не найдено, то среди функций родительского класса родительского класса( 🙂 ) и т.д. Если метод (т.е. соответствующая ему функция) находится, то осуществляется его вызов с передачей всех необходимых аргументов.
В противном случае объекту дается последний шанс обработать сообщение перед вызовом исключения — селектор сообщения вместе с параметрами «заворачивается» в специальный объект типа NSInvocation и объекту посылается сообщение forwardInvocation:, где в качестве параметра выступает объект класса NSInvocation.
Если объект поддерживает forwardInvocation:, то он может либо сам обработать посылаемое сообщение, либо переслать другому объекту для обработки:
— (void)forwardInvocation:(NSInvocation *)anInvocation
if ( [someOtherObject respondsToSelector: [anInvocation selector]] )
[anInvocation invokeWithTarget: someOtherObject];
else
…
>
Создание и уничтожение объектов
В самом языке Objective-C нет специальных команд для создания и уничтожения объектов (подобных new и delete). Эта задача ложится на runtime-библиотеку и реализуется при помощи механизма посылки сообщений.
Создание нового объекта разбивается на два шага — выделение памяти и инициализация объекта. Первый шаг реализуется методом класса alloc (реализованном в классе NSObject), который выделяет необходимое количество памяти (данный метод используется для выделения памяти не только для объектов класса NSObject, но и любого унаследованного от него класса). При этом выделяемая память обнуляется и в атрибут isa записывается указатель на class object соответствующего класса.
Обратите внимание, что сообщение alloc посылается class object-у требуемого класса и это сообщение возвращает указатель на выделенную под объект память.
Собственно сама инициализация объекта (т.е. установка значений его instance-переменных, выделение дополнительных ресурсов и т.п.) осуществляется другими методами, по традиции имена этих методов начинаются с init. Обычно такое сообщение посылается сразу же после сообщение alloc, по адресу, возвращенному этим сообщением.
id anObject = [[Rectangle alloc] init];
При создании нового класса обычно нет необходимости переопределять метод alloc, а вот необходимость переопределения метода init возникает достаточно часто (хотя во многих случаях можно положится на обнуление памяти alloc’ом).
Обратите внимание, что метод(ы) init является обычным методом, ничем не выделяющимся среди остальных (в отличии от С++, где конструктор — это особый метод, у которого например нельзя взять адрес). Поэтому при создании нового класса и метода init вызов переопределенного метода init (при помощи [super init]) должен быть произведен явно в самом начале метода.
Mac OS X (как и NextStep) для управления временем жизни объектов используют reference counting — каждый объект содержит внутри себя некоторый счетчик, при создании устанавливаемый в единицу.
Посылка объекту сообщения retain увеличивает значение этого счетчика на единицу (так все контейнерные классы библиотеки Foundation при помещении в них объекта, посылают ему сообщение retain). Установившейся практикой является посылка объекту сообщения retain всеми, заинтересованными в нем сторонами (объектами), т.е. если вы запоминаете ссылку на объект, то следует послать ему сообщение retain.
Когда объект перестает быть нужен, то ему просто посылается сообщение release. Данное сообщение уменьшает значение счетчика на единицу и, если это значение стало меньше единицы, уничтожает данный объект.
Перед уничтожением объекта ему посылается сообщение dealloc, позволяющее объекту произвести свою деинициализацию. При этом это также является обычным сообщением и в нем Вы явно должны в конце вызвать унаследованную реализацию через [super dealloc].
— (void) dealloc
.
[super dealloc];
>
Objective-C 2.0
На WDC2006 Apple представила новую версию языка — 2.0. Среди нововведений были отмечены сборка мусора, быстрая энумерация, свойства в классах, 64-битная поддержка и многое другое. Следует отметить, что эти нововведения доступны только для Leopard.
Сборка мусора
Objective-C 2.0 позволяет производить автоматическую сборку мусора, правда это опционально.
Свойства
Ранее для изменения и чтения instance variables необходимо было писать методы возврата и задания значения(т.н. getters and setters), теперь можно писать так:
@interface Person: NSObject >
@property(readonly) NSString *name;
@property(readonly) int age;
-(id)initWithName:(NSString)name age:(int)age;
end
Получить имя можно так:
NSString *name = aPerson.name;
Быстрая энумерация
Теперь добавлен аналог оператора foreach:
for (Person *p in thePeople) NSLog(@»%@ is %i years old.», [p getName], [p getAge]);
Для первой части хватит. При составлении статьи были использованы материалы сайтов developer.apple.com и steps3d.narod.ru(кстати единственный сайт, на котором есть информация про программирование в Mac OS X на русском).
В следующей части расскажу про среду разработки XCode и редактор интерфейсов Interface Builder, а также покажу создание совсем простенького приложения.
На каком яп написан windows, linux and mac os x
В основном на простом C со вставками на языке ассемблера. Впрочем, справедливости ради, надо сказать, что при написании ядра Linux язык C использовался не в чистом виде, а с набором расширений GNU. Что касается Windows, то и она, как ни странно, большей частью написана на простом C (для облегчения переносимости, так как первые версии Windows NT были предназначены для довольно большого числа архитектур), хотя объектно-ориентированный подход, конечно же, использовался (как никак уже начинались девяностые годы XX века). Код BSD, потомком которой (по большей части) стала Mac OS X, также был написан в основном на C и языке ассемблера.
—
P.S.
Вообще C++ представляет собой объектную реализацию языка C, так что он отличается от своего прародителя чуть большим уровнем абстракции, но в синтаксисе особых различий нет. На C++ писать проще, быстрее, но он менее «прозрачен» для программиста, что, по ряду причин, не есть гуд для написания низкоуровневых модулей.
Остальные ответы
MacOS
macOS (ранее Mac OS X, затем OS X) — это серия графических операционных систем, разрабатываемых и продаваемых компанией Apple с 2001 года. Это основная операционная система для компьютеров семейства Mac от Apple. На рынке настольных компьютеров, ноутбуков в течение многих лет она была второй по популярности операционной системой после Microsoft Windows. [1]
MacOS — вторая крупная серия операционных систем Macintosh. Первая серия называется «классическая» Mac OS, которая была представлена в 1984 году и последней версией которой стала Mac OS 9 в 1999 году. Mac OS X 10.0 была выпущена весной 2001 года. [2]
В 2012 году Apple сократила название до «OS X» и изменило его на «macOS» в 2016. Они приняли номенклатуру, которую они использовали для других своих операционных систем: iOS, watchOS and tvOS. Последняя версия — macOS Ventura, которая вышла в октябре 2022-го. [3]
Версии Mac OS X с 1999 по 2005 год могут работать только на компьютерах Apple на базе PowerPC того периода времени. Когда Apple объявила, что с 2006 года перейдет на процессоры Intel, была произведена и распространена отдельная версия Mac OS X 10.4 Tiger для первых компьютеров Mac на базе Intel; она включала эмулятор, известный как Rosetta, который позволял пользователям запускать большинство приложений PowerPC на компьютерах Mac OS X 10.5 Leopard на базе Intel.
Настольная версия Mac OS X 10.6 Snow Leopard была первой в мире, доступной только для компьютеров Mac на базе Intel. Apple выпустила Mac OS X 10.7 Lion в 2011 году, которая больше не поддерживает 32-разрядные процессоры Intel и также не использует Rosetta. Систему выпускали на 64-разрядных процессорах Intel, и они не поддерживаются приложениями PowerPC. Apple заявила, что с 2020 года новые компьютеры Mac будут иметь собственные процессоры на базе архитектуры ARM.
- 1 История
- 2 Версии macOS
- 2.1 Mac OS X 10.2 Jaguar
- 2.2 Mac OS X 10.3 Panther
- 2.3 Mac OS X 10.4 Tiger
- 2.4 Mac OS X 10.5 Leopard
- 2.5 Mac OS X 10.6 Snow Leopard
- 2.6 Mac OS X 10.7 Lion
- 2.7 Mac OS X 10.8 Mountain Lion
- 2.8 OS X 10.9 Mavericks
- 2.9 OS X 10.10 Yosemite
- 2.10 OS X 10.11 El Capitan
- 2.11 macOS 10.12 Sierra
- 2.12 macOS 10.13 High Sierra
- 2.13 macOS 10.14 Mojave
- 2.14 macOS 10.15 Catalina
- 2.15 macOS 11.0 BigSur
- 2.16 macOS 12.0 Monterey
- 2.17 macOS 13.0 Ventura
История
Mac OS X была создана на основе NeXTSTEP, которая в свою очередь основана на коде ядра Mach Университета Карнеги-Меллона и 4.4 BSD: бесплатной открытой версии Unix Университета Беркли. [4] Некоторые части FreeBSD и NetBSD также были включены в NeXTSTEP. Пока Джобс работал в NeXT, за пределами Apple, компания безуспешно пыталась создать систему «следующего поколения» с помощью проектов Taligent, Copland и Gershwin. [5]
NeXT (в то время называвшаяся OPENSTEP) была выбрана в качестве основы для будущей операционной системы Apple, и компания из Купертино полностью приобрела NeXT. Стивен Джобс вернулся в Apple на должность генерального директора, а позже стал сопровождать компанию. [6] Преобразование OPENSTEP в несвободную и более совершенный вид системы, которая будет адаптирована для основного рынка Apple: домашних пользователей и профессионалов в области мультимедиа. Проект изначально был известен как Rhapsody, а затем получил название Mac OS X. [7]
В сентябре 2000 года Apple выпустила публичную бета-версию, которая стоила 29,95 долларов и под названием Kodiak [8] . В этой версии появился стиль пользовательского интерфейса Aqua. Первой версией MacOS X 10.0 была система под названием Cheetah (рус. Гепард). Система была очень сырая, медлительная и исправления и выход обновлений делал систему еще более нестабильной в работе. Однако, в системе был уже был докбар, встроенный почтовый клиент, адресная книга, терминал.
Mac OS X 10.0 Beta
Версии macOS
Mac OS X 10.2 Jaguar
23 августа 2002 года выходит новая версия ОС: Mac OS X 10.2 Jaguar. [9] Система на момент выхода стоила 129 долларов. В новой системе была улучшена производительность и стабильность работы. Системные требования в новой ОС значительно выросли. Теперь она работала только на компьютерах PowerPC G3 и G4, требовалось минимум 128 Мб ОЗУ. В QuickTime появилась поддержка MPEG-4, появилась функция распознавания рукописного текста.
Установочный DVD Mac OS X Tiger
Mac OS X 10.3 Panther
24 октября 2003 года вышла новая версия — Mac OS X Panther. [10] В новой системе выросла производительность, а также был полностью переработан штатный файловый менеджер Finder, например, он мог извлекать и создавать zip-архивы не устанавливая дополнительное ПО. Также появилась возможность быстрого переключения пользователей , TextEdit научился работать с документами Microsoft Word, появился встроенный браузер Safari.
Mac OS X 10.4 Tiger
29 апреля 2005 года выходит Mac OS X 10.4 Tiger. Для установки требовалось не менее 256 Мб ОЗУ и 3 Гб свободного пространства на диске. В системе появились функции Spotlight, Dashboard, был серьезно переработан встроенный почтовый клиент, появилась новая версия браузера Safari, Quick Time, Voice Over, Xcode и других. Через несколько месяцев после выхода этой версии, Apple объявила о переходе на процессоры Intel.
Mac OS X 10.5 Leopard
26 октября 2007 года выходит Mac OS X Leopard. [11] Версия вышла намного позже чем ожидалось. Причиной была загруженность разработчиков другим проектом — iPhone. На сайта Apple был опубликован список новшеств, который состоял из 317 пунктов. Систему можно было установить только на PowerPC G4 или G5, а также на любой Mac на процессорах Intel. Минимальные системные требования были такие: 512 Мб оперативной памяти и 9 Гб места на диске. В новой системе появилась программа TIme Machine, которая автоматически делала резервное копирование данных с возможностью восстановления любой версии. Также в системе на Intel была встроена среда Boot Camp, которая позволяла установить Windows XP или Windows Vista и переключаться между этими системами.
Mac OS X 10.6 Snow Leopard
8 июня 2009 года выходит версия Mac OS X Snow Leopard. [12] Помимо поддержки Microsoft Exchange Server, был переписан с нуля Finder, а также улучшена производительность и стабильность системы. Также появился магазин приложений Mac App Store.
Mac OS X 10.7 Lion
20 октября 2010 года была представлена Mac OS X Lion. [13] Впервые, её можно было скачать через магазин приложений Mac App Store, стоимость составляла 29,99 долларов. Всего было заявлено 250 новшеств. Многие из них были взяты у iOS, например, полноэкранный режим приложений. В системе появились эмодзи, Launchpad, Misson Control. Исчез Adobe Flash Player.
Macbook Pro с системой Mac OS X Snow Leopard
Mac OS X 10.8 Mountain Lion
11 июня 2012 состоялась презентация OS X Mountain Lion. [14] Новую версию уже нельзя было купить на диске или флешке, она была доступна только для скачивания в App Store за 19,99 доллара. Из названия системы исчезло слово Mac. Из iOS пришли Game Center, iCloud и Центр уведомлений. Notes, Riminders стали отдельными приложениями. Система для установки требовала минимум 2Гб ОЗУ и 8Гб на диске. Всего за год было продано около 28 миллионов копий системы.
OS X 10.9 Mavericks
10 июня 2013 года объявили о выходе OS X Mavericks [15] . Начиная с этой системы, в названии фигурировали не дикие кошки, а географические объекты штата Калифорнии. 22 октября 2013 система была доступна для скачивания всем пользователям. Это первая версия системы, которая распространялась бесплатно. В системе появились новые приложения, которые пришли из iOS: iBooks и Apple Maps.
OS X 10.10 Yosemite
iMac G4 c системой 10.4 Tiger
2 июня 2014 года была представлена OS X Yosemite. [16] Внешне новая версия стала ближе к интерфейcу iOS. Был полностью переработан дизайн всего интерфейса. Впервые, все оформлением было лишено скевоморфизма. Но также у системы и были минусы. Были проблемы со стабильностью сети, также Finder иногда не видел файлов в папках. Но в целом, отзывы о системе были положительные.
OS X 10.11 El Capitan
8 июня была представлена OS X El Capitan. [17] Система стала более производительней и быстрее. В качестве системного шрифта стал использоваться San Francisco (до этого Helvetica Neue). В системе обновились все приложения, появился режим SplitView, а также важное обновление безопасности — SIP (System Integrity Protection, защита целостности операционной системы). Теперь нельзя, даже с правами root удалить или изменять файлы, которые принадлежать операционной системе.
macOS 10.12 Sierra
13 июня 2016 года представили новую систему — macOS Sierra. [18] Название сменилось с OS X на Mac. Теперь систему можно было разблокировать с помощью умных часов Apple Watch, появился буфер обмена, который синхронизировался между iOS и MacOS, Apple Pay (через Safari с подтверждением покупок на iPhone или на Apple Watch).
macOS 10.13 High Sierra
5 июня 2017 года была представлена MacOS High Sierra. [19] Теперь, на iPhone, iPad и на Mac была одинаковая файловая система. Из системы удалили утилиты командной строки FTP и telnet, появилась поддержка Messages в iCloud. В целом, изменений было не много. В основном была повышена стабильность работы системы.
macOS 10.14 Mojave
4 июня 2018 года была анонсирована система macOS Mojave. [20] В ней появилась возможность включить темную тему, а также это была последняя система, которая поддерживала 32-битные приложения. Добавились приложения из iOS — Новости, Акции, Диктофон и Дом, полностью обновилось приложение App Store.
MacOS Monterey
macOS 10.15 Catalina
3 июня 2019 вышла macOS Catalina. [21] В системе перестали работать 32-битные приложения, а также приложения, написанные в Carbon. Приложение iTunes разделилось на три приложения: Музыка, Подкасты и TV. Из системы удалили Dashboard, GNU Emacs. В терминале заменили язык командной строки с bash на zsh.
macOS 11.0 BigSur
22 июня 2020 года состоялась презентация macOS 11.0 Big Sur [22] . Впервые, за 19 лет изменился мажорный номер версии. Система получила совершенно новый дизайн. В интерфейсе появился Пункт Управления, такой же как в iOS и iPadOS. Появилась возможность запусть приложения для iOS и iPad, которые можно покупать в объединенном App Store.
macOS 12.0 Monterey
7 июня была презентована macOS 12.0 Monterey. [23] В системе появились универсальное управление, которое позволяет одной клавиатуре и мыши одновременно взаимодействовать с несколькими компьютерами Mac и iPad. Также появилась поддержка воспроизведения содержимого AirPlay, полученного с устройств iOS и iPadOS, а также с других компьютеров Mac.
macOS 13.0 Ventura
6 июня 2022 года была презентована macOS 13.0 Ventura [24] . Обновились приложения погода и часы, появился новый инструмент Stage Manager для организации окон на рабочем столе. Появились новые функции для видеоконференций, в том числе возможность использования iPhone в качестве веб-камеры.
Хакинтош
Обычный настольный компьютер с системой OS X 10.10 Yosemite
Хакинтош — персональный компьютер, который в плане железа отличается от устройств Apple, но на котором стоит операционная система macOS. Первые версии Хакинтоша появились после перехода устройств Apple на платформу x86 и процессоры компании Intel. [25] В настойщий момент установка системы возможна даже на процессоры AMD. Основная проблема при установке возникает с видеокартой и с периферийными устройствами, которые могут не работать, в особенности на ноутбуках. Начиная с версии 10.14 Mojave, Apple прекратила поддержку веб-драйверов NVIDIA и поэтому установка новых версий невозможна на чипсеты NVIDIA.
Пользовательское соглашение macOS напрямую запрещает установку системы на компьютеры сторонних производителей. При этом Apple не так активно противостоит Хакинтошу, в отличии от iOS-джейлбрейка.
В настоящий момент, сообщается об успешных попытках установки macOS Ventura на настольные компьютеры.
Примечания
- ↑Chrome OS вышла на второе место по популярности среди десктопных ОС(неопр.) . habr.com.
- ↑Какой была первая операционная система Mac?(рус.) . OS Today (5 апреля 2021).
- ↑Релиз macOS Ventura: FaceTime Handoff, Continuity Camera, Постановщик, новые приложения и другие изменения(неопр.) . www.comss.ru (25 октября 2022).
- ↑История операционных систем Apple. Часть 3. Поколение NeXT(рус.) . Хабр.
- ↑Lessons Learned: IT’s Biggest Project Failures(англ.). PCWorld.
- ↑Дарья Сидорова.Apple: история компании от самого начала до наших дней(рус.) . Rusbase.
- ↑Версии macOS по годам: история ОС для Mac(рус.)(неопр.)?. Яблык: технологии, природа, человек.
- ↑Редактор BORDER.Как менялась macOS. Эволюция операционной системы.(рус.)(неопр.)?. Технологии для людей (17 октября 2021).
- ↑День рождения классической операционной системы Mac OS X Jaguar — ровесницы Windows XP(рус.) . www.ferra.ru.
- ↑Десять лет Mac OS X: история развития — TEKKU(неопр.) . www.tekku.ru.
- ↑Выход новой операционной системы Mac OS X Leopard назначен на 26 октября 2007(рус.)(неопр.)?. Apple Newsroom (Россия).
- ↑Компания Apple представляет Mac OS X Snow Leopard.(рус.)(неопр.)?. Apple Newsroom (Россия).
- ↑Apple предварительно знакомит с новой операционной системой Mac OS X Lion(рус.)(неопр.)?. Apple Newsroom (Россия).
- ↑Конференция WWDC 2012: Apple представляет новые MacBook, OS X и iOS(рус.) . iXBT.com.
- ↑mrDoc 17.04.2019.OS X Mavericks: десятая кошачья жизнь Apple(рус.)(неопр.)?. appleinsider.ru.
- ↑Apple представляет OS X Yosemite(рус.)(неопр.)?. Apple Newsroom (Россия).
- ↑Apple представляет OS X El Capitan — улучшенная работа и повышенная производительность(рус.)(неопр.)?. Apple Newsroom (Россия).
- ↑Юрий Андреев.Apple представила macOS Sierra, новые фишки и Siri на борту(неопр.) . iPhones.ru — Новости высоких технологий, обзоры смартфонов, презентации Apple (13 июня 2016).
- ↑macOS High Sierra представляет передовые технологии(рус.)(неопр.)?. Apple Newsroom (Россия).
- ↑Apple представляет macOS Mojave(рус.)(неопр.)?. Apple Newsroom (Россия).
- ↑Apple представляет macOS Catalina(рус.)(неопр.)?. Apple Newsroom (Россия).
- ↑WWDC 2020: Apple представила macOS Big Sur с совершенно новым дизайном(рус.) . 3DNews — Daily Digital Digest.
- ↑macOS Monterey(рус.)(неопр.)?. Apple (Россия).
- ↑macOS Ventura(неопр.). Apple.
- ↑«Хакинтош»: как запустить Mac OS X на PC(рус.) . 3DNews — Daily Digital Digest.
- Eunice
- Interix
- MachTen
- Microsoft POSIX subsystem
- MKS Toolkit
- PASE
- PIPS
- Edos
- UNIX System Services
- UserLAnd Technologies
- Подсистема для приложений на базе UNIX
- WSL
Данная статья имеет статус «готовой». Это не говорит о качестве статьи, однако в ней уже в достаточной степени раскрыта основная тема. Если вы хотите улучшить статью — правьте смело!
- Знание.Вики:Cite web (не указан язык)
- Знание.Вики:Cite web (неверный код языка)
- Знание.Вики:Страницы с ежедневно очищаемым кэшем
- Знание.Вики:Статьи без ссылки на Викисклад
- Программное обеспечение по алфавиту
- Технологии
- Все статьи
- MacOS
- Операционные системы на основе микроядер
- Apple