Введение
Swift - новый мультипарадигменный объектно-ориентированный язык программирования, созданный компанией Apple для разработчиков iOS и OS X. Swift работает с фреймворками Cocoa и Cocoa Touch и совместим с основной кодовой базой Apple, написанной на Objective-C. Swift задумывался как более безопасный язык в сравнении с Objective-C. Язык поддерживается в среде программирования Xcode 6;[4] программы на нем компилируются при помощи Apple LLVM и используют рантайм Objective-C, что делает возможным использование обоих языков (а также pure С и С++) в рамках одной программы. Был анонсирован на конференции разработчиков WWDC 2014.
Swift разрабатывался несколько лет. Apple заложила в основу Swift существующий компилятор, отладчик и структуру фреймворков. Они упростили процесс управления памятью с системой автоматического подсчета ссылок - Automatic Reference Counting (ARC). Фреймворки, основанные на Foundation и Cocoa, также были модернизированы и стандартизированы. Objective-C начал поддерживать блоки, коллекции литералов, и модули, включая заимствование новых возможностей языка фреймворком, без каких-либо проблем. Благодаря этой проделанной работе, мы можем представить новый язык для будущих разработок приложений Apple.
Swift покажется знакомым для разработчиков Objective-C. Он заимствует читабельность именованных параметров Objective-C и мощь динамической модели объектов Objective-C. Он обеспечивает плавный доступ к существующим фреймворкам Cocoa и возможность смешивать код с кодом Objective-C. Построенный на этой общей основе, Swift предоставляет много новых возможностей и унифицирует процедурный и объектно-ориентированный части языка.
Swift дружелюбен для новичков в программировании. Это первый язык программирования промышленного качества, который так же понятен и увлекателен, как скриптовый язык. Он поддерживает playground'ы - инновационная функция, которая позволяет экспериментировать с кодом Swift и видеть результат мгновенно, без необходимости компилировать и запускать приложение.
Swift вобрал в себя лучшие идеи современных языков с мудростью инженерной культуры Apple. Компилятор оптимизирован для производительности, а язык оптимизирован для разработки, без компромиссов с одной или другой стороны. Он спроектирован для разработки приложений начиная от «Hello, world», заканчивая масштабами операционной системы. Все это делает Swift перспективным инструментом для разработчиков и самой компании Apple.
Swift - это фантастический способ писать приложения на iOS, OS X и watchOS, и продолжать знакомиться с новыми функциями и возможностями. У нас амбициозные цели на Swift. Мы с нетерпением ждем что вы создадите с помощью него.
1. История
Разработка Swift началась в 2010 году Крисом Латтнером, руководителем отдела разработки инструментов разработки в Apple и одним из основных разработчиков LLVM. Swift заимствовал идеи из «Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, и еще из стольких многих языков, что сложно перечислить».
2 июня 2014 года на конференции WWDC был представлен язык программирования Swift. Также было представлено бесплатное руководство по использованию языка объёмом в 500 страниц, доступное на сервисе «iBook Store».
Старший вице президент по разработке программного обеспечения Apple Крейг Федериги во время анонса этого продукта заявил, что Swift был заложен ещё в платформе NeXT (ОС NeXTSTEP выпускалась в 1989--1995 годах), которая стала основой для OS X, а затем и iOS.
Версия Swift 1.0 была выпущена 9 сентября 2014 года, вместе с «Gold Master» версией Xcode 6.0 для iOS.
8 июня 2015 года компания Apple объявила о выпуске новой версии Swift 2.0, которая получила более высокую производительность, новое API обработки ошибок, улучшения синтаксиса языка, а также функцию проверки доступности функций Swift для целевых ОС. Новый улучшенный компилятор и стандартные библиотеки будут выпущены под операционные системы OS X, iOS и Linux и приобретут статус Open Source.
2. Преимущества перед Objective-C
Можно выделить несколько причин перехода с Objective-C на Swift.
1. Swift более читаемый язык, чем Objective-C
У Objective-C есть все болячки, которые могут быть у языка, построенного на С. Для дифференциации ключевых слов и типов от C типов, Objective-C вводит новые ключевые слова, используя символ @. Так как Swift не построен на С, то он может объединить все ключевые слова и удалить многочисленные символы @ перед каждым Objective-C типом или перед связанным с объектом ключевым словом.
Swift пересматривает общепринятые условия наследования. Таким образом, вам больше не нужно ставить запятую в конце строки или писать круглые скобки, чтобы окружить условные выражения внутри операторов if/else. Еще большое изменение в том, что вызовы метода не располагаются внутри друг друга и тем самым не создают скобочный ад! Прощайте [[[]]]. Метод и функции вызываются в Swift, используя стандартный разделенный запятыми список параметров в круглых скобках. Результатом является чистый, выразительный язык, с упрощенным синтаксисом и грамматикой.
Код в Swift очень напоминает естественный английский язык, в дополнение к другим современным популярным языкам программирования. Читаемость кода в Swift облегчает работу для программистов JavaScript, Java, Python, C #, C ++, в отличие от гадкого утенка, которым был Objective-C.
Swift легче поддерживать.
Наследие удерживает Objective-C позади: язык не может развиваться без развития C. C требует от программистов поддержки 2 кодовых файлов для улучшения времени установки и эффективности создания приложения - требование, которое переносится на Objective-C.
Swift отменяет требование двух-файлов. Xcode и компилятор LLVM может выяснить зависимость и выполнить пошаговые изменения автоматически в Swift 1.2. В результате, повторяющаяся задача разделения оглавления (файл заголовка) от тела (файл реализации) становится делом прошлого. Свифт сочетает в себе заголовок Objective-C (.h) и файлы реализации (.m) в одном файле кода (.swift).
Двух файловая система Objective-C накладывает дополнительную работу на программистов - и это работа, которая отвлекает их от более важных задач. В Objective-C вы должны вручную синхронизировать имена методов и комментарии между файлами.
Xcode и компилятор LLVM могут работать незаметно для программиста, снижая его нагрузку. Используя Swift, программисты делают меньше вспомогательных действий и могут потратить больше времени на создание логики приложения. Swift отказывается от шаблонного труда и улучшает качество кода, поддерживаемых комментариев и функций.
Swift требует меньшее количество кода.
Swift уменьшает количество кода, необходимого для повторяющихся заявлений и строк. В Objective-C, работая с текстовыми строками, вам приходится быть многословным, и чтобы объединить две части информации, потребуется множество шагов. Swift принимает особенности современного языка, например добавление 2-х строк вместе с оператором «+», что отсутствует в Objective-C. Такая поддержка для объединенных символов и строк имеет основополагающее значение для любого языка программирования, который использует отображение текста для пользователя на экране.
Система типов в Swift снижает сложность в написании кода - так как компилятор может выяснять типы. В качестве примера: Objective-C требует, чтобы программисты запоминали специальные токены строк (%S, %d, %@) и использовали разделенный запятыми список переменных для замены каждого токена. Swift поддерживает интерполяцию строк, что устраняет необходимость запоминания токенов и позволяет программистам вставлять переменные, такие как название ярлыка или кнопки, непосредственно во встроенную пользовательскую строку. Тип вывода системы и строки интерполяции уменьшают количество ошибок, которые распространены в Objective-C.
В Objective-C, если вы нарушили порядок расположения или использовали неправильный токен строки, ваше приложение упадет. Swift же снова освобождает вас от дополнительной работы: вы пишите меньше кода (в следствие будет меньше ошибок) благодаря их встроенной поддержке для обработки текстовых строк и данных.
Swift быстрее.
Удаление устаревших конвенций намного улучшило движок Swift. Тестирования производительности кода в Swift по-прежнему указывают на то, что Apple продолжает преданно улучшать скорость работы приложений на Swift.
В соответствии с данными Primate Labs, по показателям популярного теста GeekBench (кросс-платформенный эталонный тест для измерения быстродействия процессора и подсистемы памяти компьютера) Swift приблизился к эксплуатационным характеристикам C++ по ограничению скорости вычислений с использованием алгоритма Мандельброта в декабре 2014 года. В феврале 2015 года Primate Labs обнаружили, что Xcode 6.3 Beta улучшил производительность алгоритма GEMM в Swift (алгоритма ограниченной памяти последовательного доступа больших массивов) до коэффициента 1,4. Начальная имплементация FFT (алгоритма ограниченной памяти с рандомным доступом больших массивов) - улучшение производительности в 2,6 раза.
Swift показал и другие улучшенные показатели при дальнейшем тестировании: 8,5-кратное повышением для FFT алгоритма (оставив C++ только с приростом производительности в 1,1 раза). Также, Swift превосходит C++ для алгоритма Мандельброта, коэффициентом в 1,03.
Практически, Swift на одном уровне с C++ для FFT и алгоритма Мандельброта. В соответствии с данными Primate Labs алгоритм GEMM показал, что компилятор Swift не может векторизовать код так, как может компилятор C++. У C++ есть небольшое преимущество, но Apple обещают все исправить в следующих версиях Swift.
Swift безопаснее.
Одним из интересных моментов в Objective-C, можно считать способ обработки указателей, особенно nil (NULL). В Objective-C ничего не случится если вы попытаетесь вызвать метод с переменной указателя nil (неинициализированным). Выражение или строка кода становится невыполнимыми и может показаться, что выражение не упадет, но на самом деле будет полно багов. Невыполнимость приводит к непредсказуемому поведению, что является врагом программистов, пытающихся найти и исправить случайные сбои или остановить отклоняющееся от нормы поведение.
Опциональные типы дают возможность существования в Swift коде nil опционального значения, что говорит о возможности создания ошибки компилятора при написании плохого кода. Это создает короткий цикл обратной связи и позволяет программистам кодировать более уверено. Проблемы могут быть устранены при уже написанном коде, что значительно уменьшает количество времени и денег, которые вы тратите на исправление багов, что схоже с логикой указателя из Objective-C.
Традиционно в Objective-C, если значение было возвращено из метода, то программист был обязан зафиксировать поведение указателя возвращенной переменной (с использованием комментариев и наименования метода). В Swift опциональные типы и типы значений позволяют явно определить метод, если значение существует или, если оно может быть опциональным (то есть, значение может существовать или может быть nil).
Для обеспечения предсказуемого поведения, Swift вызывает ошибку при исполнении кода, если используется опциональная переменная nil. Эта ошибка обеспечивает согласованное поведение, которое облегчает процесс устранения багов, потому что заставляет программиста решить проблему сразу. Swift ошибка при исполнении кода произойдет на строке кода, где была использована опциональная переменная nil. Это означает, ошибка будет исправлена своевременно или ее получится избежать вовсе в коде Swift.
Swift поддерживает динамические библиотеки.
Самое большое изменение в Swift, которое не получило достаточного внимания - это переход от статических библиотек, которые обновляются только при крупных обновлениях (iOS8, iOS7, и так далее), к динамическим библиотекам. Динамические библиотеки - это исполняемые куски кода, которые могут быть присоединены к приложению. Эта функция позволяет приложениям текущей версии Swift, связаться с более новыми версиями языка, в связи с его постоянным развитием.
Разработчик предоставляет приложение вместе с библиотеками, обе из которых подписаны электронной подписью и обладают сертификатом развития для обеспечения целостности (hello, NSA). Это означает, что Swift может развиваться быстрее чем iOS, который в свою очередь выдвигает требования для современного языка программирования. Изменения в библиотеках включаются в последнее обновление, в приложение на App Store, и все просто работает.
Динамические библиотеки никогда не поддерживались iOS до запуска Swift и iOS8, хотя динамические библиотеки поддерживались Mac, в течение очень долгого времени. Динамические библиотеки являются внешними для исполнения приложениями, но включены в пакет приложения при загрузке с App Store. Это уменьшает первоначальный размер приложения, так как оно загружается в память, а внешний код добавляется только когда используется.
Возможность отложить загрузку в мобильном приложении или во встроенном приложении на Apple Watch, улучшит эффективность воспроизведения для пользователя. Это одно из отличий, которое делает экосистему IOS более гибкой. Apple была сосредоточена на загрузке только активов, ресурсов и теперь компилирует и связывает код на лету. Загрузка в ходе работы уменьшает начальное время ожидания, пока ресурс не будет отображен на экране.
Динамические библиотеки Swift, позволяют позволяют проводить изменения и улучшения проще, чем когда-либо прежде. Людям больше не нужно ждать IOS релизов, чтобы получить улучшения Apple для Swift.
Swift - это будущее, на которое вы можете повлиять.