Swift — нововведения

image

Привет, Хабр!

Я не сомневаюсь, что многие из нас вчера смотрели презентацию WWDC 2014 от Apple. Были представлены новая операционная система OS X Yosemite, а так же iOS 8. Но главное, чем наверное взбудоражило Apple программистов во всем мире, так это новым языком — Swift!

Swift является новым инновационным языком программирования для Cocoa and Cocoa Touch с еще более кратким и выразительным синтаксисом, с помощью которого приложения пишутся молниеносно. Это делает написание кода интерактивнее и веселее, и работает бок о бок с Objective-C. По словам Федериги, некоторые функции Swift работают быстрее, чем в других объектно-ориентированных языках: например, сортировка сложных объектов происходит в 3,9 раза быстрее, чем в Python, и почти в полтора раза быстрее, чем в Objective-C.

Хотелось бы выделить несколько главных нововведений:

Переменные и константы:



Тип присваивается автоматом:



Сравнение имен методов:



Вызов методов:



Условие if:



ENUM:



На этом пока все.

Делимся своими мнениями.
Поделиться публикацией
Похожие публикации
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 264
  • +98
    Стало более читабельно, как мне кажется.
    • +7
      Очень странный комментарий. Как впрочем и сама статья. Создаётся такое впечатление, что вышла новая версия Objective-C, в то время как на самом деле родился принципиально новый язык.

      По набору фич, позиционированию и т.п. он больше всего напоминает язык D, из которого выпилили метапрограммирование (одна из главных фич D кстати), исключения и поддержку многопоточности. Ну и плюс добавили несколько мелких вкусностей типа pattern matching и extensions. И всё это в оригинальном и довольно лаконичном синтаксисе.

      Естественно это далеко не идеал, но в любом случае вышел отличный язык, поинтереснее тех же Java и C#. А уж на фоне такого дикого ужаса, как Objective-C, Swift должен казаться просто манной небесной.

      P.S. Я сам мягко говоря не поклонники компании Apple. Но в данном случае нельзя не признать, что у них вышел очень интересный и нужный продукт.
      • +16
        Apple сделали более современную замену ObjC, но не более.

        Swift по куче признаков не претендует ни на какие ниши, кроме разработки UI под iOS:
        Для серверного кода — нет GC, нет управляемого рантайма, нет метапрограммирования.
        Для игрушек — нет (и скорее всего не будет) нормальной кросс-платформенности, да и недостаточно он низкоуровневый.
        Ядро ОС и драйвера писать — опять же недостаточно низкоуровневый
        Как скрипт-язык — недостаточно гибок, и заточен под компиляцию

        Остаются десктоп-приложения под iOS и OS X. И для этого он с виду весьма неплох, особенно учитывая насколько страшен ObjC по сравнению.

        Короче радоваться и плясать стоит тем, кто пишет UI под маки. Остальным — просто порадоваться за коллег, и идти мимо.
        • +2
          Согласен с разбором по нишам, но не согласен с начальными тезисами

          1. Да, это замена Obj-C, но весьма существенная. Т.к. если раньше убогий Obj-C вызвал лишь усмешку у народа с других платформ, то теперь данный язык вполне может оказаться поприятнее базовых инструментов на других платформах. А это существенно меняет расклад.
          2. Не понял как это у вас из логичного «десктоп-приложения под iOS и OS X» (с чем я согласен в общем то) вышло " разработки UI под iOS" — это как бы совсем разные вещи.
          3. Область «большая часть приложений под OS X и iOS» — это мягко говоря не маленький кусочек рынка. О таких объёмах код для ядра ос/драйверов или даже серверный код может только мечтать.

          А с итогом опять же согласен — лично я тоже просто прохожу мимо.
          • 0
            Т.к. если раньше убогий Obj-C вызвал лишь усмешку у народа с других платформ
            Если бы. У меня вызывал зависть, когда мне приходилось писать на плюсах.
            Но свифт выглядит определенно лучше.
          • +1
            нет GC

            Есть значительно лучший ARC

            нет управляемого рантайма

            Как нет??

            да и недостаточно он низкоуровневый.

            Компилируется в LLVM же. Куда ещё низкоуровнее?
            Прозрачно линкуется с Си, чего ещё желать?

            нормальной кросс-платформенности

            Зарелизят открытый компилятор ведь — куда кроссплатформенней то?

            Ядро ОС и драйвера писать — опять же недостаточно низкоуровневый

            Прозрачно линкуется с Си и плюсами, что мешает писать и драйвера и ядро?

            Как скрипт-язык — недостаточно гибок, и заточен под компиляцию

            Показали же лайв-кодинг, что ещё гибкого надо?

            учитывая насколько страшен ObjC

            Сугубо субъективеное мнение. Сколько лет на ObjC работали?
            • –5
              Сколько лет на ObjC работали?


              Искренне любить objC могут только пассивные гомосеки. Не пробовал.
      • +2
        Я так и не понял как в свифте обрабатываются ошибки, там исключения? В книге которую выпустили сразу после релиза я что-то ничего по этой теме не нашел.
        • –4
          Exceptions? В Obj-C исключения не используются для flow-control приложения, как, например, в Java. Этому есть множество причин, которые описаны в документации. Соответственно практически нигде try catch не должен использоваться. Могли и выпилить, по причине «ибо нефиг» — сам видел, что приходящие из других языков программисты начинают с этими try-catch лепить. Но как-то это очень уж дерзко с их стороны.

          Способ, насаждаемый Apple для обработки ошибок — передавать указатель на NSError.

          Способ, обычно используемый — возвращаем nil.
          • +4
            Я думаю отсутствие исключений объясняется проще — библиотеки будут старые, а они на это не заточены.

            То что исключения гораздо удобнее возврата null из методов — известный и проверенный факт. Просто в данном случае — не судьба.
            • +4
              Хм? Старые библиотеки сыплют исключения.
              Просто в Obj-C так принято, что если у нас «исключение» — то мы падаем, а не ловим: выход за пределы массива, вызов несуществующего метода… Таких вещей быть не должно. А те ситуации, которые к падению не приводят — не кидаем ексепшн, а возвращаем нил и дальше он спокойно гуляет по системе, которая изначально спроектирована с учетом, что практически все может оказаться nil'ом. Не Obj-Cшники как-то такой подход принимают во штыки.

              Important: You should reserve the use of exceptions for programming or unexpected runtime errors such as out-of-bounds collection access, attempts to mutate immutable objects, sending an invalid message, and losing the connection to the window server. You usually take care of these sorts of errors with exceptions when an application is being created rather than at runtime.
              If you have an existing body of code (such as third-party library) that uses exceptions to handle error conditions, you may use the code as-is in your Cocoa application. But you should ensure that any expected runtime exceptions do not escape from these subsystems and end up in the caller’s code. For example, a parsing library might use exceptions internally to indicate problems and enable a quick exit from a parsing state that could be deeply recursive; however, you should take care to catch such exceptions at the top level of the library and translate them into an appropriate return code or state.
              Instead of exceptions, error objects (NSError) and the Cocoa error-delivery mechanism are the recommended way to communicate expected errors in Cocoa applications. For further information, see Error Handling Programming Guide.

              И чего минусуют, писали бы. Наверное те самые «приходящие из других языков».

          • 0
            Сочетание tuple, pattern matching и optional в принципе может дать удобную картину… Хотя одна возможность исключений (автоматическое перекидывание сообщение об ошибке через длинный стек вызова) при этом всё равно недоступна.
          • +5
            Плохо, что вместо GC подсчёт ссылок. Банальное дерево, где узел ссылается не только на дочерние, но и на родительские узлы, и мы получаем структуру, имеющую все шансы остаться в памяти навечно.
            • 0
              Я так понимаю, что структуры данных можно писать и на более быстрых языках с ручным управлением памятью.
              • +12
                Проблема не в быстроте, проблема в циклических ссылках при возникновении которых весь граф объектов не будет освобождён. Дерево просто самый простой для понимания пример. Я лет десять назад на VB6 не раз обжигался на таких утечках.
                • –1
                  Ну так я ведь не зря упомянул ручное управление памятью.
                  • 0
                    Зря, т.к. в Swift управление памятью, очевидно, автоматическое. Как бы вы ни изворачивались в C или где-то ещё, циклические ссылки в Swift это не устранит.
                    • 0
                      Если дерево написано на Си, а объекты из Swift будут лежать уже внутри узлов, то о каких циклических ссылках идет речь?
                      • 0
                        Не про реализацию дерева как структуры идёт речь, а про вероятность получить циклические ссылки объектов друг на друга в описании бизнес логики.
                        Или вы предлагаете все взаимодействия объектов оборачивать в Си?
                        • 0
                          Я просто не сталкивался с работой с древовидными структурами в бизнес-логике без использования собственно отдельного класса, реализующего дерево. Скорее это неудачный пример, и придумать архитектуру с циклическими ссылками не сложно, сложнее придумать без них)
              • +7
                Там предлагается два варианта решения этой проблемы: weak references и unowned references.
                • +3
                  И то, и другое ведёт к потенциальным проблемам, а именно:
                  1) можно банально забыть поставить слабые ссылки где надо
                  2) трудноотлавливаемые ошибки времени выполнения, вылезающие когда объект по слабой ссылке становится недоступен.

                  GC в этом плане всё же существенно надёжнее.
                  • +2
                    Они решили, переложить эти проблемы на плечи кодеров. Тоже с «опциональными» переменными, теперь надо будет следить чтобы правильно и в нужном месте ее «распаковать». Зато решили рубишную проблему с nil'ами, добавили optional chaining, но опять же, проблема решена не в корне (nil не выбросили), а просто добавили удобный воркэраунд о котором надо всегда помнить.
                    • +1
                      Поясните, пожалуйста, какую проблему с nil-ами?
                      • +3
                        Например, user.subscription.plan.price, а у User'а нету вообще подписки, тогда user.subscription вернет nil, а nil.plan вызовет исключение NoMethodError, так как plan теперь не как метод объекта subscription, а как меторд nil'а. В rails есть хак, метод try, тогда это переписывается как: user.try(:subscription).try(:plan).try(:price). Тогда если на каком-то этапе цепи вызовов будет nil, все выражение вернет nil.

                        Либо используется NullObject паттерн, или, в случае с rails (когда можно), delegate.
                        • +1
                          Ну это же не проблема ruby, а проблема проектирования метода программистом. Эта проблема и в джаве возникает, и в любом языке, где функция может вернуть nil. А язык, в котором функция всегда возвращает только правильно инициализированный объект с правильным интерфейсом был бы довольно ущербен на практике, увы. Вот если бы NullObject встроили в язык (сделали бы возможность создавать объекты, которые приводятся к логическому false) — было бы здорово.
                          • +2
                            Да, как бы не проблема, но сам nil, может означать тонну вещей: у пользователя нету подписок, или подписки не подгрузились, или может пользователь вообще заблокирован и т.д. Сама суть nil'а логически зачастую может быть совершенно неясна. Вот выше пишут, что если какая-то ошибка, то в ObjC принятно возвращать NSError, но программисты забивают на это и возвращают nil. Так что сама концепция nil'а очень спорна.
                            • +1
                              Ну, есть же ещё Option<T>, или Maybe a
                              • +1
                                Вы не поверите, но в Swift как раз функция не может внезапно вернуть nil. Точнее, может, но тогда и тип возврата у нее будет optional, а не просто данный класс — и это нужно явно указывать.
                                • +1
                                  > Эта проблема и в джаве возникает, и в любом языке, где функция может вернуть nil.
                                  Вы начинаете понимать суть. :) Почему чувак, придумавший null, назвал его «ошибкой стоимостью в миллиарды долларов», и почему языки так стараются от него избавиться.
                                • 0
                                  Для этого же есть (.?) safe navigation operator или как он там называется?
                                  • 0
                                    Это мы о Руби, там нету. Зато в Groovy есть, и его перенесли в Swift как вариант, но суть в том, что полученный в результате nil ничего не сообщает о природе ошибки (или не ошибки :).
                                    • +5
                                      А не надо возвращать nil. Используйте ADT, то бишь в данном случае enum'ы:

                                      enum FooResult {
                                         case Success(Int),
                                         case PEBKACError,
                                         case SomeOtherError(String /*reason*/)
                                      }
                                      
                                      func foo(...) -> FooResult { ... }
                                      


                                      И при вызове паттерн-матчинг (который вызывающему придется написать, и, соответственно, как-то обработать все ошибки):

                                      switch foo (...) {
                                      case .Success(let result):
                                         ...
                                      case .PEBKACError:
                                         ...
                                      case .SomeOtherError(let reason):
                                         ...
                                      }
                                      


                                      Единственное, что здесь плохо — прокидывать придется вручную. Были бы полноценные монады — было бы проще (впрочем, исключения — это по сути и есть классическая error monad, которая неявно подсовывается во все типы).
                            • +13
                              GC не лишен своих недостатков. Видимо Apple хочет избежать «остановки мира».
                              • –7
                                Лишен. Многие реализации GC умеют удалять объекты с циклическими ссылками.
                                • +5
                                  Комментарий не читай — сразу отвечай :)
                                  • +1
                                    «Остановка мира» — это момент, когда GC решает освободить память, скрывающуюся за висячими указателями. Как нетрудно догадаться, это занимает некоторое время. Большое или нет — зависит от реализации GC и паттерна использования памяти приложением. Если бы у GC вообще не было недостатков, их давно начали бы пихать во встраиваемые системы на микроконтроллерах, где размеры оперативной памяти варьируются в широчайших пределах: от сотен байт до сотен килобайт.
                                  • 0
                                    Скорее всего причина банальнее — Apple хочет совместимости с их библиотеками, которые под GC не заточены.
                                    • 0
                                      GC отлично умеет работать с библиотеками, заточенными под подсчёт ссылок. Просто вместо освобождения памяти он освобождает ссылку, а дальше объект сам разбирается, в каком состянии у него счётчик. В дотнете так работа с COM реализована.
                                      • 0
                                        Apple сама недавно задеприкейтила GC, до этого он был в маковских приложениях. На самом деле ARC быстрее и в большинстве случаев позволяет не задумываться о том, когда объект освободится и т.п.
                                        • –1
                                          Когда же вы, шкеты, вырастете?
                                • +3
                                  для этого есть слабые ссылка(ключевое слово weak)
                                  • 0
                                    Описанная ситуация — ошибка программиста. Не надо так )
                                    • –1
                                      Это не ошибка, если есть GC.
                                      • +11
                                        Вам уже выше написали про weak. Не вижу смысла обсуждать ARC при сравнении Swift и Objective-C, ведь в Objective-C это работает так же. Так что для айос девелоперов это само собой разумеющееся, для остальных — ну, welcome to our world.
                                        • 0
                                          Сам по себе GC не спасает от ошибки, зависит от конкретной реализации алгоритма GC. Точно такая же проблема может и встретиться при GC, так что GC не панацея и тоже можно накосячить.
                                          • 0
                                            Под «GC» обычно подразумеваются tracing GC, которые все корректно работают с циклическими ссылками. Из не-tracing практических реализаций мне известен только подсчет ссылок, как в Obj-C и Swift — вот он, да, ломается — но это очень расширенное академическое определение GC.
                                      • 0
                                        А GC как такие структуры собирает? Определяет что дальше по коду ссылок на родительские ноды не будет?
                                        • +5
                                          А GC знает только о живых объектах, все остальные он считает мусором, поэтому если со стека ссылки на циклическую структуру не будет (ну и еще несколько условий в зависимости от типа GC, платформы и т.д.), то она автоматически будет считаться мусором.
                                        • +1
                                          На iOS и сейчас нет GC. Почти все перешли на ARC. Не исключено что сборщик мусора добавят в более поздних версиях рантайма.
                                          • +2
                                            Очень сомневаюсь, с учётом того, что относительно недавно они добавляли GC в Mac OS X и впоследствии отказались от него в пользу ARC.
                                          • 0
                                            Weak ptr в помощь. А непредсказуемый GC на свалку.
                                            А, уже написали
                                            • –1
                                              Я бы на самом деле комбинировал два подхода. Подсчёт ссылок для освобождения памяти по мере того как становится известно, что она не нужна + GC для сбора графов объектов с циклическими ссылками. Тогда и проблем нет с циклами, и мусора достаточно мало, чтобы GC отрабатывал быстро.
                                              • +3
                                                Громоздко получается. Проблема циклических ссылок слишком раздута. При наличии ARC, слабых указателей и Instruments всё не так страшно как малюют.
                                                • –1
                                                  Проблема в том, что о них надо помнить и обходить. А 90% мусора — одноразовые штуки, которые могли бы быть уничтожены сразу на выходе из процедуры.
                                                  • 0
                                                    А clang нам в помощь! Он умеет некоторые (не знаю сколько в процентах) места находить и предупреждает. Зато никогда нет непредсказуемых лагов в самое неподходящее время.
                                                    • 0
                                                      Возможно для тех, кто только начинает — это проблема, для остальных же просто рутина, такая же как помыть руки перед едой
                                            • –23
                                              Забавно то, что я даже еще ObjC не успел еще выучить, а тут Swift :))
                                              • +25
                                                C вами не согласовали? Упущение, да…
                                              • +27
                                                и где «инновации» в данном языке? в чем его фишка?
                                                • –16
                                                  инновация в том, что язык стал проще, быстрее и больше возможностей для разработки
                                                  • –5
                                                    По-моему, возврат к С (в плане синтаксиса). Разве что if без кавычек
                                                    • +6
                                                      О, уверяю Вас, изменения в языке намного существеннее, чем может показаться на первый взгляд.
                                                      • +15
                                                        Лично я ожидал увидеть это в статье.
                                                      • +14
                                                        И это радует (по крайней мере меня т.к. имхо синтаксис obj-c крайне отвратителен)
                                                        А так язык очень даже интересный, только не совсем понятно, там инкапсуляция есть? А то в доках не нашёл как задаются приватные\защищённые методы,
                                                        • +1
                                                          Инкапсуляции как таковой нет, точнее есть но фальшивая. Любой метод, который есть у класса можно вызвать, но обычно используют отдельные приватные интерфейсы, чтобы не показывать все методы наружу.
                                                      • +30
                                                        О, то есть переход от вырвиглазного синтаксиса Obj-C к нормальному, читаемому — это инновация?
                                                        • –4
                                                          Apple сделала новый язык для своей экосистемы по образу и подобию существующих решений. Уже только этим привлекаются новые разработчики на эту платформу.
                                                          • –2
                                                            Современный мир весь из себя кроссплатформенный… скажите, а язык ограничится маком?
                                                            • –6
                                                              Эм… Вы это серьезно?

                                                              Во-первых, вы давно пытались скомпилировать плюсовый код, написанный на VS, хотя бы под gcc?
                                                              Во-вторых, как вы думаете, что будет лучше работать: адаптированный под платформу код, или кроссллатформенная реализация алгоритма, учитывающая косяки каждой платформы?
                                                              В-третьих, Objective-C по статистике имеет в 2 раза большую долю, чем замечательный «кроссплатформенный» C++.
                                                              В-четвертых, как вы думаете, почему самый кроссллатформенный язык программирования java не компилируется в исполняемые файлы, а требует платформозависимую JVM?

                                                              Ну и так далее. В итоге кроссплатформенность это из разряда недостижимых парадигм.
                                                              • +4
                                                                Недостижимая парадигма? Да ладно.
                                                                configure && make && make install
                                                                • +16
                                                                  и куча #ifdef
                                                                  • +6
                                                                    вы забыли про N часов гугления почему в 4-ом уровне вложености makefile валится какая-нибудь ошибка. Или как у меня недавно было — падает компилятор с предложением отправить крешлог разработчикам.
                                                                  • +5
                                                                    Я бы на вашем месте осторожнее сопоставлял индекс TIOBE и долю языка. Корреляция количества поисковых запросов и доли отнюдь не очевидная.

                                                                    А что касается кроссборки. Ну я не знаю возьмите линуксовый софт — как то умудряются делать сборки под любую архитектуру. Вот прямо сейчас открыты chrome и firefox которые живут на куче различных платформ от андроида до винды. И все написно на c++
                                                                    • –2
                                                                      Я взял первый попавшийся рейтинг языков программирования. Вместо этого можно взять количество живых проектов на гитхабе. В любом случае для Objective-C весьма высока.

                                                                      И я не спорю, что есть большие проекты, написанные на плюсах, которые собираются на любой платформе. Но, как уже было сказано, это достигается большим количеством человеко-часов и #ifdef-ов. Возьмите нестандартный компилятор или банально измените конфиг у текущего, и тут же на вас повалится столько, что мама не горюй.
                                                                      • +2
                                                                        Лол. Есть большие проекты? UnrealEngine, CryEngine, idTech, Chromiun, Firefox, Photoshop, Blender, Visual Studio, Sublime Text и т.д. и т.п.
                                                                        Ну-ка назовите мне хотя бы несколько проектов такого же уровня на Obj-C.
                                                                        • 0
                                                                          А с чего вы собственно решили, что популярность и распространенность языка программирования связана как-то с наличием больших проектов?
                                                                          • +3
                                                                            Популярность и распространенность ЯП зависит от:
                                                                            1) Количества проектов на данном ЯП. Чем больше проект, тем больше в нем задействовано людей;
                                                                            2) Количества библиотек, доступной на данном ЯП.

                                                                            Ну а теперь сравните Obj-C и C++.
                                                                            • –4
                                                                              По таким критериям выйдет, что fortran и чистый C популярнее и распространеннее C++.

                                                                              И большое количество библиотек вообще в достоинства C++ пихать как-то странно. Каждый второй программист пишет свою STL, лишенную недостатков дефолтной реализации по стандарту.
                                                                              • +5
                                                                                Насчет Fortran'а сказать ничего не могу, а чистый C, очевидно, куда популярнее и распространеннее C++: Linux kernel, PostgreSQL, MySQL, PHP, Git, Maple и прочее, и прочее.

                                                                                Мне кажется, что Вы либо вообще никогда не работали с C++, либо это делали лет 20 назад. Одно из самых ключевых достоинств C++ в том, что на этом языке реализовано почти все, что может понадобиться в жизни. В мире C++ принято сначала искать уже готовую реализацию, и только потом, если ее нет, писать свою.
                                                                                Опять же, Ваша фраза о STL говорит о том, что о нынешнем положении C++ Вы знаете мало. Своя STL есть только в тех компаниях, которые начинали свою разработку до появления этой самой STL (либо на ее ранних версиях). Все разработчики уже давно используют STL из коробки, boost, poco и прочие либы.
                                                                    • +18
                                                                      1) Делаю это каждый день. Все нормальные плюсовики уже давно пишут кроссплатформенный код.
                                                                      2) Лучше будет работать качественный код, независимо от языка или платформы. Другое дело, когда мы выбираем язык, который поддерживается одной платформой, мы получаем продукт только для этой платформы. Хотим перенести — пишем все заново на чем-то другом, с новыми проблемами и багами (вы когда-нибудь пробовали поддерживать одно и тоже на разных ЯП?).
                                                                      3) За ссылку на Хабре на эту статистику пора уже бить палками по жопе. Это статистика поисковых запросов, она лишь говорит о том, что информацию по Obj-C пытаются искать чаще, чем по C++. Оно и понятно.
                                                                      4) Потому что специально был так спроектирован? Есть другие языки, которые вполне одинаково могут работать на разных платформах без виртуальной машины.
                                                                      • 0
                                                                        Во-первых, зачем?
                                                                        Во-вторых, что вы понимаете под «лучше»? Куча примеров разных яп, когда код работает просто одинаково в разных ОСях. Да, это сказывается на производительности (иногда), но чаще требуется просто и быстро написать, чтоб работало.
                                                                        В-третьих… ШТА? Причем тут С++? И почему, вы думаете, ява так популярна?
                                                                        В-четвертых, какая к чертовой матери разница, как именно запускается (например) ява-программа, если она делает то, что нужно и как нужно?

                                                                        От себя скажу: все эти ява-хейтеры радуются как дети, когда их любимый нетбинс (эклипс, пайчарм, sql-дивелопер etc), к которому они привыкли, нормально запускается и в другой ОСи.
                                                                        • 0
                                                                          Действительно, зачем портировать существующий c++ код под другой компилятор? Действительно, зачем использовать, например, intel-вский компилятор, если и так все работает?
                                                                          • 0
                                                                            Снова возникает немое «ШТА». Вопрос был не об этом… вопрос был о том, зачем надо запускать что-то, что писалось для одной ОС без прицела на другую? Если оно кроссплатформенное — тогда да. И потом — сейчас программы пишутся зачастую с прицелом именно на компилятор.

                                                                            Ну и само собой, остальные доводы — это так… то, к чему можно привязаться, заслуживает самого пристального внимания, правда?
                                                                        • +1
                                                                          Популярность языка никак не говорит о его качествах. ObjC — в общем-то, единственный полноценный способ писать приложения на iOS. Был бы Brainfuck вместо ObjC, писали бы на Brainfuck — да, тяжело и унизительно, но жрать тоже хочется.
                                                                          • +1
                                                                            Хватит писать за еду! Программисты мы или твари дрожащие?
                                                                  • 0
                                                                    Да сейчас чуть ли не каждый создатель очередного ЯП первым делом берёт курс на упрощение. Это вообще тренд такой: «MegaFucker — простой и удобный ЯП...», «libshitload — простая и удобная библиотека для рабтоты с...» и т.д. А потом выясняется, что этими простыми и удобными инструментами жутко неудобно делать сложные вещи, а для того, чтобы сделать «сложный и неудобный» инструмент", оказывается, надо приложить гораздо больше усилий.
                                                                  • +5
                                                                    В нем гораздо больше нововведений, чем перечислено в статье.

                                                                    Кстати, в iBooks доступна книга "The Swift Programming Language".
                                                                  • 0
                                                                    Автоматический вывод типов, по-моему, неплохая фишка, например.
                                                                    • +3
                                                                      Все современные языки умеют. Даже C++ научился.
                                                                • +3
                                                                  Было бы неплохо написать серию статей на русском, новичкам полезно, да и просто читать приятнее.
                                                                • –22
                                                                  да, так же движок Metal не дает покоя :)) будет очень интересно погамать в игры на таком движке
                                                                  • +9
                                                                    да, так же движок Metal не дает покоя :)) будет очень интересно погамать в игры на таком движке
                                                                    Это не движок.
                                                                  • 0
                                                                    И что вы ожидаете увидеть? Максимум, что изменится — некоторые игры будут работать чуть быстрее.
                                                                  • +3
                                                                    В Swift в качестве имен переменных можно юзать юникод, то бишь можно смайлы!
                                                                    • +3
                                                                      Можно использовать как обфускацию, а можно вложить все свои эмоции в исходный код^^
                                                                      • +3
                                                                        :( = function_that_returns_error()
                                                                        
                                                                    • +11
                                                                      Синтаксис напоминает JavaScript
                                                                      • –2
                                                                        Скорее go
                                                                        • +5
                                                                          Go + Python3 + ActionScript3
                                                                          • –4
                                                                            Я вообще почему-то PHP увидел…
                                                                            • +1
                                                                              На php мало похоже по сравнению с python.
                                                                              А увидели вы, скорее всего, потому что у автора статьи на 4 из 6 скриншотов выбран php для подсветки синтаксиса.
                                                                        • +3
                                                                          да, ECMA-подобное нечто :)
                                                                          • +1
                                                                            • +10
                                                                              Rust он напоминает.
                                                                              • +1
                                                                                TypeScript. Почти полное совпадение.
                                                                                • 0
                                                                                  Поддерживаю предыдущего оратора, очень похоже.
                                                                                • +2
                                                                                  Не знаю насчет синтаксиса (здесь всем кажется, что он напоминает его любимый язык, потому что многие современные языки в плане синтаксиса неотличимы), но судя по структуре и концепциям это язык группы ML.
                                                                                  • 0
                                                                                    Я не думаю, что язык с mutable by default (в частности, массивы и структуры) можно причислить к семейсту ML.
                                                                                    • –1
                                                                                      Логично, потому что чисто функциональный язык в промышленной разработке сейчас никому не нужен. Однако, есть некоторые вещи (типа let и спецификаторов mutable), которые явно текут оттуда.
                                                                                      • 0
                                                                                        Ну, let с таким же успехом мог прийти и из Scheme, например. Но в данном случае я думаю, что прямое заимствование синтаксиса было из ES6.

                                                                                        Спецификатора «mutable» я там нигде не вижу. Вы имеете в виду «mutating»? Но у него, опять же, очень ограниченная ниша (мутирующие методы структур и перечислений), к ML'ному «let mutable» имеющая мало отношения.
                                                                                  • +1
                                                                                    Обычный си-подобный синтаксис с традиционными уже улучшениями и корректировками, облегчающими парсинг (типа var/let перед объявлением переменных, func перед функциями и т.д.). По сути си-пободный синтаксис — стандарт де-факто, и это хорошо.
                                                                                  • +1
                                                                                    Apple уже выложила мануал. Online book and iBooks Store version.

                                                                                    • 0
                                                                                      Мда как давно в Обьектном Си не хватал перегрузки операторов, был громосткий синтаксис, а теперь другая крайность — «Стриж» вообще похож на скриптовые языки.
                                                                                      • +4
                                                                                        Он похож не на скриптовые языки, он похож на современные статически типизированные языки (C#, Scala, Kotlin) с type inference. Которые, таки да, в плане синтаксиса многое потырили из ActionScript, ES4, Groovy и т.д. — но это вполне нормально, зачем изобретать велосипед? Но потырили уже давно, в том же C# var был еще в 2008-м :)
                                                                                      • +13
                                                                                        Просто подарок судьбы. После руби очень не нравился вырвиглазный синтаксис objective-c (разница в читаемости кода на скришотах, по-моему очевидна), сейчас уже можно и под iphone попробовать что нибудь написать.
                                                                                        • +1
                                                                                          Так-то уже давненько есть RubyMotion, судьба которого в свете нововведений становится крайне туманной. Был бы бесплатным — экосистема gem'ов вытянула бы, а за $200… если ничего не изменят, шансов выплыть мало.
                                                                                        • +1
                                                                                          Такое впечатление, что начали копировать Scala, но недокопировали (switch и if не выражения, return обязателен).
                                                                                          Но в целом тенденция меня радует.
                                                                                          • +4
                                                                                            Тут для Swift хаб уже сделали. Может быть туда?..
                                                                                            • +10
                                                                                              Интересно, а со swift-lang.org у Apple конфликтов не планируется :) Даже расширение у файлов, похоже, одинаковое.
                                                                                              • –7
                                                                                                Так это и есть они, вот тут ссылка внизу https://developer.apple.com/swift/
                                                                                                • +7
                                                                                                  Это не они. Там ссылка какраз, чтобы не путали «Swift parallel scripting language» и «Apple Swift».
                                                                                                  • +1
                                                                                                    ой, недочитал
                                                                                                  • +9
                                                                                                    Да какие могут быть конфликты у Apple (тысячи разработчиков) и University of Chicago (группа в 10 человек)?
                                                                                                    Вероятнее всего, вторая команда будет вынуждена переименовать свой язык, чтобы не спамили: «А как мне на вашем параллельном языке написать тетрис для айфона?»
                                                                                                    Такой вот рейдерский захват понравившегося названия (и логотипы тоже похожи)…
                                                                                                  • +5
                                                                                                    Сегодня завели скайп чат на тему Swift, будем рады если кто присоединится — (уже 135 человек там):

                                                                                                    ссылка:

                                                                                                    bit.ly/swift_skype_chat

                                                                                                    ссылка в skype формате:

                                                                                                    skype:?chat&blob=F1b1xpg2aiYCbjz_iAlNW-zXiMCX17kVSbOreFY23im5QdnT10bXMnsWFRUD4UoyoCLw76F-VTCJzrE

                                                                                                    (скайп тормозит с чатами по этому иногда требуется минут 10-15 после захода в чат, чтобы он загрузил все что нужно)
                                                                                                    • +5
                                                                                                      Разве есть что-то плохое в ссылке на чат строго по тематике поста? это ведь не реферальная ссылка.
                                                                                                      Этот пост через недельку потеряется а люди продолжат общаться и дальше.
                                                                                                      • 0
                                                                                                        похоже в настоящее время мы достигли лимита в 300 пользователей на чат скайпа
                                                                                                        • 0
                                                                                                          в связи с чем люди делают новые чаты. например

                                                                                                          skype:?chat&blob=1lHQVAEmzXD0kTHjOVeZp-mnqlLCQmAz-pYEjn01Qt4mqBwsyotXgfFgJeVz_xgiHQ78Tb3sy2f5l4Bx9JYg7zoi1-lUVQhECZzcqRoD5scHv1wN4eQVtDc1393_HgzAsrAxcQABCFAZm21sHpbGo6tNGQvgLQ-vTcfpllk9uJHnWg7G4sL3WED9GyYXc2b0Qq-kTdBUd0A_emzmdkCzCmjuQsnX0I1l0Ibt
                                                                                                          • 0
                                                                                                            кто то еще завел канал irc.freenode.net #swift-lang-ru
                                                                                                        • +2
                                                                                                          На Freenode создали IRC канал по Swift — #swift-lang
                                                                                                          • 0
                                                                                                            А в RusNet есть? Или на другом сервере, но с русскоговорящими?
                                                                                                        • +24
                                                                                                          Как-то весьма поверхностно. И зачем эти скрины, если можно было обойтись вставкой кода?

                                                                                                          // возврат нескольких значений из функции
                                                                                                          func getGasPrices() -> (Double, Double, Double) {
                                                                                                              return (3.59, 3.69, 3.79)
                                                                                                          }
                                                                                                          getGasPrices()
                                                                                                          
                                                                                                          // переменно число параметров в функции
                                                                                                          func sumOf(numbers: Int...) -> Int {
                                                                                                              var sum = 0
                                                                                                              for number in numbers {
                                                                                                                  sum += number
                                                                                                              }
                                                                                                              return sum
                                                                                                          }
                                                                                                          sumOf()
                                                                                                          sumOf(42, 597, 12)
                                                                                                          

                                                                                                          Рекомендую интересующимся читать книгу, она хорошо и просто написана. Чтобы получить представление о языке хватит 2х первых глав.
                                                                                                          • –2
                                                                                                            А еще на Swift-e можно написать так:

                                                                                                            let π = 3.14159
                                                                                                            let 你好 = "你好世界"
                                                                                                            let Блог = "Хабрахабр"
                                                                                                            
                                                                                                            • +20
                                                                                                              Я вас наверное удивлю, но на Java тоже.
                                                                                                            • +4
                                                                                                              Но зачем?
                                                                                                              • 0
                                                                                                                переменные с выражением эмоций.
                                                                                                                • +1
                                                                                                                  Научные расчёты удобнее делать, используя буквы греческого алфавита. Я не про Swift конкретно, разумеется, а про общую идею.
                                                                                                                • 0
                                                                                                                  Никогда не видел смысла в юникодных идентификаторах в языках программирования. Попадутся вот вам исходники из Китая, что будете делать? Лучше бы уж переносимый набор символов POSIX расширили до 128, назначив на неиспользуемые коды до 0x20 какие-нибудь полезные юникодовские символы типа стрелок и дополнительных скобок, чтобы не мучать парсеры угловыми скобками, которые знаки «больше» и «меньше»:)
                                                                                                                  • 0
                                                                                                                    Ну как же, разве не красота?
                                                                                                                    ∄ : ∀ {a b} {A : Set a} → (A → Set b) → Set (a ⊔ b)
                                                                                                                    ∄ P = ¬ ∃ P
                                                                                                                    
                                                                                                                    • +1
                                                                                                                      Красота для настоящего программиста это тогда, когда эти символы есть на любой клавиатуре мира:) Чтобы можно было собственноручно нажать клавишу и увидеть, как символ появлятся в редакторе…
                                                                                                                      А так… я даже не уверен что они в основных моноширинных шрифтах присутствуют.
                                                                                                                      • +1
                                                                                                                        Ну если нет требования, чтобы редактор был непременно notepad, то это не проблема.
                                                                                                                        В частности, символы, встречающиеся в вышеупомянутом отрывке на Agda2, свободно можно ввести в Emacs agda-mode или в SublimeText.
                                                                                                                        Наверняка не только в них.
                                                                                                                      • 0
                                                                                                                        Не знаю, как в других языках, а в C# такой фокус не прокатит: математические символы не входят в число допустимых в идентификаторах. :(
                                                                                                                      • 0
                                                                                                                        Иногда всё-таки имеет смысл называть вещи в устоявшейся терминологии предметной области, которая может быть на языке, отличном от английского.

                                                                                                                        Я видел проект на C#, где классы и поля называли по-русски. Да в таком подходе много минусов, начиная от того что раскладку надо щелкать, заканчивая тем, что выглядит это весьма вырвиглазно. Но плюс в том, что не надо мучительно придумывать и запоминать названия для целой кучи понятий.

                                                                                                                        С другой стороны — видел проект на испанском. У них алфавит латинский, так что отсутствие юникода не помешало им называть классы и методы на своём. Ну а попало оно потом к нашим :)
                                                                                                                        • 0
                                                                                                                          А по-моему, это не круто. Имею дело с банком, у которого все линки вот с такими словами: szamlakKozottiAtvezetes.
                                                                                                                          Мораль: на каком-то этапе банк был только венгерский, а потом вышел на более широкий рынок. Переделывать никто не стал.

                                                                                                                          Это касается и кода и проектов. И возможности с кем-то что-то зашарить, даже если проект целиком 100% всегда будет виден только разработчикам в одной стране. Хотя и тут тоже — в моей компании, находясь физически в одном офисе, работали иностранцы, которые ни слова по-русски не знали. И хоть их было пару человек, всё-равно разработка, основная переписка и тексты коммитов всегда были на английском.
                                                                                                                          • 0
                                                                                                                            С другой стороны — часто шанс выйти заграницу минимален, но всё равно проект делают на английском, придумывая как же перевести «ЧП», «ПБОЮЛ», или «ИНН». Имеются и плюсы, и минусы, не нужно быть совсем категоричным.
                                                                                                                            • 0
                                                                                                                              Мне кажется, что сейчас шанс выйти заграницу велик даже у приложений, которые двигают аггрегатами на наших заводах. Всё потому, что заграница сама приезжает и покупает местные компании.