?

Log in

No account? Create an account
Всё, что вам нужно знать про Swift - Scala, Java, JVM и другое [entries|archive|friends|userinfo]
Scala, Java, JVM и другое

[ website | Об этом блоге ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Всё, что вам нужно знать про Swift [Jun. 3rd, 2014|12:10 am]
Scala, Java, JVM и другое

levin_matveev

[stepancheg]
[Tags|, , , , ]

Всё, что вам надо знать про Swift, чтобы с умным видом поучаствовать в разговоре.

Swift — это Objective C с нормальным синтаксисом. C# с ARC вместо GC.

Есть классы и структуры (как в C#). Классы передаются по указателям, ARC считает, когда объекты можно удалять. Есть слабые ссылки. Всё, как в Objective C. Есть instanceof, только называется короче, и использовать удобнее.

Есть структуры, они копируются. Указателей в языке нет.

Swift использует Objective C runtime. Это значит, что всё API, которое за 30 лет написала Apple, можно продолжать использовать.

По-мелочам:

— локальный вывод типов, сигнатуру функций надо указывать, хорошо
— nullable-типы как в Kotlin — это хорошо (и, вероятно, C#, не настолько хорошо знаю C#)
— нормальный синтаксис для методов, а не квадратные скобки
— extension functions как в C# — хорошо
— есть простенький pattern matching, tuples
— синтаксический сахар для массива и словаря, удобно
— integer overflow по-умолчанию — ошибка — хорошо, безопасность
— есть перегрузка операторов, и даже можно писать нестандартные операторы (типа +++). Один из авторов Clay (в котором тоже можно сделать любую последовательность знаков препинания оператором) ушёл в Apple, вероятно, это он такое туда протащил.
если я правильно понял, тайпклассов не будет, а будут интерфейсы, как в Java. Тайпклассы есть.
— по всей видимости, в Swift не будет упячки с заголовочными файлами и реализацией, и это очень-очень хорошо
— вы не сможете ещё несколько месяцев попробовать Swift, если вы не купили доступ за 100 долларов

Swift остаётся таким же медленным языком программирования, как и Objective C, не замена C++, не конкурент Rust. Однако большинству разработчиков этого будет достаточно, и это точно гораздо удобнее, чем Objective C. С чем я Apple и поздравляю.
LinkReply

Comments:
[User Picture]From: thedeemon
2014-06-03 05:48 am (UTC)
>Swift остаётся таким же медленным языком программирования, как и Objective C, не замена C++, не конкурент Rust.

А почему? Что в нем фундаментально медленнее, чем в Rust?
(Reply) (Thread)
[User Picture]From: stepancheg
2014-06-03 10:02 am (UTC)
Тем, что он много где высокоуровневый. Например
— во всех объектах-классах есть счётчик ссылок, и все объекты (классов) выделяются в хипе
— ссылки на диапозон массива там, как я понимаю быть не может
— динамический диспатчинг, как я понимаю, там делается через objc_send, а не как виртуальный метод
— в стандартных массивах (Array<T>) мутная технология — данные копируются по ссылке, а при изменении размера, делается уникальная копия массива (это чтобы не было обращения к невалидным ссылкам). Мой поинт в том, что вся эта конструкция добавляет оверхеда.

Короче говоря:
— C++ быстрый потому, что позволяет проехать по памяти
— Rust быстрый потому, что система типов знает про лайфтаймы и алиасинг
— в Swift безопасность делается в runtime

Edited at 2014-06-03 10:11 am (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: thedeemon
2014-06-03 11:27 am (UTC)
Ага, makes sense.
На реддите упоминали, что виртуальные методы вызываются все же как в С++, а не как в Obj-C, если класс не наследует явно от NSObject.
(Reply) (Parent) (Thread)
[User Picture]From: stepancheg
2014-06-05 02:16 pm (UTC)
Кстати, я ошибся про тайпклассы. Они есть. Это очень хорошо.
(Reply) (Parent) (Thread)
[User Picture]From: born_in1978
2014-06-03 07:57 am (UTC)
А он динамический, как Obj-c? Использует существующее API? Тогда за счёт чего он быстрее?
(Reply) (Thread)
[User Picture]From: stepancheg
2014-06-03 09:48 am (UTC)
Да, он один-в-один как Objective C. То, что он быстрее — это маркетинг Apple. Ну типа новый типизированный массив вместо NSArray взяли, получилось чуть быстрее. В остальном он такой же, как Objective C.
(Reply) (Parent) (Thread)
[User Picture]From: born_in1978
2014-06-03 10:05 am (UTC)
Ну а на кой ляд он нужен? Порог вхождения такой же, скорость такая же...
(Reply) (Parent) (Thread)
[User Picture]From: stepancheg
2014-06-03 10:24 am (UTC)
Порог вхождения и Swift будет сильно ниже. Я Objective C так и не осилил, синтаксис упячечный, C вперемежку с Objective, разделение на заголовки и реализации. А тут ещё и REPL есть сразу, и вывод типов. Я бы на Swift с удовольствием пописал.
(Reply) (Parent) (Thread)
[User Picture]From: born_in1978
2014-06-03 10:34 am (UTC)
Мдя, понятно. Если ты не осилил Objective-C, который ну очень простой сам по себе, то лучше и не берись за swift, ведь основная сложность здесь не в языке, а в используемых повсеместно стандартных фреймворках.
Obj-c это не С++, изучается он очень быстро.
(Reply) (Parent) (Thread)
[User Picture]From: stepancheg
2014-06-03 10:36 am (UTC)
Спасибо за совет.
(Reply) (Parent) (Thread)
[User Picture]From: Сева Иванов
2014-06-03 08:56 am (UTC)
Лол, есть там указатели, через *. Т.е. на value типы через * можно на создавать ссылок, в книжке прочитал
(Reply) (Thread)
[User Picture]From: stepancheg
2014-06-03 09:47 am (UTC)
Какая глава?
(Reply) (Parent) (Thread)
[User Picture]From: artush
2014-06-03 11:11 am (UTC)
Там идея такая же как в C#. Теоретически указатели есть, но их можно не использовать.
(Reply) (Parent) (Thread)
[User Picture]From: e_v_ches
2014-06-03 08:59 am (UTC)
На swift же можно писать для айфончега? Если я только со swift разберусь, а на Objective C положу болт, могу я считаться ойфон-девелопером?
(Reply) (Thread)
[User Picture]From: stepancheg
2014-06-03 09:47 am (UTC)
Конечно! Его ровно для того и придумали.
(Reply) (Parent) (Thread)