СпискиЗачем язык программирования Swift нужен Apple и вам


Это новый язык программирования, разработанный Apple для создания приложений для iOS и OS X. Он построен на основе C и Objective-C, но более простой и гибкий. Кроме того, создатели Swift позаимствовали лучшие элементы языков программирования Javascript и Python.
Чем он лучше других языков программирования?

Разработчики Apple постарались создать максимально современный язык: Swift быстр (скорость реализации некоторых алгоритмов в 3,9 раза больше, чем на Python) и лаконичен (разработчики избавились от многословности Objective-C). Ещё одно важное нововведение — это возможность писать код и видеть результаты в режиме реального времени. До этого на протяжении долгого времени процесс создания продукта и сам продукт были разделены, и из-за этого программисты должны были тратить много времени на проверку и оптимизацию кода. В Swift они могут вносить поправки и сразу видеть результат. Это значит, что разработчики смогут быстрее проверять в деле свои концепты и в целом быстрее создавать приложения.
Как научиться программировать на этом языке?

Одновременно с релизом Swift Apple выпустила книгу о нём, которую можно бесплатно скачать в iTunes Store. Судя по реакции специалистов, многие из которых прочитали её в первые часы после презентации языка на WWDC, в ближайшие недели стоит ждать сотни видеотуториалов и обсуждений — первые паблики уже появились.
Зачем это Apple?
Во-первых, Swift — это ответ Apple на появление языка программирования Go, который разработала конкурирующая компания Google. С момента появления OS X Apple использовала только Objective-C, и появление Swift — это большой шаг в будущее. Во-вторых, создавая простой и современный язык, Apple надеется привлечь на свою сторону не только опытных разработчиков, которые уже умеют работать с Objective-C и C, но и новичков, которые наверняка используют данную им возможность и начнут изучать Swift. Рынок приложений снова вырастет, а значит, влияние Apple увеличится.

Flappy Bird уже воссоздали на языке Swift и выложили на GitHub
Что говорят эксперты?
Антон Домашнев
iOS-разработчик Look At Media
«О таком языке мечтали многие из программистов под iOS и OS X, потому что он удобнее Objective-C, но я не могу сказать, что Objective-C — плохой язык и сильно нуждался в замене. Однако мне определённо нравится то, что Swift намного более читаем, и код, написанный на Swift, будет в разы короче аналогичного кода на Objective-C, что увеличит скорость разработки. Судя по тому, что я увидел на WWDC, нам стоит ожидать бума на игры для iOS, так как Apple представила очень интересную утилиту Interactive Playgrounds, которая поспособствует увеличению интереса к разработке игр для девайсов Apple. Сегодня я начну читать учебник по этому языку — судя по тому, что было показано на презентации, переход на Swift не будет сложным, так как много конструкций похожи на те, которые мы используем сейчас в разработке на Objective-C. Новые свои проекты я собираюсь писать на Swift».
Владимир Бобров
Технический директор Look At Media
«Безусловно, релиз Swift — это крутой шаг как для компании Apple, так и для сообщества разработчиков. Новый язык позволит привлечь большее количество разработчиков за счёт снижения порога входа в экосистему разработки Apple, который был довольно высоким из-за языка Objective-C. Кроме этого, предложенный набор инструментов (Interactive Playgrounds, REPL) позволит быстрее отлаживать свои программы и игры. Полагаю, что свойства языка Swift и огромная поддержка со стороны Apple позволят ему добиться большой популярности в среде разработчиков ПО, ориентированных на массового пользователя».
Что ещё?
В Swift можно использовать эмодзи.
Rust против Swift: в чем основные различия?
Нет никаких сомнений в том, что программирование — одна из самых горячих тем сейчас. Студентов очень привлекает программирование, и они хотят изучать языки программирования. Но они часто путаются между несколькими вариантами.
Итак, чтобы им было проще, сегодня мы предлагаем подробную информацию о Rust и Swift. Оба эти языка являются двумя из самых популярных языков программирования.
Прежде чем сразу перейти к различиям между Rust и Swift, давайте взглянем на основы этих языков программирования.
Что такое Rust?
Rust — это высокоуровневый универсальный, статически типизированный и многопарадигмальный язык программирования, который в основном был разработан для обеспечения безопасности и производительности. Его синтаксис в чем-то похож на язык программирования C++.
Rust очень быстр и эффективен с точки зрения памяти. Это позволяет разработчикам быстро создавать эффективное программное обеспечение. Rust может интегрироваться с другими языками программирования и может работать со встроенными системами.
Более того, его можно использовать для компонентов браузера, движков моделирования для виртуальной реальности и игр, файловых систем, операционных систем и многих других вещей. Он может легко решить проблемы, которые было трудно решить с помощью языков C и C++.
Многие небольшие и крупные организации используют язык программирования Rust. Например, Dropbox, Cloudflare, Mozilla, npm, Postmates, Braintree — одни из самых популярных компаний, использующих язык Rust для производства.
См. Также Разница между языками программирования C и C++.
Rust Program To Add Two Numbers
fn main() let num1 = 32; let num2 = 18; let add = num1 + num2; println!(“Sum of 0> and 1> is 2>”, num1, num2, add); >
Sum of 32 and 18 is 50
Что такое Swift?
Swift — это мультипарадигмальный компилируемый язык программирования общего назначения. Он был разработан Apple Inc вместе с сообществом разработчиков ПО с открытым исходным кодом и выпущен в 2014 году. Swift в основном используется для настольных приложений, мобильных приложений, системного программирования, масштабирования облачных сервисов и многих других вещей.
Он был создан для замены Objective-C, более раннего языка программирования Apple. Код Swift безопасен, интерактивен, современен и быстр. Более того, это удобный для новичков язык программирования, потому что его синтаксис очень выразительный, чистый и простой для программирования.
Swift построен с помощью компилятора LLVM, фреймворка с открытым исходным кодом, включенного в Xcode версии 6. Он использует библиотеку времени выполнения Objective-C на платформе Apple, что позволяет использовать код Objective-C, C, C++ и Swift в одной программе.
Быстрая программа для сложения двух чисел
import Foundation var number1 = 21; var number2 = 32; var add = Int(); add = number1+number2; print(“number1 + number2 = “,add);
$swift main.swift number1 + number2 = 53
Rust против Swift — каковы плюсы и минусы использования этих языков?
Мы можем лучше узнать о Rust и Swift, проанализировав плюсы и минусы использования этих языков программирования.
Плюсы использования Rust
Управление памятью
Управление памятью — одно из главных преимуществ использования языка Rust. Rust в основном разработан для системного программирования, у него нет среды выполнения и не выполняется фоновая обработка, то есть сборка мусора.
Однако он обеспечивает автоматическое управление памятью, что не характерно для других языков программирования.
Параллельно:
Rust — это язык параллельного программирования. Он обеспечивает встроенную поддержку параллелизма.
Поддержка Generic
Rust поддерживает дженерики и имеет отличную систему типов. Следовательно, программистам не нужно писать одни и те же классы словарей и массив несколько раз.
Обнаружение ошибок
Rust — это язык программирования со статической типизацией. Итак, ошибки выявляются во время компиляции. Rust не поддерживает исключений. Он использует результат типа для исправимых ошибок и использует панику! Макрос для уведомления и остановки выполнения.
Оптимальный код
Rust позволяет разработчикам каждый раз писать оптимальный код. Это означает, что программистам на Rust не требуется понимание кода компилятора для оптимизации своей программы.
Документация
Документация Rust описывает работу структур данных и предоставляет архитектурные рекомендации по их подходящему использованию. Он имеет сильную поддержку сообщества и совместимость с Windows, что делает его идеальным выбором для многих людей.
Минусы использования Rust
Скорость компиляции
Скорость компиляции Rust медленная по сравнению с другими популярными языками программирования.
Сложность
На изучение и понимание языка программирования Rust требуется больше времени из-за его сложности.
Теперь давайте посмотрим на плюсы и минусы языка программирования Swift, который поможет вам понять Rust и Swift.
Плюсы использования Swift
Управление памятью
Swift обеспечивает автоматическое управление памятью и использует автоматический подсчет ссылок (ARC) для предотвращения утечек памяти и повышения производительности.
Масштабируемость
Язык программирования Swift — это будущее, а это значит, что программисты могут расширять его, добавляя новые функции.
Поддержка Generic
Поддержка дженериков в Swift аналогична Rust. Однако основное отличие заключается в том, что общая специализация в Swift является деталью реализации, тогда как Rust использует мономорфизацию для полной специализации универсального.
Легко понять
Swift очень легко читать, писать и понимать по сравнению с Rust. Он имеет простой и выразительный синтаксис, который может легко понять даже начинающий программист.
Производительность и безопасность
Swift, как следует из названия, был разработан с упором на скорость. Он обеспечивает надежную обработку ошибок и статически типизированные характеристики, которые помогают программисту узнать об ошибках перед компиляцией и предотвратить сбой кода. Следовательно, он предлагает лучшую производительность и безопасность.
Минусы использования Swift
Сообщество
Несмотря на то, что Swift является одним из самых быстрорастущих языков программирования, сообщество Swift все же меньше по сравнению с другими языками с открытым исходным кодом. Это означает, что если вы создаете проект с помощью программирования на Swift, вы можете столкнуться с проблемами при поиске поддержки сообщества.
Rust против Swift — Тенденции поиска

Согласно Google Trends, язык программирования Swift более популярен, чем язык программирования Rust, за последние 12 месяцев при поиске в Google в Соединенных Штатах.
Также читайте: Rust vs C++
Вывод
В этом блоге мы предоставили подробную информацию о Rust и Swift. Мы увидели преимущества и недостатки обоих этих языков. Надеюсь, это помогло вам узнать о Rust vs Swift. Теперь вы можете легко выбрать один из этих языков в соответствии с вашими потребностями.
Если вы все еще не уверены или нуждаетесь в помощи по назначению Rust, вы можете обсудить это с нашими экспертами.
Часто задаваемые вопросы
Для чего лучше всего использовать Rust?
Rust — это язык программирования высокого уровня, но он может напрямую обращаться к оборудованию и памяти, что делает его отличным выбором для распределенных онлайн-сервисов, инструментов командной строки, разработки встроенных устройств и т.д.
Swift лучше Python?
Swift быстрее Python. Однако, чтобы решить, что лучше между Swift и Python, вы должны учитывать свои требования. Если вы хотите создать приложение для Apple OS, лучше выбрать Swift. Но если вы собираетесь создать серверную часть, искусственный интеллект или прототип, Python будет лучшим выбором.
История языков программирования: от Objective C к Swift

Чтобы отказаться от языка программирования, на котором уже ведется коммерческая разработка, и начать учить новый, программистам нужны серьезные основания. Но история ИТ-индустрии знает много случаев, когда выбор за них делало время, и переход происходил как бы сам по себе.
Что заставило множество разработчиков перейти на Objective C? Что сейчас заставляет отказаться от него и выбрать Swift?
Objective C является расширением языка Си, в который были добавлены новые возможности для объектно-ориентированного подхода программирования. Язык использует объектную модель Smalltalk. Полностью совместим с языком программирования Си. Компания Apple долгое время использовала Objective C как основной язык программирования для разработки своих продуктов.
Создателями Objective C являются Брэд Кокс и Том Лав. Они начали работать над ним в начале1980-х годов, когда еще были сотрудниками телекоммуникационной компании ITT Corporation. Примерно в то же время Кокс и Лав познакомились с языком программирования Smalltalk. Кокса тогда занимали проблемы повторного использования программного кода.
Вследствие увеличения объема кода в проектах и сложностей его поддержки, с 1960х начинает образовываться новая, объектно-ориентированная парадигма программирования, разбившая программы на еще более мелкие составляющие – типы данных.

Каждый объект является переменной определенного программистом типа данных (так называемого класса). Определение такого специального пользовательского типа данных (класса) заключается в двух вещах: определении набора данных (инвариантов, членов) и набора подпрограмм (методов), которые будут их обслуживать.
Основным преимуществом объектно-ориентированного подхода стала возможность создавать новые классы на основе уже написанных (добавлять инварианты и методы, переопределять методы, использовать определенные в базовом классе методы как свои), названное наследованием.
Набор методов представляет собой интерфейс для взаимодействия с инвариантами.
OOPC
Брэд Кокос быстро понял, что Smalltalk не подойдет для решения задач в ITT Corporation: совместимость с языком С для них была критична. Однако Кокс решил модифицировать препроцессор для С в сторону Smalltalk.
Модификация эта состояла в добавлении новых синтаксических конструкций и специальном препроцессоре для них (который, проходя по коду преобразовывал их в обычные вызовы функций С), а также новой библиотеке времени выполнения (эти вызовы обрабатывающей). Таким образом, изначально Objective C воспринимался как надстройка над C. В каком-то смысле это так и до сих пор: можно написать программу на чистом С, а после добавить к ней немного конструкций из Objective C (при необходимости), или же наоборот, свободно пользоваться С в программах на Objective C. Кроме того, все это касается и программ на С++.
То, что получилось, Кокс назвал «OOPC» – Object-Oriented Pre-Compiler. В 1982 году Лав устроился в Schlumberger Research и получил возможность приобрести коммерческую версию Smalltalk-80. Это помогло им в дальнейшей работе над Objective C. В итоге в Objective C была реализована возможность создавать объекты и работать с ними.

Целью Кокса было создание языка, поддерживающего концепцию software IC, подразумевающей возможность собирать программы из готовых компонентов (объектов), подобно тому как сложные электронные устройства могут быть собраны из набора готовых интегральных микросхем. При этом язык должен быть простым и основанным на языке С, чтобы облегчить переход разработчиков на него.
Одной из целей было также создание модели, в которой сами классы являются полноценными объектами, поддерживалась бы интроспекция и динамическая обработка сообщений. Любому объекту можно послать любое сообщение. Объект может вместо обработки сообщения переслать его другому объекту для обработки (делегирование), в частности, так можно реализовать распределённые (то есть находящиеся в различных адресных пространствах и даже на разных компьютерах) объекты.
Привязка сообщения к соответствующей функции происходит на этапе выполнения.
Язык Objective C поддерживает работу с метаинформацией — так, на этапе выполнения можно узнать класс объекта, список его методов (с типами передаваемых аргументов) и instance-переменных, проверить, является ли класс потомком заданного и поддерживает ли он заданный протокол и так далее.
NeXT
В 1986 году Кокс опубликовал книгу Object-Oriented Programming, An Evolutionary Approach, в которой разместил описание своего языка программирования, разобрал проблему повторного использования кода и указал преимущества Objective C при ее решении. Лав и Кокс также создали компанию Productivity Products International (PPI), который должен был помочь монетизировать компилятор Objective C с библиотеками классов. Далее фонд был переименован в StepStone.
В 1988 году компания NeXT Software лицензировала язык Objective C, усовершенствовала его библиотеки и добавила новые – AppKit и Foundation Kit. На их основе позднее была создана среда разработки NEXTSTEP.

В 1992 к усовершенствованию языка и компилятора подключились разработчики проекта GNU в рамках проекта OpenStep. С тех пор GCC поддерживает Objective C.
Не добившись успеха на рынке в качестве производителя компьютеров, компания NeXT переключило все свое внимание на создание и продажу средств разработки ПО.
20 декабря 1996 года компания Apple купила NeXT Software, а среда разработки NEXTSTEP стала основной средой разработки для будущей основной версии операционной системы Apple — OS X.
После покупки NeXT, Apple взяла их SDK (компилятор, библиотеки, IDE) за основу для своих дальнейших разработок. IDE для разработки кода получила название Xcode, а для GUI – Interface Builder. Фреймворк Cocoa для GUI разработок (и не только) на сегодня является наиболее значимой средой разработки программ на Objective C.
В 2007 году компания Apple презентовала обновленную версию языка и назвала его Objective C 2.0, данная версия языка является актуальной в настоящее время. Используется в разработке Apple OS X, iOS.
Swift
В 2014 году компания Apple представила новый язык программирования – Swift. Он стал самым быстрорастущим языком программирования в истории.
«С открытием исходного кода Swift разработчики всего мира могут вносить свой вклад в этот язык программирования и делать его доступным на новых платформах, — сказал тогда Крейг Федериги, старший вице-президент Apple по программному обеспечению. — Эффективность и простота Swift дадут молодым программистам стимулы к обучению, к тому же теперь они смогут распространять свои идеи повсюду: от мобильных устройств до облачных систем».

Создатель языка Swift – Крис Латтнер. Он пришел в Apple в 2005 году. Там он занимался разработкой LLVM. Apple использовала LLVM для того, чтобы изменить способ использования Objective C при создании приложений.
LLVM (Low Level Virtual Machine) — это универсальная система анализа, трансформации и оптимизации программ или, как её называют разработчики, «compiler infrastucture».
Крис Латтнер курирует все инструменты разработчиков Apple: все, с помощью чего создаются программы для телефонов, планшетов и компьютеров Apple, как сторонними разработчиками, так и инженерами компании. Будучи аспирантом университета штата Иллинойс, он создал своего рода средства для разработчика под названием LLVM, которые сегодня лежат в основе Xcode.
Латтнер также использовал LLVM в качестве основы для Swift. Эти два продукта специально были созданы для работы в тандеме.
Над Swift он начал работать летом 2010 года. Латтнер держал это в секрете полтора года. Он создавал Swift в свободное от основной работы время.
Через полтора года он рассказал о проекте топ-менеджерам Apple. Высоко оценив работу Латтнера, они направили ему в помощь нескольких разработчиков. Однако проект был все еще окутан ореолом таинственности. Даже люди, косвенно принимавшие участие в создании языка и помогавшие Крису, были сильно удивлены, над чем именно он работал. Еще через полтора года проект Латтнера попал в список главных направлений компании, а команда разработчиков существенно расширилась.
По мнению Apple, язык Swift имеет все шансы изменить ИТ-индустрию.
2 июня 2014 года компания выпустила тестовую версию для сторонних разработчиков и программистов. Apple позиционирует это язык как более быстрый и эффективный способ создания программ для iPhone, iPad и Mac.

Расширение аудитории
Языку программирования необходимо несколько лет, чтобы стать популярным хотя бы в узких кругах энтузиастов. Достаточно показательна ситуация с языком Go, который компания Google представила еще в 2009 году. Над Go работали лучшие умы (Кен Томпсон и Роб Пайк), однако и по сей день прикладываются немалые усилия для его популяризации. Однако Apple делает все, чтобы Swift стал исключением и последовал примеру языков Java и C# в 1990-х и начале 2000-х соответственно.
Swift создан для среднестатистического программиста. На языке можно писать даже самые простые приложения, а наделенный довольно умными инструментами, язык предлагает эффективный способ учиться написанию самостоятельно. Но главная причина будущей популярности языка кроется в другом. Сотни тысяч разработчиков сегодня создают приложения для устройств Apple, используя Objective C. Устройства Apple пользуются большой популярностью, а значит эти разработчики продолжат создавать для них приложения, но уже на Swift. По мнению Apple, он значительно лучше и эффективнее, чем Objective C.
3 декабря 2015 года компания открыла исходный код Swift. Всемирное сообщество разработчиков — от создателей приложений до компаний и учебных заведений — может развивать Swift и оптимизировать язык, чтобы сделать его доступным на новых вычислительных платформах.
«Не было никакого реального стимула использовать Google Go» — говорит Пол Янсен, который отслеживал прогресс различных языков программирования в течение около пятнадцати лет. «Swift отличается наличием стимула».
В рейтинге TIOBE Swift занимает 14-ю позицию. За год он поднялся на 3 позиции. Язык Go переместился с 95 позиции на 20, что очень впечатляет. А Objective C опустился с 6 места на 15. Таким образом, можно сказать, что Swift технически обошел своего предшественника.

Сегодня на GitHub, популярном хранилище разработок с открытым исходным кодом, более 2500 проектов используют Swift.
Swift – это не просто язык, это язык, который тесно связан со всем, что требуется разработчику для работы. Сюда входит не только интегрированная среда разработки, но и многие другие инструменты (например, отладчик), которые уже знакомы каждому разработчику Apple.
Swift быстр (скорость реализации некоторых алгоритмов в 3,9 раза больше, чем на Python) и лаконичен (разработчики избавились от многословности Objective C). Ещё одно важное нововведение — это возможность писать код и видеть результаты в режиме реального времени.
До этого на протяжении долгого времени процесс создания программного продукта и сам продукт были разделены, и из-за этого программисты должны были тратить много времени на проверку и оптимизацию кода. В Swift они могут вносить поправки и сразу видеть результат. Это значит, что разработчики смогут быстрее проверять в деле свои концепты и в целом быстрее создавать приложения.
P.S. Apple не первая компания, которая выпустила новый язык программирования в недавнем прошлом. Это уже сделали Facebook, Google и Mozilla. К чему это приведет — покажет время.
- swift
- objective c
- go
- apple
- история языков программирования
- smalltalk
- объектно-ориентированное
- разработка по
Swift не нужен?
Не перестаю задаваться вопросом — какие у Apple планы на Swift и Objective-C? Когда в 2014 году появился Swift, его создатель Крис Латтнер утверждал, что эти два языка смогут сосуществовать бесконечно долго. Из почтовой рассылки пользователям Xcode:
3 Июня 2014
McLaughlin, Michael P.
Кто-нибудь знает, действительно ли Apple собирается прекратить поддержку С и С++? Fortran уже не поддерживается, хотя осталось еще много кода на Fortran, и сравнительно нового, как в MultiNest.
Пожалуйста, скажите, что это не так. Не все считают, что «опытные пользователи» — это те, кто просто создает полнометражные мультики. Многие из них ученые и инженеры.
Здравствуйте, Michael,
Мы не строили планы на что-либо подобное. Swift — это просто новый вариант разработки под платформу. Мы не собираемся прекращать поддержку ни C, ни C++, ни Objective-C. Если вы разрабатываете на одном из этих языков, можете свободно продолжать его использовать.
Оригинальный текст письма
> On Jun 3, 2014, at 5:45 AM, McLaughlin, Michael P. wrote:
> Does anyone know, for real, if Apple intends to stop supporting C and C++?
> That’s what it sounded like. They already do not support Fortran even though
> there is a *lot* of Fortran code out there, even fairly new code like MultiNest.
>
> Please say it isn’t so. Not all of us consider “power users” to be just those
> who create feature-length cartoons. Many are scientists and engineers.
We have no plans to do anything like that. Swift is a new option for developing
on the platform. We have no plans to drop C, C++ or Objective-C. If you’re
happy with them, please feel free to keep using them.
Дело в том, что в это никто не верит. Крис Латтнер уже давно покинул Apple, и если его утверждение окажется ложным, он не сможет принять критику от лица компании. В целом разработчики согласились на том, что Apple в конечном итоге откажется от Objective-C, и Swift станет единственным языком «первого класса» для разработки Cocoa-приложений. Слова «языком первого класса» имеют значение, потому что нет никаких оснований для прекращения поддержки компилятора для Objective-C или его удаления вообще. Компилятор поддерживает многие языки программирования, в том числе малоиспользуемые и старые. Так что утверждение Латтнера может быть формально истинным, но не в этом дело. Вопрос в выборе языка для разработки Cocoa-приложений под iOS и macOS.
Сообщество разработчиков, вероятно, право. Я согласен, что Objective-C и Swift не могут продолжать сосуществовать неопределенное время. Однако, я не так уверен, что будущее за Swift. Что, если это так? Этому варианту развития событий я бы и хотел посвятить эту статью. Во-первых, позвольте рассказать, почему Swift и Objective-C не могут мирно сосуществовать.
Новая надежда?
Ни Swift, ни Objective-C почти не используются за пределами платформ Apple. Это может поменяться в будущем, но на данный момент это факт. Так что если вы хотите разрабатывать приложения под платформы Apple, вам нужно изучить какой-либо из них, либо оба. «Какой именно язык изучать?» — довольно трудный вопрос для новичка. Если брать один язык, то стандартным советом будет Swift. Хотя я не согласен с ним, но признаю, что он стандартен. Умные головы предложат изучать оба языка. Но тут кроется загвоздка. Если нужно осваивать оба специфичных для платформы языка лишь для написания приложений, Apple-платформы теряют свою привлекательность для разработчиков. Swift понравился разработчикам из-за своей «современности» и «привычности», нежели Objective-C. Но если все равно нужно учить Objective-C, то в чем преимущество? Сторонние разработчики приняли Swift, гм … быстро (в оригинале тут получился каламбур, Swift = «быстро» — прим. пер.) — Apple сказали прыгнуть — они прыгнули. Как Аполлония в «Озеро Миннетонка». Swift стал очень популярным. Это вызвало огромный спрос на Swift-ресурсы. В почтовых рассылках, форумах, блогах, Stack Overflow, твиттере, да везде, — разработчики хотят знать о Swift и обсуждать его. Swift повлиял на техническую книгоиздательскую индустрию. Даже на рынок труда повлиял — многие компании намеренно, или из-за моды на язык, или просто из-за безграмотности, нанимают только Swift-разработчиков. Многие разработчики под платформы Apple не знают Objective-C. И многие Objective-С-разработчики берутся использовать исключительно Swift, причем до такой степени, что начинают забывать Objective-C и испытывают трудности, если приходится снова к нему возвращаться. Увлечение Swift, спрос на него среди разработчиков угрожают заглушить Objective-C. Эти два языка могут сосуществовать «официально» в сознании Apple, но могут ли они сосуществовать неофициально в чьем-либо еще? Могут ли приводиться двойные — на каждый язык — письма, блоги и вики-страницы? Что насчет опенсорсных проектов — Objective-C или Swift? И, если рынок труда движется почти исключительно к Swift, у разработчиков нет другого выхода, как идти в этом же направлении.
Империя наносит ответный удар
Судя по вышеуказанным аргументам, Objective-C обречен. Все больше разработчиков предпочитают Swift. Однако не все потеряно, потому что не разработчики управляют платформами Apple. Единственное место, где Swift еще не доминирует, это, как бы иронично ни звучало, сами Apple. Компания очень медленно осваивает Swift. К настоящему времени Apple внедрили удивительно мало Swift-кода. Хороший анализ этого можно найти в одном блоге. Было предложено несколько объяснений — многие могут называть это извинениями. Например, фреймворки Apple не могут использовать Swift, потому что он еще не достиг ABI-стабильности (или даже source-стабильности, если уж на то пошло). Каким бы ни было объяснение, факт остается фактом: внутренняя кодовая база Swift у Apple относительно крошечная, в то время как база Objective-C, скорее всего, самая большая в мире.
Если Apple придется отказаться от одного языка прямо сейчас, то от какого именно? Отказ от Swift будет чрезвычайно болезненным для сторонних разработчиков. С другой стороны, для самих Apple это пройдет почти незаметно — слишком мало Swift-кода придется конвертировать в Objective-C. Разумеется, Apple приложили немало усилий в Swift, особенно в отношении Xcode, однако, это невозвратные затраты. Apple не будут кидать денег на ветер. В Objective-C тоже было вложено немало, и эти затраты даже более невозвратны, чем у Swift. Значение имеет не цена, которую уже заплатили, а цена, которую придется заплатить в будущем. Apple ничего не имеют против невозвратных затрат. По слухам, они вложили огромную кучу денег в автомобильный проект, по которому еще ничего нет, и что он был по большей части отложен.
Apple могут переписать весь свой Objective-C-код на Swift, если захотят. Конечно, у них есть на это ресурсы. Объем ликвидных активов, которыми они владеют, просто ошеломителен, беспрецедентен в истории. Тем не менее, их нынешняя корпоративная культура предполагает, что они не могут или не будут выполнять это преобразование. За этим стоит несколько факторов. Во-первых, Apple перешли на годовой цикл выпуска для всех своих основных версий ОС. Действительно, по сообщениям, компания ударилась в Agile-философию разработки ПО. Такой подход оставляет слишком мало времени для полных переделок. И мы уже видели, как качество идет на спад, а функциональность теряется, когда Apple переписывает технологию или приложение с нуля.
Во-вторых, Apple гордятся тем, что нанимает «лучших» инженеров. Я знаю много специалистов как из Apple, так и нет, поэтому считаю это мифом. Но независимо от того, правда это или нет, это точка зрения компании, и, следовательно, вряд ли они смогут нанять огромное количество людей и бросить все ресурсы в перезапись Objective-C-кода.
В-третьих, опираясь на предыдущие моменты, скажу, что количество знающих Objective-C снижается. Даже если Apple захотят перевести кучу людей на эту задачу, где они их найдут? Если нужно переписать Objective-C в Swift, естественно, понадобятся специалисты, понимающие оба языка, без знания Objective-C вся затея превратится в катастрофу.
Внутренние исследования Apple также указывает, что если бы Софи пришлось выбирать (означает тяжелый выбор — прим.пер.) между двумя языками сегодня, то остался бы точно не Swift. Если вы сторонний разработчик, полностью окунувшийся в Swift, эта мысль, как минимум, должна вас напугать. И спросите себя, если сегодня маятник качнется в этом направлении, сколько времени должно пройти, и что должно произойти, чтобы он качнулся обратно? В какое время, в каком году для компании будет более болезненным отказаться от Swift, нежели от Objective-C?
Возможно, вы сейчас ворчите, мол, Apple не может так предать разработчиков, отказавшись от Swift. Как вообще руководителям Apple спится по ночам? Подозреваю, на матрасах, начиненных наличкой. Они не станут думать дважды. Они даже могут хвалить себя за смелость. Если вы посмотрите историю взаимоотношений Apple с разработчиками, то увидите целую цепочку отказов в поддержке, разочарований, страданий и несдержанных обещаний. Сборщик мусора в Objective-C, 64-битный Carbon, интерфейс Cocoa-Java, Yellow Box для Windows, Dylan. Нужно ли продолжать? Я мог бы. Евангелисты Apple скажут вам, что Swift — лучший язык программирования, а затем передумают и заявят, что они всегда были против Swift.
Приквелы
Когда Apple решили создать Swift, каков был их план? Я вижу три варианта.
- Они действительно намеревались поддерживать оба языка какое-то неопределенное время.
- Планировали в конце концов отказаться от Objective-C и перейти на Swift, во что и верят разработчики.
- У них не было конкретного плана, да и вообще не были уверены, что Swift даже выстрелит.
Если действующим был второй план, я бы очень хотел, чтобы Apple в открытую его выразили. Сообщение от Латтнера, как минимум, вводит в заблуждение. Если Swift — будущее, так почему бы не быть откровенными с разработчиками, не делиться с ними своими планами, чтобы те смогли подстроиться под них? Неопределенность — худшее, что может быть в этом отношении. Мы сможем согласиться, что Swift — наше будущее, если у нас не останется выбора. Но если Swift — выбор Apple, и они кормят нас иллюзиями, что выбор все еще есть, тогда некоторые из разработчиков могут сделать неправильный выбор, что губительно для всех.
Я считаю, что верен третий вариант. Я знаю, многие люди думают, что Apple работают в соответствии с каким-то грандиозным, секретным, мегабольшим планом. Есть ли у Apple долгосрочные планы? Несомненно. Являются ли эти планы конкретными? Сомневаюсь. В технической сфере вы можете делать долгосрочные планы, но не рассчитывайте, что сможете им придерживаться. Технологии меняются… быстро. Вам надо быть гибкими (не как Agile, а просто гибкими). Вы должны уметь реагировать на то, что делают ваши конкуренты. Например, уход Леттнера — было ли это в планах Apple? Планы меняются. Они должны меняться. Сторонние разработчики сразу же набросились на Swift, но Apple также должны были учесть возможность того, что он пройдет незаметно для них. Надеясь на лучшее, планируй худшее.
Изгой-один
По общему мнению, проект «Swift» был секретным даже внутри Apple. О нем знали лишь несколько избранных. Когда о нем объявили в открытую, для большинства инженеров Apple это стало такой же неожиданностью, как и для разработчиков. Сотрудники Apple оказались не готовы для этого. И это представляет собой самую большую проблему для Swift: внутренние конфликты между командами разработки в Apple. Команда-за-Swift с поддержкой в лице руководства преподносят Swift как будущее разработки приложений Apple. Но Команда-за-Swift не может просто так отмести настоящее и поставить на его место будущее как установленный факт. Настоящее для Apple — Objective-C. Много Objective-C. Десятилетия Objective-C, накопившиеся еще до покупки NeXT. Вся кодовая база Objective-C не может просто так исчезнуть, как по мановению волшебной палочки. Вы представляете Swift группе команд Apple, которые ограничены как во времени, так и в ресурсах, все, что они сделают — пошлют вас к черту. Им может понравиться сама идея, но WWDC близко и нужно выполнить кучу работы. Может быть, через год… Или через два.
Как Apple может согласовать эти конкурирующие интересы? Они хотят закрепить будущее за Swift, но также есть тонна Objective-C-кода, и они хотят продолжить свою гибкую разработку ПО, при этом нанимая исключительно лучших инженеров. Да еще и поддерживать качество ПО. (Надеюсь, можно предположить, что там все-таки заботятся о качестве.) Чем-то придется пожертвовать. Между тем, сторонние разработчики будут предъявлять бОльшие требования к ресурсам Swift. Описания API, вероятно, в значительной степени автоматизированы, так что двойной стек не будет большой проблемой, но разработчикам на Swift потребуется документация и примеры кода. Если официальная позиция Apple состоит в поддержке обоих языков, они пишут двойную документацию и двойные примеры кода? И как много усилий они вкладывают в обновление старой Objective-C-документации?
Какова реакция сообщества на эту проблему? Люди, считающие, что Apple откажется от Objective-C, — как вы думаете, как они с этим справятся? Некоторые предположат, что Apple откажутся от внешнего использования Objective-C, но продолжат использовать его внутри компании. Однако, я думаю, что эти люди недооценивают проблему. Учитывая объем кодовой базы Objective-C и ограничения, с которыми Apple работают, переход на Swift действительно затянется. По-вашему, как долго компания будет поддерживать все инструменты для Objective-C? Если ваш ответ не 5 лет, не 10 лет и даже не более 10 лет, я думаю, вы не представляете объема всей задачи. Для меня кажется крайне маловероятным, что Apple будет выделять отдельные ресурсы для разработки и поддержки внутренней версии Xcode, внутренних Objective-C API, внутренней Objective-C-документации (всем нужна документация) и т. д. И еще раз, если бы компания официально отказалась от Objective-C, количество Objective-C-разработчиков падало бы еще более стремительными темпами, чем сейчас, так что где вообще Apple собирается найти людей для поддержки кодовой базы в будущем?
Эпизод C
Позвольте опровергнуть возможные контраргументы к вышеуказанным мной. Контраргумент состоит в том, что Apple и так тянут двойной стек технологий: Objective-C и C. Foundation и Core Foundation. Поэтому добавление еще одного языка не является чем-то новым и неизведанным. Это возражение на первый взгляд кажется убедительным, но тут есть брешь. Да, Objective-C и C являются двумя разными языками, но провести аналогию со Swift нельзя, потому что Objective-C — это, по сути, надстройка над C. Если вы изучаете Objective-C, и изучаете хорошо, значит вы знаете и C тоже. Не имеет значения, что многие берутся сначала за C, а потом за Objective-C. На самом деле, я шел именно по этому пути, и советовал бы следовать ему и другим. Но изучение C и затем Objective-C — не то же самое, что учить два языка программирования. Фактически, это попросту двухэтапное изучение Objective-C. Все, что вы узнали о C, применимо и к Objective-C. Это просто работает, так сказать. Но Swift это не касается. Конечно, есть некоторые пересечения, потому что Swift был разработан людьми, оперирующими Objective-C, но ни в коем случае ни один из них не является надстройкой над другим. Swift и Objective-C несовместимы гораздо хуже, чем, скажем, C++ и C, которые весьма близки, но не совсем совместимы.
Кроме того, C не является языком разработки приложений под iOS и macOS. Можете ли вы создать приложение на чистом C? Возможно, но, конечно, не легко. API для разработки на C был не Cocoa, а, скорее, Carbon, а от Carbon Apple в значительной степени отказались. Существует несколько поддерживаемых API для C в Apple-платформах, но все же C не так близок к разработке iOS- и macOS-приложений, как Objective-C и Swift.
Какая-то там месть
Это лишь мои подозрения, но мне кажется, что Apple не ожидали, что Swift так быстро станет популярным. Вся эта стратегия имела бы больший смысл, если бы Swift медленно развивался в течение долгих лет. Двойной стек выгоден, если разработчики распределены на два лагеря примерно равномерно. У Apple и сторонних разработчиков было бы достаточно времени, чтобы переписать существующий код с Objective-C на Swift. Swift может быть нашим будущим, может быть единственным языком для разработки, но это отдаленное будущее. Может оказаться ошибкой в планировании или игрой воображения, что Swift может внезапно подавить Objective-C в мышлении разработчиков. И теперь Apple столкнулась с трудным выбором. Как они справляются с неожиданной популярностью Swift за пределами компании, когда внутри нее к нему еще не готовы?
Я подозреваю, что Apple отступятся от Swift. Как я думаю, отставка Леттнера делает эту возможность еще более вероятной. Многие разработчики положили все свои ресурсы на Swift. Это могло казаться неплохим вложением в то время, и возможно, оно окупится. Вероятно, это окупится. Что, если нет? Вдруг произойдет смена управления, или просто изменятся настроения внутри управления? Что если Apple внезапно решит, что их внутренние ограничения труднее преодолеть, чем они ожидали и смена языка невыгодна? Можете ли вы исключить эту возможность? Боюсь, многие не готовы к настолько жестокому миру. Если это произойдет, будет много слез и криков. Но не среди разработчиков Objective-C, которые будут смеяться и веселиться, как будто на дворе 1999. В крайнем случае, 2001.