Swift – это изумительно!

Давно ничего не писал по программированию, т.к. у меня возрадилось старое хобби – фотография. Но про такое я просто не могу молчать! Язык Swift просто покорил меня с первого взгляда! Я долго откладывал знакомство с ним, воспринимая язык как улучшенную версию Objective-C в чем был сильно не прав. Первые впечатления которые оставляет язык – это как Python, только лучше и со статической типизацией. Основная крайне досадная проблема связанная с языком – поддержка исключительно OSX. Хотя, насколько я помню, было обещание Apple выпустить язык под какой-то свободной лицензией, что меня сильно обнадеживает.

На данный же момент мы получили просто мечту OSX/iOS разработчика.

Вывод типов и контроль за допустимостью преобразований на этапе компиляции:

var v1 = 42
v1 = 43
v1 = "sss" // Type 'Int' does not conform to protocol 'StringLiteralConvertible'

Отсутствие автоматического приведения типов:

let intData = 10
let floatData = 10.0
let total = intData + floatData // Cannot invoke '+' with an argument list of type '(Int, Double)'
let total = intData + Int(floatData)

Очень интересный и удобный подход к форматированию строк:

let s1 = "some text"
var v1 = 42
let s2 = "formatting test \(s1) \(v1)"

Возможность добавить нужные методы к уже существующим классам:

func %(format:String, args:[CVarArgType]) -> String {
    return NSString(format:format, arguments:getVaList(args))
}

let s5 = "Python like formatting %d, %f" % [intData, floatData]

Конечно же язык позволяет перечислять элементы массива в цикле:

let arr = ["one", "two", "three"]
for (index, item) in enumerate(arr) {
    println("item %@ with index %d".format(item, index))
}

И мне даже удалось обнаружить крайне любимую Python фичу – list comprehension, пусть и в несколько не удобном, как мне кажется виде:

let arrComp = ["aaa", "aab", "abb", "bbb"]
let compr = Array(map(arrComp) {$0.rangeOfString("aa")})

Какого-либо встроенного в язык механизма работы с потоками я не нашел, поэтому вполне можно воспользоваться GCD, благо он не менее великолепен нежели сам Swift:

let queue = NSOperationQueue()
for i in 1...5 {
    queue.addOperationWithBlock() {
        print("\(i)")
    }
}
queue.waitUntilAllOperationsAreFinished()

При этом, отсутствие каких-либо механизмов управления потоками в языке приводит извечной проблеме гонок на шареных данных (лично я ярый сторонник модели “почтовых ящиков”, а не шареной памяти). На мой взгляд в язык все же стоило добавить что-то похожее на механизмы из Erlang/Rust для контроля за целостностью данных.

Еще к минусам языка можно отнести фактически полное отсутствие стандартной библиотеки в понимании Python или Java. Насколько я понимаю идею авторов – все должны пользоваться Foundation и иже с ними, но это сильно ограничивает потенциальные возможности для написания портируемого кода.

А пока у меня зреют планы по написанию pet project на базе C/C++, Rust и Swift %-)

13 Comments Swift – это изумительно!

  1. NN

    Swift довольно интересен в качестве альтернативы objective c.
    Но он не создан как кросс-платформенный язык, а больше как язык разработки для OS X, iOS и иже с ними.
    К счастью хоть до этого додумались:)

    Reply
    1. Alexander Stavonin

      По моему мнению, то что в него не заложили кросс-платформенность из коробки просто огромный минус. При всех достоинствах языка будет еще один локальный язык аля .NET-языки. А ведь сообщество может создать огромное количество библиотек, а простота и лаконичность вполне могли бы позволить потеснить Python.

      Reply
      1. NN

        Точнее спецификация CLR как раз кроссплатформенная , а реализация .NET нет.
        Это как Python против CPython, Jython и т.п.
        Другое дело , что MS не сильно заботят другие реализации

        Вот есть уже начало кросс-платформенности Swift: http://swift-cc.org/
        Интересно кто быстрей пойдет Rust или этот Swift CC

        Reply
        1. Alexander Stavonin

          Rust, я думаю. За swift-cc скорей всего не стоит сколь-нибудь серьезное бабло, а чисто на энтузиазме далеко не уедешь. Да и направления использования этих языков совершенно разные, писать какую-то серьезную логину на Swift я бы точно не стал.

          Reply
          1. NN

            Будем ждать Rust 1.0 .
            И хорошую поддержку IDE для него.
            Иначе во всех макросах, классах типов и прочим будет очень находить и исправлять ошибки =)

          2. Alexander Stavonin

            Ну вот поддержка IDE как мне кажется, совершенно не является критичным требованиям для языка. Ну, в крайнем случае я последнии лет 7, когда на C/C++ пишу, вполне обхожусь VIM. А вот для языков типа Java или Python наличие IDE крайне полезно.

          3. NN

            Кому некритично а кома критично.
            Вот мне критично даже для C++.
            Семантическая расцветка кода очень сильно облегчает работу, а без хорошей навигации в большом проекте сложно ориентироваться совсем.
            Я пользовался VIM в свое время но по удобству со студией+Resharper ему очень далеко, я уже молчу когда выйдет resharper для C++:))
            Если в Rust приведут синтаксис к удобночитаемому то вообще будет хорошо. Есть прогресс но еще есть куда идти: let mut a:&’str это жесть:)

          4. Alexander Stavonin

            А ты к Vim прикручивал ctags или, еще лучше, cscope? Очень удобно работать становится, как мне кажется. Ну а поддержка Rust для ctags есть. Думаю что сделать и для cscope не сложно.

          5. NN

            ctags конечно . Без него вообще можно VIM не смотреть
            Про cscope не знал.
            Возможно после долгой настройки можно придти к похожему поведению VisualAssist .
            Я так и не дошел до этого , при этом VA настраивать куда легче

            Кстати окончательно VIM меня растроил когда я понял, что он не поддерживает Unicode в полной мере по крайней мере в Windows в отличии от любого другого редактора как Notepad++.

  2. guest

    Первый комментарий от меня в твоем стиле – гавно, так как не кроссплатформенно, закопать и забыть. Второй, по-существу, а что в нем интересного? Питончик прекрасен тем, что для него есть миллион неплохих библиотек на все случаи жизни, а чем интересно данное поделие кроме автоматического приведения типов я не понял.

    Reply
    1. Alexander Stavonin

      Мне даже нравится коментарий в моем стиле. Ты знаешь, в целом очень хорошее впечатление от языка. Но осознание того, что его нигде за пределами OSX не возможно использовать все портит. Так что про говно аля .NET не могу не согласится. Впрочем, Obj-C был таким же. Любят большие корпорации делать одноплоатформенного говно, ничего не попишешь тут…

      P.S.я как бы подозреваю что ты один из Немерлистов, но, как мне кажется, анонимность тут ни к чему.

      Reply
    1. Alexander Stavonin

      Я на него смотрел, мне он нравится больше чем, к примеру, Scala. Но я очень настороженно отношусь к языкам с небольшим коммюнити вокруг них. Поэтому, на данный момент, если JVM и не Java, то Clojure

      Reply

Leave a Reply