четверг, 17 июля 2014 г.

Swift, Объективно

Новый язык от Apple под названием swift в первую очередь призван стать альтернативой Objective-C.
В начале лета, на своей ежегодной конференции разработчиков, Apple представила новый язык для развития на Mac и платформы IOS. Язык называется Свифт, он призван заменить Objective-C в качестве основного языка для разработки на Apple. Несмотря на то что я являюсь поклонником новых языков, особенно тех, которые приносят новые возможности в программирование, я всеже, врядли в восторге от Свифт, за исключением того, что она заменяет громоздкий язык, который должен был отправлен на отдых  много лет назад . Только в этом смысле Свифт действительно приветсвуется и, безусловно, будет быстро принят разработчиками Apple.
Язык проектировался и разрабатывался в секрете. Этот чрезвычайно примечательно: я не знаю ни одного человека который мог бы хоть что то рассказать про Swift или о том что Apple представит на своей конференции новый язык. Такая секретность является любопытной для языка который назодится в процессе разработки, даже с учетом того что это Apple: Почему бы не получить отзывы от разработчиков о желаемом синтаксисе и семантике на начальной стадии по работе над языком? Общение с заинетерсованными лицами является предпочтительным способом развития для языков: D, Go и Rust создаются и развиваются с учетом отзывов от сообщества первых последователей и тестировщиков. По факту возможность отзывов собственно и является первопричиной создания подобных сообществ. В случае с Swift, это не только не соответствует политике компании но и в некотором смысле это не нужно Apple так как она не принимает на себя никаких рисков  связанных с новым языком.
Swift просто объединяет возможности существующие в других популярных языках, и генерирует бинарный код с помощью компилятора LLVM, принципы которого мы объясняли год назад. Крис Латтнер, один из ключевых разработчиков Swift и LLVM написал однозначно о заимствованиях из Objective-C, Rust, Python, Haskell, C# и Ruby. В этом смысле получилось языковое ассорти. Приемуществом данного похода является то что все эти вещи программистам знакомы и не потребуется излишенго времени на его изучение, обратная же сторона медали этого (как мы хорошо знаем в случае с С++) это большой риск досадных ограничений, которые будут накладыватся на язык в процессе развития, чтобы соответствовать новым требованиям.
Как было сказано ранее, мне понравились следующие возможности Swift
·         Автоматическое управление памятью
·         Безопасность (переменные всегда инициализируются перед использованием, для целочисленных переменных и массивов предусмотрена проверка на переполнение)
·         Замыкания
·         Дженерики
·         Выведение типов
·         Базовые паттерны функционального программирования
Мир меняется и все дальше уходит от идиом применявшихся в C и C++, которые позволяли разработчику делать практически любые даже самые небезопасные операции, и вся ответственность за результат исполняемого кода ложилась соответственно на него. Сложность нынешних приложений делают пракитчески невозможным разработку в таком ключе, поэтому сейчас применяются автоматические средства освобождения ресурсов, управления памятью и проверки основных системных флагов (как например проверка на достижения конца массива). Swift имеет в своем арсенале все эти современные средства.
Включение в язык замыкний (иначе изменстные как лямбда выражения), выведения типов и базовой поддержки функционального программирования вполне соответствует существующим трендам. Эти возможности не так давно появились и в Java 8, Groovy, Go, Ruby и Rust. Однако, отсутствие возможностей параллелизма в Swift идет вразрез с последними тенденциями языков. Поддержка может быть добавленна позже с использованием подключаемых библотек, однако в настоящий момент отсутствие такой функциональности вызывает недоумение и даже тревогу.
Еще большей проблемой, нежели отсутствие паралелизма, является тот факт что Swift проприетарный и закрытый язык: он всецело контролируется компанией Apple и его открытой реализации не существует. Это является проблемой по нескольким причинам, наиболее важной из которых является то, что Apple никодга не славилась свими языковыми инструментами. Возможности Objective-C весьма посредственны. Язык развивался за счет неказистых языковых настроек. Вместо того, чтобы удовлетворять потребности разработчиков, Objective-C добавлялись функции, которые представители Apple добавляли для собственной целей – вне зависимости от того, насколько неуклюжими они были. По этой причине, разработчкики платформ Mac и iOS обязательно воспользуются возможностью перейти на использование нового языка в рамках существующих проектов. (Это отличаетя от эволюции других крупных языков,  например C #, который неуклонно улучшается под ловким руководством Microsoft.)
Без сомнений Swift ждет светлое будущее. Несмотря на то что он не является чем то феноменальным, несомненно это большой шаг вперед для разработчков Objective-C. Но к сожалению Apple продолжает использование закрытых систем и не дает шанс сообществу разработчиков на продуктивный диалог.