
Objective-C — компилируемый объектно-ориентированный язык программирования, используемый корпорацией Apple, построенный на основе языка Си и парадигм Smalltalk. В частности, объектная модель построена в стиле Smalltalk — то есть объектам посылаются сообщения.
Язык Objective-C является надмножеством языка Си, поэтому Си-код полностью понятен компилятору Objective-C.
Компилятор Objective-C входит в GCC и доступен на большинстве основных платформ. Язык используется в первую очередь для Mac OS X (Cocoa) и GNUstep — реализаций объектно-ориентированного интерфейса OpenStep. Также язык используется для iOS (Cocoa Touch).
В начале 1980-х годов было популярно структурное программирование, позволяющее разделить алгоритм на небольшие блоки. Однако, с ростом сложности задач, структурное программирование приводило к снижению качества кода. Приходилось писать всё больше функций, которые очень редко могли использоваться в других программах.
Многие[кто?] увидели в объектно-ориентированном программировании потенциальное решение возникшей проблемы. С одной стороны, Smalltalk использовали почти все более-менее сложные системы. С другой — использование виртуальных машин повышало требования к ресурсам.
Objective-C был создан Брэдом Коксом в начале 1980-х в его компании Stepstone. Он пытался решить проблему повторного использования кода.
Целью Кокса было создание языка, поддерживающего концепцию software IC, подразумевающей возможность собирать программы из готовых компонентов (объектов), подобно тому как сложные электронные устройства могут быть собраны из набора готовых интегральных микросхем.
При этом язык должен быть простым и основанным на языке С, чтобы облегчить переход разработчиков на него.
Одной из целей было также создание модели, в которой сами классы являются полноценными объектами, поддерживалась бы интроспекция и динамическая обработка сообщений.
Objective-C является расширением С: любая программа на С является программой на Objective-C.
Одной из отличительных черт Objective-C является динамичность: решения, обычно принимаемые на этапе компиляции, здесь откладываются до этапа выполнения.
Objective-C — message-oriented-язык, в то время как C++ — function-oriented: в Objective-C вызовы метода интерпретируются не как вызов функции (хотя к этому обычно все сводится), а как посылка сообщения (с именем и аргументами) объекту, подобно тому, как это происходит в Smalltalk.
Любому объекту можно послать любое сообщение. Объект может вместо обработки сообщения переслать его другому объекту для обработки (делегирование), в частности, так можно реализовать распределённые (то есть находящиеся в различных адресных пространствах и даже на разных компьютерах) объекты.
Привязка сообщения к соответствующей функции происходит на этапе выполнения.
Язык Objective-C поддерживает работу с метаинформацией — так, на этапе выполнения можно узнать класс объекта, список его методов (с типами передаваемых аргументов) и instance-переменных, проверить, является ли класс потомком заданного и поддерживает ли он заданный протокол и т. п.
В языке есть поддержка протоколов (понятия интерфейса объекта и протокола четко разделены). Поддерживается наследование (не множественное); для протоколов поддерживается множественное наследование. Объект может быть унаследован от другого объекта и сразу нескольких протоколов (хотя это скорее не наследование протокола, а его поддержка).
На данный момент язык Objective-C поддерживается компиляторами Clang и GCC (под управлением Windows используется в составе MinGW или cygwin).
Некоторые функции языка перенесены в runtime-библиотеку и сильно зависят от неё. Вместе с компилятором gcc поставляется минимальный вариант такой библиотеки. Также можно свободно скачать runtime-библиотеку компании Apple: Apple’s Objective-C runtime.
Эти две runtime-библиотеки похожи (основные отличия в именах методов). Далее примеры будут ориентироваться на runtime-библиотеку Apple.
Swift — открытый мультипарадигменный объектно-ориентированный язык программирования общего назначения. Создан компанией Apple в первую очередь для разработчиков iOS и OS X. Swift работает с фреймворками Cocoa и Cocoa Touch и совместим с основной кодовой базой Apple, написанной на Objective-C. Swift задумывался как более безопасный язык в сравнении с Objective-C. Язык поддерживается в среде программирования Xcode 6; программы на нем компилируются при помощи Apple LLVM и используют рантайм Objective-C, что делает возможным использование обоих языков (а такжеpure С и С++) в рамках одной программы. Был анонсирован на конференции разработчиков WWDC 2014.
Старший вице президент по разработке программного обеспечения Apple Крейг Федериги во время анонса этого продукта заявил, что язык программирования Swift был заложен ещё в платформе NeXT (ОС NeXTSTEP выпускалась в 1989—1995 годах), которая стала основой для OS X, а затем и iOS.
Разработка текущего варианта языка Swift началась в 2010 году Крисом Латтнером[en], руководителем отдела разработки инструментов для создания программного обеспечения Apple и одним из основных разработчиков LLVM. Swift заимствовал идеи из «Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, и еще из стольких многих языков, что сложно перечислить».
2 июня 2014 года на конференции WWDC Swift был официально представлен вместе с бесплатным руководством по использованию языка объёмом в 500 страниц, доступным на сервисе «iBook Store».
Версия Swift 1.0 была выпущена 9 сентября 2014 года, вместе с «Gold Master» версией Xcode 6.0 для iOS.
8 июня 2015 года компания Apple объявила о выпуске новой версии Swift 2.0, которая получила более высокую производительность, новое API обработки ошибок, улучшения синтаксиса языка, а также функцию проверки доступности функций Swift для целевых ОС.
3 декабря 2015 года была выпущена бета версия Swift 3.0 с поддержкой операционных систем OS X, iOS и Linux и лицензированная под открытой лицензий Apache 2.0 license with a Runtime Library Exception.
Swift берет довольно многое из Objective-C, однако он определяется не указателями, а типами переменных, которые обрабатывает компилятор. По аналогичному принципу работают многие скриптовые языки. В то же время, он предоставляет разработчикам многие функции, которые прежде были доступны в C++ и Java, такие как определяемые наименования, так называемые обобщения и перегрузка (overloading) операторов.
Часть функций языка выполняется быстрее по сравнению с другими подобными языками. Например, сортировка комплексных объектов выполняется в 3,9 раз быстрее, чем в Python, и почти в 1,5 раза быстрее, чем в Objective-C.
Код, написанный на Swift, может работать вместе с кодом, написанным на языках программирования C, C++ и Objective-C в рамках одного и того же проекта
Компания запустила новый сайт swift.org на котором вы найдете блог, документацию, ссылки на скачивание и прочие материалы для помощи разработчикам.
Apple разделила код Swift на несколько открытых репозиториев.
Компилятор и стандартная библиотека:
Swift: основной Swift репозиторий, который содержит исходный код для компилятора Swift, стандартная библиотека и SourceKit;
Swift-Evolution: документы, относящиеся к продолжающейся эволюции Swift, включая цели для предстоящих релизов, предложения для изменений и расширений Swift;
Библиотеки ядра:
Swift corelibs-foundation: исходный код для Foundation, который предоставляет общую функциональность для всех приложений;
Swift corelibs-libdispatch: исходный код для libdispatch, который предоставляет примитивы параллелизма для работы на многоядером железе;
Swift corelibs-xctest: исходный код для XCTest, который обеспечивает фундаментальную инфраструктуру тестирования для Swift-приложений и библиотек;
Менеджер пакетов:
Swift package-manager: исходный код для менеджера пакетов Swift;
Swift llbuild: исходный код для llbuild, система низкого уровня, который использует Swift package-manager;
Клонированные репозиториев:
Swift опирается на несколько других проектов с открытым кодом, особенно- компилятор LLVM.
Swift llvm: исходный код LLVM, с кусочками Swift-дополнений;
Swift clang: исходный код для Clang, с кусочками Swift дополнений;
Swift lldb: исходный код Swift-версии LLDB, для отладки Swift программ;

