История языков программирования: от Objective C к Swift



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

    Что заставило множество разработчиков перейти на Objective C? Что сейчас заставляет отказаться от него и выбрать Swift?

    Objective C является расширением языка Си, в который были добавлены новые возможности для объектно-ориентированного подхода программирования. Язык использует объектную модель Smalltalk. Полностью совместим с языком программирования Си. Компания Apple долгое время использовала Objective C как основной язык программирования для разработки своих продуктов.

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



    Каждый объект является переменной определенного программистом типа данных (так называемого класса). Определение такого специального пользовательского типа данных (класса) заключается в двух вещах: определении набора данных (инвариантов, членов) и набора подпрограмм (методов), которые будут их обслуживать.

    Основным преимуществом объектно-ориентированного подхода стала возможность создавать новые классы на основе уже написанных (добавлять инварианты и методы, переопределять методы, использовать определенные в базовом классе методы как свои), названное наследованием.

    Набор методов представляет собой интерфейс для взаимодействия с инвариантами.

    OOPC


    Брэд Кокос быстро понял, что Smalltalk не подойдет для решения задач в ITT Corporation: совместимость с языком С для них была критична. Однако Кокс решил модифицировать препроцессор для С в сторону Smalltalk.
    Модификация эта состояла в добавлении новых синтаксических конструкций и специальном препроцессоре для них (который, проходя по коду преобразовывал их в обычные вызовы функций С), а также новой библиотеке времени выполнения (эти вызовы обрабатывающей). Таким образом, изначально Objective C воспринимался как надстройка над C. В каком-то смысле это так и до сих пор: можно написать программу на чистом С, а после добавить к ней немного конструкций из Objective C (при необходимости), или же наоборот, свободно пользоваться С в программах на Objective C. Кроме того, все это касается и программ на С++.

    То, что получилось, Кокс назвал «OOPC» – Object-Oriented Pre-Compiler. В 1982 году Лав устроился в Schlumberger Research и получил возможность приобрести коммерческую версию Smalltalk-80. Это помогло им в дальнейшей работе над Objective C. В итоге в Objective C была реализована возможность создавать объекты и работать с ними.



    Целью Кокса было создание языка, поддерживающего концепцию software IC, подразумевающей возможность собирать программы из готовых компонентов (объектов), подобно тому как сложные электронные устройства могут быть собраны из набора готовых интегральных микросхем. При этом язык должен быть простым и основанным на языке С, чтобы облегчить переход разработчиков на него.

    Одной из целей было также создание модели, в которой сами классы являются полноценными объектами, поддерживалась бы интроспекция и динамическая обработка сообщений. Любому объекту можно послать любое сообщение. Объект может вместо обработки сообщения переслать его другому объекту для обработки (делегирование), в частности, так можно реализовать распределённые (то есть находящиеся в различных адресных пространствах и даже на разных компьютерах) объекты.

    Привязка сообщения к соответствующей функции происходит на этапе выполнения.

    Язык Objective C поддерживает работу с метаинформацией — так, на этапе выполнения можно узнать класс объекта, список его методов (с типами передаваемых аргументов) и instance-переменных, проверить, является ли класс потомком заданного и поддерживает ли он заданный протокол и так далее.

    NeXT


    В 1986 году Кокс опубликовал книгу Object-Oriented Programming, An Evolutionary Approach, в которой разместил описание своего языка программирования, разобрал проблему повторного использования кода и указал преимущества Objective C при ее решении. Лав и Кокс также создали компанию Productivity Products International (PPI), который должен был помочь монетизировать компилятор Objective C с библиотеками классов. Далее фонд был переименован в StepStone.

    В 1988 году компания NeXT Software лицензировала язык Objective C, усовершенствовала его библиотеки и добавила новые – AppKit и Foundation Kit. На их основе позднее была создана среда разработки NEXTSTEP.



    В 1992 к усовершенствованию языка и компилятора подключились разработчики проекта GNU в рамках проекта OpenStep. С тех пор GCC поддерживает Objective C.

    Не добившись успеха на рынке в качестве производителя компьютеров, компания NeXT переключило все свое внимание на создание и продажу средств разработки ПО.

    20 декабря 1996 года компания Apple купила NeXT Software, а среда разработки NEXTSTEP стала основной средой разработки для будущей основной версии операционной системы Apple — OS X.

    После покупки NeXT, Apple взяла их SDK (компилятор, библиотеки, IDE) за основу для своих дальнейших разработок. IDE для разработки кода получила название Xcode, а для GUI – Interface Builder. Фреймворк Cocoa для GUI разработок (и не только) на сегодня является наиболее значимой средой разработки программ на Objective C.

    В 2007 году компания Apple презентовала обновленную версию языка и назвала его Objective C 2.0, данная версия языка является актуальной в настоящее время. Используется в разработке Apple OS X, iOS.

    Swift


    В 2014 году компания Apple представила новый язык программирования – Swift. Он стал самым быстрорастущим языком программирования в истории.

    «С открытием исходного кода Swift разработчики всего мира могут вносить свой вклад в этот язык программирования и делать его доступным на новых платформах, — сказал тогда Крейг Федериги, старший вице-президент Apple по программному обеспечению. — Эффективность и простота Swift дадут молодым программистам стимулы к обучению, к тому же теперь они смогут распространять свои идеи повсюду: от мобильных устройств до облачных систем».



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

    Над Swift он начал работать летом 2010 года. Латтнер держал это в секрете полтора года. Он создавал Swift в свободное от основной работы время.

    Через полтора года он рассказал о проекте топ-менеджерам Apple. Высоко оценив работу Латтнера, они направили ему в помощь нескольких разработчиков. Однако проект был все еще окутан ореолом таинственности. Даже люди, косвенно принимавшие участие в создании языка и помогавшие Крису, были сильно удивлены, над чем именно он работал. Еще через полтора года проект Латтнера попал в список главных направлений компании, а команда разработчиков существенно расширилась.

    По мнению Apple, язык Swift имеет все шансы изменить ИТ-индустрию.

    2 июня 2014 года компания выпустила тестовую версию для сторонних разработчиков и программистов. Apple позиционирует это язык как более быстрый и эффективный способ создания программ для iPhone, iPad и Mac.



    Расширение аудитории


    Языку программирования необходимо несколько лет, чтобы стать популярным хотя бы в узких кругах энтузиастов. Достаточно показательна ситуация с языком Go, который компания Google представила еще в 2009 году. Над Go работали лучшие умы (Кен Томпсон и Роб Пайк), однако и по сей день прикладываются немалые усилия для его популяризации. Однако Apple делает все, чтобы Swift стал исключением и последовал примеру языков Java и C# в 1990-х и начале 2000-х соответственно.

    Swift создан для среднестатистического программиста. На языке можно писать даже самые простые приложения, а наделенный довольно умными инструментами, язык предлагает эффективный способ учиться написанию самостоятельно. Но главная причина будущей популярности языка кроется в другом. Сотни тысяч разработчиков сегодня создают приложения для устройств Apple, используя Objective C. Устройства Apple пользуются большой популярностью, а значит эти разработчики продолжат создавать для них приложения, но уже на Swift. По мнению Apple, он значительно лучше и эффективнее, чем Objective C.

    3 декабря 2015 года компания открыла исходный код Swift. Всемирное сообщество разработчиков — от создателей приложений до компаний и учебных заведений — может развивать Swift и оптимизировать язык, чтобы сделать его доступным на новых вычислительных платформах.

    «Не было никакого реального стимула использовать Google Go» — говорит Пол Янсен, который отслеживал прогресс различных языков программирования в течение около пятнадцати лет. «Swift отличается наличием стимула».

    В рейтинге TIOBE Swift занимает 14-ю позицию. За год он поднялся на 3 позиции. Язык Go переместился с 95 позиции на 20, что очень впечатляет. А Objective C опустился с 6 места на 15. Таким образом, можно сказать, что Swift технически обошел своего предшественника.



    Сегодня на GitHub, популярном хранилище разработок с открытым исходным кодом, более 2500 проектов используют Swift.

    Swift – это не просто язык, это язык, который тесно связан со всем, что требуется разработчику для работы. Сюда входит не только интегрированная среда разработки, но и многие другие инструменты (например, отладчик), которые уже знакомы каждому разработчику Apple.

    Swift быстр (скорость реализации некоторых алгоритмов в 3,9 раза больше, чем на Python) и лаконичен (разработчики избавились от многословности Objective C). Ещё одно важное нововведение — это возможность писать код и видеть результаты в режиме реального времени.

    До этого на протяжении долгого времени процесс создания программного продукта и сам продукт были разделены, и из-за этого программисты должны были тратить много времени на проверку и оптимизацию кода. В Swift они могут вносить поправки и сразу видеть результат. Это значит, что разработчики смогут быстрее проверять в деле свои концепты и в целом быстрее создавать приложения.

    P.S. Apple не первая компания, которая выпустила новый язык программирования в недавнем прошлом. Это уже сделали Facebook, Google и Mozilla. К чему это приведет — покажет время.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 82
      +15
      Swift быстр (скорость реализации некоторых алгоритмов в 3,9 раза больше, чем на Python)

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

        +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
          Согласен. Но, swift можно использовать и как интепретируемый язык по аналоги с питоном.
          Например, «swift script.swift»
            –2
            Как вообще можно говорить о скорости работы языка программирования?? Ведь в результате компиляции получается машинный код.
            По-моему это все равно что: «Русский язык быстр (скорость говорения некоторых предложений в 3,9 раза больше, чем на английском)».
              0
              это все равно что: «Русский язык быстр (скорость говорения некоторых предложений в 3,9 раза больше, чем на английском)».


              Некоторых. Так как и в русском и в англ. всё можно выразить словом (или его аналогом) из четырёх букв, то в среднем практически одинаково.
            +25
            Переименуйте статью в «история Objective C и маркетинговый буллщит про Swift».
              +2
              Вот это самое прекрасное: «Он стал самым быстрорастущим языком программирования в истории.»

              Быстрорастущим куда? В сравнении с чем? По каким критериям?
                +2
                В рейтинге TIOBE, скорее всего.
              +17

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


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


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

                0

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

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

                    Нет.

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

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

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

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

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

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

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

                                  –1
                                  Так это скорее для поддержания яблочной платформы в tarantool'e сделано, а не потому что swift такой модный, удобный и молодежный. А клиентам tarantool'a за пределами яблочной платформы скорее всего будет удобнее писать хранимые процедуры на lua.
                            +2
                            А что слухи, вот: http://elementscompiler.com/elements/silver/

                            Ждем от вас что-нибудь кроме helloworld и упреков в боязни конкурентов.
                              +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

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

                                  0
                                  а что за письмо? что-то не гуглится
                                    +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
                                fyi: https://habrahabr.ru/company/bitrix/blog/309000/#comment_9785312
                              +3
                              Ну это вы зря, у свифта за столь короткое время успело сформироваться довольно таки большое комьюнити, даже несколько фреймворков для веба появилось, я использую Vapor, перейти на него например с того же node.js да это просто счастье.
                                0

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

                              +2

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

                                +1
                                Третья версия свифта тоже имеет необратимые изменения.
                                  +1
                                  Большинство этих проблем пофиксили в Swift 3
                                    0
                                    Очень интересно, как вы себе представляете реализацию раннего связывания при поддержке совместимости с Objective-C, в котором все методы виртуальны.
                                    +1
                                    Есть, на свифте можно писать веб приложения.
                                    0
                                    ibm дружит со swift. не?
                                    +5
                                    ObjC — отличный язык, на котором приятно писать, после определённой практики. Во всяком случае, не слышал массовых жалоб от тех, кто постоянно на нём пишет.
                                    И что такого особенного в Swift для обратной совместимости с ним? Чем это мешает языку?
                                      +2
                                      Возможности у Obj-C хорошие, но синтаксис вырвиглазный и трудночитаемый. Хотя когда они сделали синтаксический сахар для декларации массивов и объектов, стало намного лучше.

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

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


                                      Для примера, тот же код на C#
                                      var cell = tableView.DequeueReusableCellWithIdentifier("Cell", indexPath);
                                      

                                      Из-за совместимости с Obj-C в плане семантики методов, которой несколько пожертвовали в Xamarin, язык получился многословный.
                                        0
                                        Не понимаю зачем надо было убирать const и делать за место него let?
                                        Это что было сделано для удобства? Ох уж эти смалталки…
                                          +1
                                          Вообще const и let семантически должны быть разными (не в objc или swift, а вообще). const это истинная константа (т.е. времени компиляции), а let по сути — переменная с «однократной записью» (или константа времени выполнения).
                                          0
                                          Читаемость ObjC — дело привычки и стиля кода. Конечно, можно написать нечитаемые конструкции с кучей скобок и большой вложенностью. Но подобные конструкции и в других языках читаются плохо.

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

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


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

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

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

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

                                                      0
                                                      В примере приведены методы, а не свойства. Если бы там были свойства, как в вашей строке выше, то квадратных скобок было бы меньше. Странно что вы этого не понимаете, если в курсе.
                                                  +1
                                                  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
                                                  

                                                  UIApplication.SharedApplication(new NSUrl(urlString));
                                                  

                                                  Это еще для NSUrl не надо делать [[NSUrl alloc] init]
                                                    +1
                                                    OpenUrl потерял
                                                    UIApplication.SharedApplication.OpenUrl(new NSUrl(urlString));
                                                    
                                                      0
                                                      <про OpenUrl автор уже поправил>.

                                                      Опять-таки, лично для меня код на ObjC читается легко и приятно. Не хуже чем нижний пример, во всяком случае. А вот если нужно [[NSUrl alloc] init] делать, тогда конструкцию пора разбивать на две строки. Читаемость только выиграет, кстати.
                                                        +1
                                                        Ёжики плакали, кололись
                                                        Все, кто постоянно пишет на Obj-C «легко» читают его. Более того, я даже лисп легко читал, когда писал на нем. Но трудно передать тот кайф, когда я с Obj-C вернулся на C#. Не единственной, но довольно значимой причиной этого кайфа было отсутствие необходимости постоянно считать скобки.
                                                          0
                                                          У меня другой опыт. Никакого облегчения при переключении на Swift, Java или JS в связи с отсутствием скобок не испытываю. Хотя приходится немного привыкнуть к точкам, а потом к скобкам, когда возвращаешься обратно.

                                                          Но писать надо по-другому, что есть, то есть. Выше вы написали, что ObjC провоцирует вложенность. По-моему, наоборот. Провоцирует выносить в отдельные переменные, особенно конструкции типа [[Class alloc] init] Код длиннее получается, зато каждая отдельная строка — проще.
                                                +4
                                                Я лично являюсь сторонников подхода obj-c и swift, когда имена параметров являются частью сигнатуры метода. Читается как книга, особенно когда передается несколько параметров одного типа или большое кол-во. Править код значительно проще, особенно если автор не слишком задумывается над именованием переменных. Кроме того dequeueReusableCellWithIdentifier уже возвращает объект типа UITableViewCell, так что приведение типа избыточно.

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

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

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

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

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

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

                                                      там и другие аргументы были, но менее убедительные, на мой взгляд.
                                                        +1
                                                        > остаётся только бонус в виде именованных аргументов
                                                        такой уж и бонус. Придумывать название для каждого аргумента.
                                                          +1
                                                          Код пишется один раз, а читается много. Даже если это проект одной команды, не говоря уже о фреймворках и просто публично доступном коде. Поэтому лучше один раз чуть больше времени потратить на описание, зато экономить каждый раз при чтении на необходимости лезть в тело метода или документацию, чтобы понять за что отвечает тот или иной аргумент.
                                                            +1
                                                            нормально методы можно называть и без именованных аргументов.
                                                              +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})
                                                              
                                                                0
                                                                В C# тоже можно явно указывать имена аргументов. Ещё и в произвольном порядке (но не всегда стоит)
                                                                +1
                                                                Назвать метод — мало. Надо ещё указать смысл аргументов и порядок их передачи. Что без именованных параметров будет монструознее, чем с ними.
                                                                  0
                                                                  не, ну когда аргументов 100-500, это конечно да.
                                                                    +1
                                                                    уже с 2-3 будет хуже
                                                          +3
                                                          Inplace increment (`i++`) сейчас не в моде, потому что он обманывает читателя: нумерики фактически везде иммутабельны, поэтому `i++` синтаксически неверно. Домохозяйкам это, может быть и непонятно, правда.

                                                            0
                                                            Ну у вас есть возможность реализовать ++ и — самому, если так сильно надо.
                                                              +1
                                                              Если интересно, вот тут создатель языка разъясняет про ++ и — https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md
                                                                0
                                                                Простите, а что в этом синтаксисе инкремента и декремента такого полезного по сравнению с i=i+1, чтобы его вообще нужно было вводить в языки? Он на 3-7 символов (в зависимости от того как форматировать выражение) короче? Или просто не как у всех?
                                                                  0
                                                                  Да просто после стольких лет использования практически во всех языках взять и выкинуть… странно. Вроде никому не мешали эти операторы. А у профессиональных программистов эти операторы уже в подсознании заложены — думаю многие будут чертыхаться, написав инкремент на автомате а затем вспоминая, что в swift же его нет.
                                                                0
                                                                Ещё одно важное нововведение — это возможность писать код и видеть результаты в режиме реального времени.

                                                                Вы имеете ввиду playgrounds?
                                                                  0
                                                                  REPL как таковой вообще должен быть у современных языков, и не только скриптовых. Думаю со временем это станет неотъемлемой частью IDE, как сейчас подсветка синтаксиса.
                                                                    0
                                                                    Я не совсем понял, где в «продакшн» разработке в Xcode есть место результатам в режиме реального времени. Playground это песочница для изучение синтаксиса, ну пусть еще черновик отдельной функции и её отладка. Но в разработке приложений я не заметил никаких результатов в реальном времени. Или я не понял, что имеет в виду автор?
                                                                  0
                                                                  Swift не взлетел. В нём нет того шарма, что был в 1995 при рождении Java.
                                                                    0
                                                                    А был шарм?
                                                                    Или скорее тогда ничего кроме С/С++ не было, и тут новый язык. Сейчас-то есть и C#, и Go, и Rust, и скриптовых немеряно.
                                                                    Помню, когда я впервые прочитал про Java, первая реакция была — ну С++ без указателей, ну и что? :) К C# помню был какой-то интерес, потому что там появилась новая концепция «атрибутов», сразу «вау, что-то новенькое, интересно что же это».
                                                                      0
                                                                      А был шарм?
                                                                      Или скорее тогда ничего кроме С/С++ не было, и тут новый язык.

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

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

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

                                                                    Ну все а я пойду подожду что из этого всего выйдет и на сколько я на шутил про Swift правды.
                                                                      +1
                                                                      3 и 4 зачет, посмеялся.
                                                                        0

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

                                                                          0

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

                                                                            0

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

                                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                      Самое читаемое