Компания Apple объявила (https://swift.org/blog/swift-3-0-released/) о выходе языка программирования Swift 3.0 (https://swift.org), первом значительном выпуске после открытия (https://www.opennet.me/opennews/art.shtml?num=43451) исходных текстов проекта. Официальные сборки подготовлены для Linux (Ubuntu 14.04, 15.10) и macOS (Xcode). Исходные тексты распространяются (https://github.com/apple/swift) под лицензией Apache 2.0.В новом выпуске отмечается значительное расширение порта для платформы Linux, в состав которого включён ранее недоступный для Linux набор библиотек Swift Core Libraries (https://swift.org/core-libraries/). Версия для Linux не привязана к Objective-C Runtime, что позволяет использовать язык в окружениях, в которых отсутствует поддержка Objective-C. В основной состав также включён пакетный менеджер Swift Package Manager (https://swift.org/package-manager/), предоставляющий средства для распространения модулей и пакетов с библиотеками и приложениями на языке Swift. Пакетный менеджер включает средства для управления зависимостями, систему автоматизированной загрузки, сборки и связывания компонентов.
В сам язык также включена большая порция изменений, в том числе нарушающих совместимость с выпусками Swift 2.2 и 2.3. Например, удалена поддержка синтаксиса определения функций "func foo(x: Int)(y: Int)", удалена возможность применения выражения "var" в блоке аргументов функций, прекращена поддержка операторов "++" и "--", прекращена поддержка циклов "for" в стиле языка Си, проведена унификация API (переименовано (https://github.com/apple/swift-evolution/blob/master/proposa...) большинство функций) и полностью изменены средства для импорта Objective-C API в Swift.
Напомним, что реализация Swift построена с задействованием технологий свободного проекта LLVM. Для обеспечения высокой производительности Swift-программы компилируются в машинный код, выполняемый в тестах Apple на 30% быстрее кода на Objective-C. Вместо сборщика мусора в Swift используются средства подсчёта ссылок на объекты. Язык Swift наследует лучшие элементы языков C и Objective-C, и предоставляет объектную модель, совместимую с Objective-C (Swift-код может смешиваться с кодом на С и Objective-C), но отличается использованием средств автоматического распределения памяти и контроля переполнения переменных и массивов, что значительно увеличивает надёжность и безопасность кода. Swift также предлагает множество современных методов программирования, таких как замыкания, обобщенное программирование, лямбда-выражения, кортежи и словарные типы, быстрые операции над коллекциями, элементы функционального программирования.URL: https://swift.org/blog/swift-3-0-released/
Новость: http://www.opennet.me/opennews/art.shtml?num=45177
>набор библиотек Swift Core Librariesура, можно не использовать сторонние костыли.
> ура, можно не использовать сторонние костыли.Такие, например, как язык Swift?
такие как сторонние базовые библиотеки, петросян.
Воуу.. воу придержите лошадей!
Только objectiveC решился учить :)
> Воуу.. воу придержите лошадей!
> Только objectiveC решился учить :)Решительнее надо. GNU Guile -- и пнеслась!
> "func foo(x: Int)(y: Int)", удалена возможность применения выражения "var" в блоке аргументов функций, прекращена поддержка операторов "++" и "--", прекращена поддержка циклов "for"Попахивает 3,5 миллимитровым портом
Вот мне интересно, почему и отчего дезигнерам новомодных поделок так свербит от операторов инкремента/декремента ?
Пытаются, вероятно, избавиться от частных случаев.
Хотя мне становится грустно когда я представлю себе смещение по указателю или итератору без этих операторов. Но, возможно, в Swift нет ни указателей ни итераторов?
Я так понимаю, когда компьютеры были большими, а компиляторы не очень оптимизирующими, эти операторы позволяли задействовать автоинкрементный/автодекрементный режимы адресации.
Сейчас-то видимо уже пофиг.
клоун: в основном их использовали в циклах, если цикл записывается по другому, то и особой необходимости в них нет.Си:
for(int i=1; i<=10; i++) {}Swift в стиле Си:
for var i=1; i<=10; i++ {}Swift:
for i in 1...10 {}Они создают свой синтаксис, который при нормальном написании кода, более удобочитаемый. А оператор "++" к удобочитаемым не относится. Си вообще - вещь в себе. Если привыкнуть, то язык удобный, но к нему ещё нужно привыкнуть.
> Они создают свой синтаксисСкорее заимствуют. В лиспах уже 30 лет как (for ((i (in-range 10))) <block>).
> А оператор "++" к удобочитаемым не относится.
Неужели. i++ и inc(i) - такая большая разница?
клоун: ++а-а++ по-твоему читаемо? И ты точно помнишь приоритет операций в Swift и сможешь сказать результат выполнения выражения, если а=1?Другой пример:
(а++)+(а++)
В Swift реализована классическая схема, когда в процессе вычисления выражения значения переменных не изменяются. Это упрощает понимание логики и позволяет избегать ошибок.
http://lh5.ggpht.com/_0W-IrdaBLsY/Sbl7jupRAMI/AAAAAAAACiI/sQ...
>/0_22686_824d2f76_L.jpgЛошадиным хьюмором -- по клоуну. Богато.
три тупака!
i расположена в области памяти портов вывода.
нормальная такая цветомузычка на пинах будет :-P
а вообще, это операция передёргивания..
i расположена в области памяти портов вывода - swift не имеет целью взаимодействовать с оборудованием напрямую.
при чём тут свифт???
смотри рисунок про трёх тупых укурков.
результат постфиксного оператора не меняет операнд, и он имеет больший приоритет, чем префиксный, придурок. это вообще не скомпилируется.
Есть вагон всяких нечитаемых конструкций. на то есть review и статический анализ. Потому что критерии "нечитаемости" для всех разные.
клоун: мы о разном говорим.Взять японский, в котором у каждого (!) слова минимум два варианта произношения: бог = kami, shin; гора = yama, san; ветер = kaze, fu.
Это косяк языка, который не исправить никакой синтаксической конструкцией, и можно только накосячить ещё больше.
Вот такие синтаксические косяки есть и в ЯП.
Другой случай - многословное или содержащее не те слова описание. Напр. в русском часто используется фраза "с какой стати", хотя слово "стать" уже давно вышло из употребления. Фраза для выражения этой мысли нужна, но используемая реализация неправильная.
В ЯП есть ключевые слова и конструкции, которые тоже используются только в одном единственном случае и могут быть удалены или заменены на общеиспользуемые. Напр. циклы do-loop и while-wend в Паскале, которые объединили в Си.
Анализ написанного кода - это следующий этап, решающий задачу как с помощью ЯП (уже не важно хороший он или плохой) написать хороший код.
> Напр. циклы do-loop и while-wend в Паскале, которые объединили в Си.do-loop и while-wend - это Visual Basic, а не Паскаль. А появился VB гораздо позже Си, так что пример совсем некорректен.
Клоун, разные чтения у иероглифов, а слова читаются однозначно.
> клоун: ++а-а++ по-твоему читаемо?А за такое руки обыкновенно отрывают. Не потому, что это не читаемо, а потому, что порядок вычисления таких конструкций оставлен на усмотрение компилятора, так что это выражение не портируемо без такой-то матери.
> В Swift реализована классическая схема, когда в процессе вычисления выражения значения переменных не изменяются.
Ага, как же.
<-- prog
var a = 0
func incr () -> Int {a = a+1; return a}
print("first: ", (incr()+a))
print("second: ", (incr()+incr()+a))--> output
first: 2
second: 8
клоун: ты привёл конструкцию, в которой программист сам захотел это сделать. Также это можно было сделать, создав функцию с передачей параметра по ссылке или функцию с отложенным вычислением.ЯП не мешает тебе косяпорить, но оберегает от возможных косяков.
> клоун: ты привёл конструкцию, в которой......в процессе вычисления выражения значение переменной изменяется.
> ЯП не мешает тебе косяпорить, но оберегает от возможных косяков.Вы бы посмотрели, что ли, на Haskell. Чтобы там накосяпорить, надо очень, очень хитро извернуться.
использование хацкеля само по себе тот еще косяк
Клоун, это undefined behavior. Только эксперты с опеннета не знают этого в 2016 году.
Подскажите, как в Swift сделать шаг цикла переменной длины?
Вам это не нужно. Think different, мля.
Наверное так:for i in 1...10 { j = i * cycle_step; foo(j); }
Через задницу конечно, но это же яблочники у них все так.
> for i in 1...10 { j = i * cycle_step; foo(j); }`cycle = random()` -пропустил! Внутри цикла. Переменной же длины.
> Через за
for i in stride(from: 0, to: 10, by: x)
Даааа, ЭТО конечно читабельнее чем C чего уж там.
Вернись в свой убогий цирк под колеса..
так не от операторов, а от x = y++ ++z
Так никто на практике и не пишет.
> Так никто на практике и не пишет.ну не совсем так, но x = ++y бывает и не надо за всех :)
Да никто не будет использовать этот язык вне Apple инфраструктуры.
Objective C не использовали, не будут и Swift использовать.
Это телодвижение бессмысленно и сродни тому, как Microsoft что-то там открывает и портирует.
У Аппле хватит денег что-бы заинтересовать других разработчиков.
Сомневаюсь. Единственное применение я вижу лишь в том, что разработчики привыкшие к инструментам Apple, которым вдруг стало нужно написать что-то под Линукс, смогут использовать привычный инструментарий. Это сродни тому, что я не стал изучать Яву, а пишу под Андроид на Си++. Если бы такой возможности не было, то разобрался бы в Яве. А раз она есть, то я доволен. Т.е. это не заявка на успех и расширение своей сферы влияния, это просто помощь своим родным разработчикам.
> Сомневаюсь. Единственное применение я вижу лишь в том, что разработчики привыкшие к
> инструментам Apple, которым вдруг стало нужно написать что-то под Линукс, смогут
> использовать привычный инструментарий. Это сродни тому, что я не стал изучать
> Яву, а пишу под Андроид на Си++. Если бы такой возможности
> не было, то разобрался бы в Яве. А раз она есть,
> то я доволен. Т.е. это не заявка на успех и расширение
> своей сферы влияния, это просто помощь своим родным разработчикам.Кстати, удивляют лица, оcoбeннo физические,
ваяющие аппликухи (ocoбливо) общего назначения под закрытые плaтфopмы vеndоro`ff.Где их софт - по настроению левой пятки "любого департамента" могут "вышвырнуть на мороз или аполитично грохнуть".
Ты про Андроид? А некуда от него деваться. Ему пока нет альтернативы. Во всяком случае лучшей альтернативы.
> Ты про Андроид? А некуда от него деваться. Ему пока нет альтернативы. Во всяком случае лучшей альтернативы.И не только..
Cкopее про так называемый механизм "marketa" в глобальном смысле этого слова - AppStore, GoogleMarket, PlayStore и прочая подобная игра слов.
К всему, к чему прикacaются наши нaглocaксонские кaмpaды, к-рые нам совсем не камрады, или подыхает (см. Nokia с N9, Meego, Maemo), или пpeвpaщается в "бaзap".
Какой такой базар? Что именно ты имеешь в виду? И кто эти "вы", которым англо-саксонцы не друзья?
Наверное разработчики славянского ПО.
> Наверное разработчики славянского ПО.можно и финского нарда и совта добавить..
>Какой такой базар?его величство "рынок" в вульгарном смысле
> Что именно ты имеешь в виду? И кто эти "вы", которым англо-саксонцы не друзья?
игра слов - имеется в виду, "Я" как пользователь продукта
P.S.
все, убег арбайтен
>Кстати, удивляют лица, оcoбeннo физические, ваяющие аппликухи (ocoбливо) общего назначения под закрытые плaтфopмы vеndоro`ff.А чего удивительного в людях желающих сделать копеечку?!
Вот когда с опенсорса бабла попрёт столько же - они все тут будут. МатреализьмЪ рулит.
>А чего удивительного в людях желающих сделать копеечку?!да не в "копеечках" дело, не была уловлена суть моего поста
самое поверхностное:
просто vendors в любое время, по любой, с потолка, причине, могут:
- у пользователя грохнуть аpp
- а девелоперское лицо/аккаунт с "программной нетленкой" проводят на выход
Мусье наверное судит по себе? Но в Омериге и прочих "цывiлiзованных" краынах разработка для огрызка очень популярная заба и хорошо оплачиваемая. Поэтому swift будет очень популярен, в своё время. Современные ЯП тот же товар и большинство современных погромистов это хипстеры гонящиеся за стильным, модным, молодёжным.
Тыц
http://www.ibm.com/cloud-computing/bluemix/swift/Тыц
https://swiftlang.ng.bluemix.net/#/replТыц
https://github.com/IBM-SwiftВобщем ЦЫЦ!
Вон даже web-фреймворки делают: https://github.com/vapor/vapor
че у него с работой с бд/ui?
для макос - нативно, для остального - ничего нет. Как всегда ;-)
Ну на гитхабе есть ребята, которые не ноют, а пилят биндинги.
Ubuntu 15.10 ж уже не поддерживается, почему не 16.04?
iPacket?
Это так и должно быть, что весь софт нужно переписывать каждый релиз свифта из-за несовместимостей на уровне синтаксиса?
> Это так и должно быть, что весь софт нужно переписывать каждый релиз
> свифта из-за несовместимостей на уровне синтаксиса?Ну весь PHP ж переписывают? И ничего!
В PHP оставляется обратная совместимость. Если не бежать впереди паравоза и не использовать фичи сразу, как только они появились, то код будет работать долго. php4-style конструкторы удалили только в php7.Код же на свифте надо переписывать КАЖДЫЙ код.
Пока да. У Swift еще не поддерживается сохранность API и ABI между версиями.
че только не придумают лишь бы не писать на джаве
толсто
> толстоТолсто и тормозит.
Зачем нам ЭТО, если идеальный язык давно уже есть? Да, как вы уже догадались, я про яваскрипт.
не смешно
>Вместо сборщика мусора в Swift используются средства подсчёта ссылок на объекты.И че, посчитали, а удалять кто будет? В JVM тоже считают, вроде. Так почему один GC а другой не GC?
Уважаемый эксперт, в жвм не считают ссылки. Там вариации на тему mark&sweep сборщика, который обходит всю кучу и ищет недостижимые объекты.
А подсчет ссылок - это не сборка мусора, потому что, как написали выше, циклы не удаляет.
> В JVM тоже считают, вродеНаверное swift не справится с циклическими ссылками, поэтому не GC.