Страницы

Поиск по вопросам

среда, 3 октября 2018 г.

Swift - что за зверь? [закрыт]

Несколько минут назад apple представило новый яп - swift. Говорят про него они так: он objective-c without c.
Предлагаю писать сюда всё, что известно о нём. Ну там он динамичный/статичный и т.п.
P.s. Objective-C


Ответ

На первый взгляд, очень похоже на C#, статически типизированный объектно-ориентированный язык. Вот список того, что есть в C# и появилось в Swift по сравнению с Objective C. Автоматический вывод типов переменных. Лямбды с нормальным синтаксисом, гораздо удобнее, чем блоки. Memory safety и отсутствие wild pointer'ов в качестве бонуса. Дженерики. Циклы наподобие foreach value types и reference types, структуры и классы Функции — объекты первого класса (раз уж есть лямбды...) type safety, отсутствие undefined behaviour Nullable Именованные аргументы функций, out-параметры (отречёмся от старого ми-и-ира!) string interpolation (будет в C# 6) поддержка safe-навигации (будет в C# 6) Теперь преимущества: Есть let — объявление констант внутри тела функции. В C# есть такое лишь в ограниченном контексте (LINQ query syntax). Неясна точная семантика: это deep const или shallow const? Если deep, имеет ли объект право измениться сам по себе? Синтаксическая поддержка инициализации списков, словарей и кортежей. Расширения (extensions) сильнее, чем Extension Methods из C#: добавляются статические методы, а также имплементируются протоколы. (Не знаю, как это соотносится с категориями Objective C.) Delegation — очень похоже на mix-in'ы, хочу такое в C#. Мощнейший switch с pattern matching'ом. Вложенные функции! (Надеюсь, они наследуют контекст.) where-constraint в generic'ах мощнее Конструктор базового класса можно вызывать где угодно, не только в начале. AOP-образные willSet и didSet Укороченный синтаксис для лямбд ($1 etc.) Отличия, забавные и серьёзные: Garbage collector'а нету, есть ARC. Ручная расстановка слабых ссылок и проблемы с closure в комплекте. Миленькие trailing closures. Методы по умолчанию виртуальные, как в Java. Массивы и словари — value type, копируются при передаче в качестве параметров. Более правильный порядок записи типов: тип после переменной, тип возвращаемого значения после аргументов Приятная конструкция if let для safe navigation. Чего не увидел: Нет LINQ-образных lazy enumerations event'ы? Без них программирование UI не очень удобно. А где исключения? Опять пробрасывать nil? Встроенная в язык поддержка многопоточности? Пора бы уже, 2014 год.

Комментариев нет:

Отправить комментарий