Чтобы отказаться от языка программирования, на котором уже ведется коммерческая разработка, и начать учить новый, программистам нужны серьезные основания. Но история ИТ-индустрии знает много случаев, когда выбор за них делало время, и переход происходил как бы сам по себе.

Что заставило множество разработчиков перейти на 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. К чему это приведет — покажет время.
Поделиться с друзьями
-->

Комментарии (81)


  1. lgorSL
    24.08.2016 19:59
    +15

    Swift быстр (скорость реализации некоторых алгоритмов в 3,9 раза больше, чем на Python)

    Почему здесь приведено сравнение скорости с питоном, а не С, objective-C или хотя бы с Java? Питон же интепретируемый. Или Swift не настолько быстрый, чтобы сравнивать с компилируемыми языками?


    1. Shannon
      25.08.2016 01:03
      +1

      Скорее всего это отсылка к оригинальной презентации, что-то вроде «писать на свифте так же просто как на питоне, а результат в 3.9 раз лучше»
      image

      time go build -o test-go go/test.go
              0.55 real         0.57 user         0.12 sys
      time swiftc -O -o test-swift swift/test.swift
              0.35 real         0.30 user         0.03 sys
      time c++ -O3 -o test-c cplusplus/test.cc
              0.56 real         0.51 user         0.04 sys
      time ghc -O3 -o test-hask haskell/test.hs
      Linking test-hask ...
              0.46 real         0.34 user         0.10 sys
      


    1. VolkovRoman
      25.08.2016 16:42
      +1

      Согласен. Но, swift можно использовать и как интепретируемый язык по аналоги с питоном.
      Например, «swift script.swift»


    1. hz_name
      25.08.2016 16:43
      -2

      Как вообще можно говорить о скорости работы языка программирования?? Ведь в результате компиляции получается машинный код.
      По-моему это все равно что: «Русский язык быстр (скорость говорения некоторых предложений в 3,9 раза больше, чем на английском)».


      1. taujavarob
        25.08.2016 16:48

        это все равно что: «Русский язык быстр (скорость говорения некоторых предложений в 3,9 раза больше, чем на английском)».


        Некоторых. Так как и в русском и в англ. всё можно выразить словом (или его аналогом) из четырёх букв, то в среднем практически одинаково.


  1. nwalker
    24.08.2016 20:31
    +25

    Переименуйте статью в «история Objective C и маркетинговый буллщит про Swift».


    1. iqiaqqivik
      25.08.2016 08:58
      +2

      Вот это самое прекрасное: «Он стал самым быстрорастущим языком программирования в истории.»

      Быстрорастущим куда? В сравнении с чем? По каким критериям?


      1. ad1Dima
        25.08.2016 09:14
        +2

        В рейтинге TIOBE, скорее всего.


  1. Athari
    24.08.2016 21:20
    +17

    Давайте по-честному: единственная причина успеха и вообще существования Swift — это необходимость иметь обратную совместимость с неимоверно вырвиглазным и отсталым Objective-C (см. ваш же скриншот из начала статьи). Если бы не жёсткие рамки обратной совместимости вкупе с ущербностью Objective-C, никакого Swift не было бы. Был бы Objectve-C нормальным — никто бы с него не переходил из-за смутных плюсов; не было бы обратной совместимости — никто не стал бы выкидывать тонны написанного кода. Просто Swift дал возможность огромному числу программистов писать на нормальном языке.


    Вот когда Swift кому-то понадобится за рамками яблочных платформ, можете начинать заливать про революционность, стимулы и далее по списку и сравнивать с Java, которая отжала огромный кусок от C++ именно за счёт новых подходов; ну или хотя бы с C#, который как Java, только нормальнее. Пока же этот Swift со всеми своими "стимулами" никому не нужен за рамками яблочных платформ.


    Скорость с питоном они сравнивают, ох...


    1. Nagg
      24.08.2016 21:42

      Про кросслпатофрменность сейчас явно кто-нибудь вам ответит что Hello world можно запустить на андроиде! и на Windows через новый встроенный линукс. Про сравнение с питоном — чуть чай не пролил от смеха :-).


      1. Kolonist
        24.08.2016 23:24

        А что-нибудь кроме Hello World? Есть ли у Swift реальная область применения за пределами яблочных платформ?


        1. Nagg
          24.08.2016 23:50
          +4

          Нет.


          1. olegi
            25.08.2016 11:56
            +1

            а как же слухи про android и swift?

            хотя какие комменты можно ожидать от работника Xamarin… :) боитесь потенциального конкурента.


            1. Nagg
              25.08.2016 13:20
              -1

              Ну когда свифт на андроиде сможет легко интеропаться с кучей уже написанных 3rd party на джаве, включая UI контролы и дизайнер (т.е. предоставит красивый языковой враппер) и когда IDE будет поддерживать такие же возможности рефакторинга как idea/android studio тогда поговорим :-). И я молчу уже о Windows и UI фраемворках для него.


              1. olegi
                02.09.2016 16:48
                +1

                fyi: https://habrahabr.ru/company/bitrix/blog/309000/#comment_9785312


                1. Nagg
                  02.09.2016 17:48

                  Ничего не понял — как это решает проблему "подключить быстро любую нативную 3rd party на java в мой Android Swift проект".


                  1. olegi
                    02.09.2016 17:56
                    +1

                    это инфа к вашему твердому «нет» на вопрос «Есть ли у Swift реальная область применения за пределами яблочных платформ?»


                    1. Nagg
                      02.09.2016 17:59

                      Ну ок, репозиторий с 4 звездочками, вижу действительно нужно.


                    1. asdf87
                      02.09.2016 21:35
                      -1

                      Так это скорее для поддержания яблочной платформы в tarantool'e сделано, а не потому что swift такой модный, удобный и молодежный. А клиентам tarantool'a за пределами яблочной платформы скорее всего будет удобнее писать хранимые процедуры на lua.


            1. ad1Dima
              25.08.2016 14:21
              +2

              А что слухи, вот: http://elementscompiler.com/elements/silver/

              Ждем от вас что-нибудь кроме helloworld и упреков в боязни конкурентов.


              1. olegi
                25.08.2016 14:36
                +1

                речь была о слухе:

                Google is said to be considering Swift as a ‘first class’ language for Android

                About the time Swift was going open source, representatives for three major brands — Google, Facebook and Uber — were at a meeting in London discussing the new language. Sources tell The Next Web that Google is considering making Swift a “first class” language for Android, while Facebook and Uber are also looking to make Swift more central to their operations.

                http://thenextweb.com/dd/2016/04/07/google-facebook-uber-swift/

                .net-у такое и не снилось :)


                1. Nagg
                  25.08.2016 18:30
                  +1

                  .net по идее мог быть из коробки в Андроиде ;-) Есть историческое гугловое письмо на это туему. Ну а swift first class это не более чем слух, тем более после того, как суд недавно отказал Ораклу гуглу вообще не имеет смысл вводить новый язык забивая на огромную тучу существующего кода комьюнити.


                  1. olegi
                    25.08.2016 20:18

                    а что за письмо? что-то не гуглится


                    1. Nagg
                      25.08.2016 20:31
                      +3

                      http://www.fosspatents.com/2011/07/judge-orders-overhaul-of-oracles.html


                      One of the most interesting passages in today's order quotes from an October 2005 email by Google's Android boss Andy Rubin:
                      "If Sun doesn't want to work with us, we have two options: 1) Abandon our work and adopt MSFT CLR VM and C# language — or — 2) Do Java anyway and defend our decision, perhaps making enemies along the way"


              1. olegi
                02.09.2016 16:48
                +1

                fyi: https://habrahabr.ru/company/bitrix/blog/309000/#comment_9785312


          1. landan
            25.08.2016 14:16
            +3

            Ну это вы зря, у свифта за столь короткое время успело сформироваться довольно таки большое комьюнити, даже несколько фреймворков для веба появилось, я использую Vapor, перейти на него например с того же node.js да это просто счастье.


            1. Nagg
              25.08.2016 18:32

              Это как-то опровергает мою мысль? Я не ругаю свифт, мне он нравится :) Вон недавно сказали что введут async/await в него в 4ой версии. Но на андроиде написано огромное количество библиотек, костылей и т.п. На это нельзя забить и сделать язык со своим гуёвым фраемворком или кривым интеропом. PS: ой, я подумал вы из ветки про андроид.


        1. Athari
          25.08.2016 00:06
          +2

          Киллер-фича свифта — обратная совместимость с обж-с. К сожалению, это приводит к некоторым странным фичам: повсеместное позднее связывание, странная логика попадания имён аргументов в сигнатуры, многословные названия методов… И эти странности идут в компании с ломанием обратной совместимости (во второй версии просто взяли и поменяли смысл ключевого слова), сыростью компилятора (припоминаю статью с экспоненциальным ростом времени компиляции при использовании литералов словаря), кросс-платформенности как таковой нет… За рамками яблок смысла в свифте примерно ноль. Свифт пытается догнать современные языки, а не совершает революции.


          1. ad1Dima
            25.08.2016 05:09
            +1

            Третья версия свифта тоже имеет необратимые изменения.


          1. andrew8712
            25.08.2016 16:43
            +1

            Большинство этих проблем пофиксили в Swift 3


          1. ruckef
            25.08.2016 16:43

            Очень интересно, как вы себе представляете реализацию раннего связывания при поддержке совместимости с Objective-C, в котором все методы виртуальны.


        1. landan
          25.08.2016 14:10
          +1

          Есть, на свифте можно писать веб приложения.


      1. olegi
        25.08.2016 11:52

        ibm дружит со swift. не?


    1. Kirpa
      25.08.2016 01:42
      +5

      ObjC — отличный язык, на котором приятно писать, после определённой практики. Во всяком случае, не слышал массовых жалоб от тех, кто постоянно на нём пишет.
      И что такого особенного в Swift для обратной совместимости с ним? Чем это мешает языку?


      1. ad1Dima
        25.08.2016 05:47
        +2

        Возможности у Obj-C хорошие, но синтаксис вырвиглазный и трудночитаемый. Хотя когда они сделали синтаксический сахар для декларации массивов и объектов, стало намного лучше.

        А свифт выглядит как снтаксический сахар для Obj-C из-за вот таких моментов:

        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell


        Для примера, тот же код на C#

        var cell = tableView.DequeueReusableCellWithIdentifier("Cell", indexPath);
        

        Из-за совместимости с Obj-C в плане семантики методов, которой несколько пожертвовали в Xamarin, язык получился многословный.


        1. Diaskhan
          25.08.2016 09:00

          Не понимаю зачем надо было убирать const и делать за место него let?
          Это что было сделано для удобства? Ох уж эти смалталки…


          1. NeoCode
            25.08.2016 09:54
            +1

            Вообще const и let семантически должны быть разными (не в objc или swift, а вообще). const это истинная константа (т.е. времени компиляции), а let по сути — переменная с «однократной записью» (или константа времени выполнения).


        1. Kirpa
          25.08.2016 16:23

          Читаемость ObjC — дело привычки и стиля кода. Конечно, можно написать нечитаемые конструкции с кучей скобок и большой вложенностью. Но подобные конструкции и в других языках читаются плохо.

          По Swift — если вы про именованный аргумент, то я ниже ответил.


          1. ad1Dima
            25.08.2016 16:27
            +2

            Obj-C провоцирует вложенность там, где в C -подобных языках будет точка либо стрелка. А вложенность читается труднее. спорить тут особо не о чем.


            1. Kirpa
              25.08.2016 21:16

              Честно говоря, не вижу разницы между точкой и квадратной скобкой в плане читаемости.
              Под вложенностью я имел ввиду результат вызова метода, передаваемый как параметр для вызова другого метода. Что-то вроде:
              [view animateWithDuration: [obj2 gimmeDuration] animation:[obj2 gimmeAnimation]] Что лично для меня не читается труднее чем: view.animateWithDuration(obj2.gimmeDuration(), obj2.gimmeAnimation())


              1. Nagg
                25.08.2016 22:33

                в случае языка с пропертями, на которые похожи ваши геттеры это было бы


                view.animateWithDuration(obj2.gimmeDuration, obj2.gimmeAnimation)

                по-моему, разница тут существенная в восприятии


                1. Kirpa
                  26.08.2016 00:05

                  В ObjC свойства тоже есть.


                  1. Nagg
                    26.08.2016 01:09
                    +1

                    Спасибо, я в курсе. Квадратных скобок меньше не станет в примере.


                    1. Kirpa
                      26.08.2016 13:45

                      В примере приведены методы, а не свойства. Если бы там были свойства, как в вашей строке выше, то квадратных скобок было бы меньше. Странно что вы этого не понимаете, если в курсе.


              1. ad1Dima
                26.08.2016 07:15
                +1

                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
                

                UIApplication.SharedApplication(new NSUrl(urlString));
                

                Это еще для NSUrl не надо делать [[NSUrl alloc] init]


                1. ad1Dima
                  26.08.2016 12:12
                  +1

                  OpenUrl потерял

                  UIApplication.SharedApplication.OpenUrl(new NSUrl(urlString));
                  


                1. Kirpa
                  26.08.2016 13:17

                  <про OpenUrl автор уже поправил>.

                  Опять-таки, лично для меня код на ObjC читается легко и приятно. Не хуже чем нижний пример, во всяком случае. А вот если нужно [[NSUrl alloc] init] делать, тогда конструкцию пора разбивать на две строки. Читаемость только выиграет, кстати.


                  1. ad1Dima
                    26.08.2016 13:24
                    +1

                    Ёжики плакали, кололись
                    Все, кто постоянно пишет на Obj-C «легко» читают его. Более того, я даже лисп легко читал, когда писал на нем. Но трудно передать тот кайф, когда я с Obj-C вернулся на C#. Не единственной, но довольно значимой причиной этого кайфа было отсутствие необходимости постоянно считать скобки.


                    1. Kirpa
                      26.08.2016 13:53

                      У меня другой опыт. Никакого облегчения при переключении на Swift, Java или JS в связи с отсутствием скобок не испытываю. Хотя приходится немного привыкнуть к точкам, а потом к скобкам, когда возвращаешься обратно.

                      Но писать надо по-другому, что есть, то есть. Выше вы написали, что ObjC провоцирует вложенность. По-моему, наоборот. Провоцирует выносить в отдельные переменные, особенно конструкции типа [[Class alloc] init] Код длиннее получается, зато каждая отдельная строка — проще.


        1. Xiot
          25.08.2016 16:46
          +4

          Я лично являюсь сторонников подхода obj-c и swift, когда имена параметров являются частью сигнатуры метода. Читается как книга, особенно когда передается несколько параметров одного типа или большое кол-во. Править код значительно проще, особенно если автор не слишком задумывается над именованием переменных. Кроме того dequeueReusableCellWithIdentifier уже возвращает объект типа UITableViewCell, так что приведение типа избыточно.

          Почему в c# "WithIdentifier" является частью метода, а не называется просто "GetDequeueReusableCell"?


          1. ad1Dima
            26.08.2016 07:18

            Почему в c# «WithIdentifier» является частью метода, а не называется просто «GetDequeueReusableCell»?

            Потому что я неправильно написал, а метод таки GetDequeueReusableCell

            А про приведение типа, ф вот тоже удивился, но в первом попавшемся примере было так.


      1. lasalas
        25.08.2016 09:48
        +2

        ObjC — жуткая химера, создававшаяся изначально как препроцессор для C и эволюционировавшая затем во что-то совершенно непотребно. В XXI веке существование подобных пережитков не может имееть никаких оправданий.


        1. NeoCode
          25.08.2016 10:25
          +1

          Ну если сравнивать с современным метапрограммированием на C++ — то не такая уж и химера. А вообще конечно хорошо что появился Swift, так или иначе развитие языков программирования должно быть, и ошибки дизайна ранних языков (которые конечно же были) должны исправляться.


    1. arielf
      26.08.2016 00:37

      Чем вам Objective C не нравится?


  1. NeoCode
    24.08.2016 22:33
    +2

    А мне ObjC как-то сразу понравился, хотя реальных проектов я на нем не делал.
    Не синтаксис (он действительно вырвиглазный), а именно семантика. Возможность отправлять сообщения вместо вызова методов, динамика, рефлексия, возможность отправлять сообщения null-у. Всего этого мне очень не хватало в C++.
    А Swift… он конечно аккуратный такой, но меня пугает, что в последней редакции они выкинули из языка даже такие основы основ как операции инкремента и декремента (++ и --). И не то чтобы сложно написать i=i+1, но вот для кого это было сделано? Как будто не для программеров, а для каких-то домохозяек, которых пугают непонятные символы.


    1. Paks
      25.08.2016 00:26
      +3

      Ну почему, вариент i += 1 еще доступен :)


    1. Kirpa
      25.08.2016 01:27
      +4

      Синтаксис ObjC вырвиглазным кажется только по началу. Через несколько месяцев привыкаешь и остаётся только бонус в виде именованных аргументов. Потом языки с привычным С синтаксисом кажутся неудобными из-за отсутствия этой фичи.

      Что до Swift и изъятия ++ и --, это неоднозначное на первый взгляд решение. Разработчики в результате обсуждения решили убрать по нескольким причинам.
      1) Реальной пользы мало, i += 1 не намного длиннее, так что конструкция была добавлена скорее по привычке
      2) Наиболее частое использование — увеличение индекса при итерации коллекций. Итерация в Swift делается другими, более безопасными и изящными способами.
      3) Часто использовались в запутанных конструкциях, усложняющих понимание кода.

      там и другие аргументы были, но менее убедительные, на мой взгляд.


      1. ad1Dima
        25.08.2016 14:28
        +1

        > остаётся только бонус в виде именованных аргументов
        такой уж и бонус. Придумывать название для каждого аргумента.


        1. Kirpa
          25.08.2016 14:49
          +1

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


          1. ad1Dima
            25.08.2016 16:29
            +1

            нормально методы можно называть и без именованных аргументов.


            1. Shannon
              25.08.2016 17:28
              +1

              Именованные аргументы в Swift не обязательны, но их наличие частенько помогает

              В js, кстати, можно что-то аналогичное делать теперь:

              function fnc({a, b, c, d}) {
              	return a + b - c + d
              }
              
              let rr = fnc({a: 1, b: 2, c: 3, d: 4})
              


              1. ad1Dima
                26.08.2016 07:20

                В C# тоже можно явно указывать имена аргументов. Ещё и в произвольном порядке (но не всегда стоит)


            1. Kirpa
              25.08.2016 21:28
              +1

              Назвать метод — мало. Надо ещё указать смысл аргументов и порядок их передачи. Что без именованных параметров будет монструознее, чем с ними.


              1. ad1Dima
                26.08.2016 07:21

                не, ну когда аргументов 100-500, это конечно да.


                1. Kirpa
                  26.08.2016 12:06
                  +1

                  уже с 2-3 будет хуже


    1. iqiaqqivik
      25.08.2016 09:05
      +3

      Inplace increment (`i++`) сейчас не в моде, потому что он обманывает читателя: нумерики фактически везде иммутабельны, поэтому `i++` синтаксически неверно. Домохозяйкам это, может быть и непонятно, правда.


    1. landan
      25.08.2016 14:35

      Ну у вас есть возможность реализовать ++ и — самому, если так сильно надо.


    1. Shannon
      25.08.2016 14:39
      +1

      Если интересно, вот тут создатель языка разъясняет про ++ и — https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md


    1. asdf87
      25.08.2016 16:43

      Простите, а что в этом синтаксисе инкремента и декремента такого полезного по сравнению с i=i+1, чтобы его вообще нужно было вводить в языки? Он на 3-7 символов (в зависимости от того как форматировать выражение) короче? Или просто не как у всех?


      1. NeoCode
        25.08.2016 19:28

        Да просто после стольких лет использования практически во всех языках взять и выкинуть… странно. Вроде никому не мешали эти операторы. А у профессиональных программистов эти операторы уже в подсознании заложены — думаю многие будут чертыхаться, написав инкремент на автомате а затем вспоминая, что в swift же его нет.


  1. IDMan
    25.08.2016 00:53

    Ещё одно важное нововведение — это возможность писать код и видеть результаты в режиме реального времени.

    Вы имеете ввиду playgrounds?


    1. NeoCode
      25.08.2016 09:45

      REPL как таковой вообще должен быть у современных языков, и не только скриптовых. Думаю со временем это станет неотъемлемой частью IDE, как сейчас подсветка синтаксиса.


      1. IDMan
        25.08.2016 16:13

        Я не совсем понял, где в «продакшн» разработке в Xcode есть место результатам в режиме реального времени. Playground это песочница для изучение синтаксиса, ну пусть еще черновик отдельной функции и её отладка. Но в разработке приложений я не заметил никаких результатов в реальном времени. Или я не понял, что имеет в виду автор?


  1. taujavarob
    25.08.2016 16:42

    Swift не взлетел. В нём нет того шарма, что был в 1995 при рождении Java.


    1. NeoCode
      25.08.2016 19:36

      А был шарм?
      Или скорее тогда ничего кроме С/С++ не было, и тут новый язык. Сейчас-то есть и C#, и Go, и Rust, и скриптовых немеряно.
      Помню, когда я впервые прочитал про Java, первая реакция была — ну С++ без указателей, ну и что? :) К C# помню был какой-то интерес, потому что там появилась новая концепция «атрибутов», сразу «вау, что-то новенькое, интересно что же это».


      1. taujavarob
        25.08.2016 19:47

        А был шарм?
        Или скорее тогда ничего кроме С/С++ не было, и тут новый язык.

        Был шарм. И были Паскаль и Дельфи и С++ и Ada и Prolog.

        когда я впервые прочитал про Java, первая реакция была — ну С++ без указателей, ну и что?

        Чисто стилистически это иной язык.


  1. Bimawa
    25.08.2016 16:43
    +1

    А мне кажется Swift УГ, и вот почему:
    1. В первую очередь потому-что я его не изучал!
    2. Есть Kotlin со всеми своим блекджеком и Java инфраструктурой.
    3. Хочешь LLVM, есть GO в 100500 раз лучше Swift.
    4. И, как не печально это осознавать, но ни какой новый язык не исправит убогое iOS SDK.
    5. Если ты хочешь зарабатывать бабло на приложениях с максимальной выгодой ReactNative + Objective-C наше все!!!

    Ну все а я пойду подожду что из этого всего выйдет и на сколько я на шутил про Swift правды.


    1. landan
      25.08.2016 16:48
      +1

      3 и 4 зачет, посмеялся.


    1. Nagg
      25.08.2016 18:36

      А что котлин можно в iOS? :-)


      1. Bimawa
        25.08.2016 18:47

        Ну Вы прям хотите, чтоб я Вас добил шутками что ли? Ну ловите )


        1. Nagg
          25.08.2016 19:14

          Ну несерьезная шутка :)