Swift(Apple)
От: Аноним  
Дата: 03.06.14 10:17
Оценка:
Яблоко разродилось очередным языком программирования.
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2
Функциональный со стрелочками и т д

Что понравилось —

var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
var s= [:]


— объявление словаря.

var occupations = [
    "Captain", "Mechanic",
]
var s= []


— объявление массива.


willSet, didSet очень крутые конструкции
Позволяют привязаться к свойству объекта не наследуя его и до записи или после записи выполнить свои действия.
Очень понравилось.

class TriangleAndSquare {
    var triangle: EquilateralTriangle {
    willSet {
        square.sideLength = newValue.sideLength
    }
    }
    var square: Square {
    willSet {
        triangle.sideLength = newValue.sideLength
    }
    }
    init(size: Double, name: String) {
        square = Square(sideLength: size, name: name)
        triangle = EquilateralTriangle(sideLength: size, name: name)
   }
}



Есть ключевое слово Protocol аналог интерфейса, но его можно применять не только к классам, но и структурам и вариантам (Classes, enumerations, and structs)
сложно сказать на сколько это востребовано.



protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust()
}

struct SimpleStructure: ExampleProtocol {
    var simpleDescription: String = "A simple structure"
    mutating func adjust() {
        simpleDescription += " (adjusted)"
    }
}

var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription


Интересное нововведение это mutating позволяющий указать, что метод меняет структуру.

Один и тот же протокол может распространяться на структуру, класс и вариант(в терминах неменрли)

В генериках можно накладывать ограничения на принимаемые типы.


func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
    for lhsItem in lhs {
        for rhsItem in rhs {
            if lhsItem == rhsItem {
                return true
            }
        }
    }
    return false
}
1anyCommonElements([1, 2, 3], [3])
Re: Swift(Apple)
От: Аноним  
Дата: 03.06.14 13:10
Оценка:
! требует что бы ссылка была не nil иначе вываливаеться с ошибкой
let roomCount = john.residence!.numberOfRooms
// this triggers a runtime error



var val=[true,false,false,true]

if let constantName = val[2]
{
 
}



Иногда достаточно удобно, часто приходиться выносить код до условия.
Было бы хорошо писать даже так

Вариант для немерли
def s=(def k="1".toInt())+if(k==1){k+1}else{k-1};


Еще момент,
nil
и
false
воспринимаются условием как
false
, а любое другое значение
option
как
true


Не знаю на сколько это хорошо, но думаю вполне разумно.

Интересная инициализация массива

1var threeDoubles = Double[](count: 3, repeatedValue: 0.0)




Так можно объявить именованные параметры функции
func join(string s1: String, toString s2: String, withJoiner joiner: String)
    -> String {
        return s1 + joiner + s2
}
join(string: "hello", toString: "world", withJoiner: ", ")
// returns "hello, world"


довольно интересно, не совсем понятно зачем сделано различие между локальными именами и внешними именнованными параметрами, но есть короткая форма



func containsCharacter(#string: String, #characterToFind: Character) -> Bool {
    for character in string {
        if character == characterToFind {
            return true
        }
    }
   return false
}

let containsAVee = containsCharacter(string: "aardvark", characterToFind: "v")
// containsAVee equals true, because "aardvark" contains a "v"



@lazy
отложенное действие


 @lazy var importer = DataImporter()

пример использования, не ново, но современный язык без этого не язык

Все глобальные константы по умолчанию @lazy, в то время как все локальные нет. (такое вижу в первые)



mutating методы есть у структур и вариантов (у классов их нет), и данные методы могут возвращать новосозданный данный объект замещая ссылку на предыдущий.
Насколько и когда это полезно со структурами честно говоря сомнительно, ну а с вариантами как я понимаю это в немерли есть (варианты реализованы через классы)
Но пометка методов как изменяющих и как не изменяющих структуру и вариант интересна.
struct Point {
    var x = 0.0, y = 0.0
    mutating func moveByX(deltaX: Double, y deltaY: Double) {
        self = Point(x: x + deltaX, y: y + deltaY)
    }
}

enum TriStateSwitch {
    case Off, Low, High
    mutating func next() {
        switch self {
        case Off:
            self = Low
        case Low:
           self = High
        case High:
            self = Off
        }
    }
}
var ovenLight = TriStateSwitch.Low
ovenLight.next()
// ovenLight is now equal to .High
ovenLight.next()
// ovenLight is now equal to .Off




Методы типа тоже интересная вещь но думаю она уже есть почти везде
class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}
SomeClass.someTypeMethod()




Перекрытие геттеров и сеттеров, в немерле есть такое?

class SpeedLimitedCar: Car {
    override var speed: Double  {
    get {
        return super.speed
    }
    set {
        super.speed = min(newValue, 40.0)
    }
    }
}


В инициализаторе можно модифицировать константные свойства.



weak var tenant: Person?

Объявление слабой ссылки, при удалении объекта на который ссылается данная ссылка, ссылка очищается



extension Double {
    var km: Double { return self * 1_000.0 }
    var m: Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1_000.0 }
    var ft: Double { return self / 3.28084 }
}
let oneInch = 25.4.mm
println("One inch is \(oneInch) meters")
// prints "One inch is 0.0254 meters"
let threeFeet = 3.ft
println("Three feet is \(threeFeet) meters")
// prints "Three feet is 0.914399970739201 meters"
let aMarathon = 42.km + 195.m
println("A marathon is \(aMarathon) meters long")
// prints "A marathon is 42195.0 meters long"


интересное расширение типа и в особенности использования его


extension Int {
    subscript(digitIndex: Int) -> Int {
        var decimalBase = 1
            for _ in 1...digitIndex {
                decimalBase *= 10
            }
            return (self / decimalBase) % 10
    }
}
0746381295[0]
// returns 5
746381295[1]
// returns 9
4746381295[2]
// returns 2
6746381295[8]
// returns 7

Изврат из стиля, а у нас так можно, а у вас?
Но выглядит и понятно и круто.

 &+ &- &* &/ &%
операторы с игнорированием переполнения

uint.Max() &+ 1 //0
uint.Max() + 1 // ошибка времени исполнения
5 % 0 // ошибка времени исполнения
5 &% 0 // 0



Объявление нового оператора
Честно говоря после макросов немерли это выглядит....
@prefix @assignment func +++ (inout vector: Vector2D) -> Vector2D {
    vector += vector
    return vector
}



Числовыми значениями связности как и в нитре народ не чураеться
1operator infix +- { associativity left precedence 140 }
Re: Swift(Apple)
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.06.14 15:54
Оценка: 5 (1)
Здравствуйте, Аноним, Вы писали:

А>Функциональный со стрелочками и т д...


Убило использование подсчета ссылок без автоматического разруливания за зацикливаний. В 21 веке это выглядит дико. Такому языку нужен GC или хотя бы автоматический поиск зацикливаний, как в Руби.

С экстернал-параметрами какой-то овердизайн. Плюс, похоже, перегрузки возможны только для функций с этими самыми экстернал-параметрами.

Чисто стилистически не понравилась утащенная из GO идея не писать круглые скобки, но всегда писать фигурные.

Плохо, что не поддерживается концепция "все является выражением".

Странно выглядит отсутствие приватных членов в классах (можно я чего-то не заметил?).

В остальном язык ничего. Во многом похож на Немерл.

Из присутствующего в нем и отсутствующего в Немерле можно выделить именованные кортежи в качестве возвращаемых значений функций и диапазоны в паттернах. Хотя не ясно можно ли задавать границы диапазонов переменными.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Swift(Apple)
От: Аноним  
Дата: 03.06.14 17:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Аноним, Вы писали:


А>>Функциональный со стрелочками и т д...


VD>Убило использование подсчета ссылок без автоматического разруливания за зацикливаний. В 21 веке это выглядит дико. Такому языку нужен GC или хотя бы автоматический поиск зацикливаний, как в Руби.


По мне правильно. Если заметил, то в языке нет например списков, но есть словари и массивы. Язык подталкивает к аккуратному использованию памяти. Разруливание циклических ссылок зло. К тому же такое легко отследить и поправить просто особенностью деинициализации. Для его области применения это хорошо.

VD>С экстернал-параметрами какой-то овердизайн. Плюс, похоже, перегрузки возможны только для функций с этими самыми экстернал-параметрами.

Тоже так показалось.

VD>Плохо, что не поддерживается концепция "все является выражением".

тут согласен.

VD>Странно выглядит отсутствие приватных членов в классах (можно я чего-то не заметил?).

мда.

VD>В остальном язык ничего. Во многом похож на Немерл.


VD>Из присутствующего в нем и отсутствующего в Немерле можно выделить именованные кортежи в качестве возвращаемых значений функций и диапазоны в паттернах. Хотя не ясно можно ли задавать границы диапазонов переменными.

Еще прикольный if и определения в выражениях.
Re[3]: Swift(Apple)
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.06.14 17:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Язык подталкивает к аккуратному использованию памяти.


Да ни к чему он не поддакивает. Скорее наоборот. Куча действий которые приводят к незаметному перезаему памяти.

А>Разруливание циклических ссылок зло.


Чей-то? Аргументы?

А>К тому же такое легко отследить и поправить просто особенностью деинициализации. Для его области применения это хорошо.


Это для любой области плохо. И находить утечки вызванные зацикливанием будет ой как не просто.

А>Еще прикольный if и определения в выражениях.


if, как раз невнятный. Котлиновский и немерловый куда лучше. Неявное убирание опционального типа вообще можно только запомнить (ни разу не интуитивно).

Что такое "определения в выражениях" — не понял.

ЗЫ

Еще похоже нет неявного приведения типов. Отсутствие нормальной перегрузки и приведения типов, конечно сильно упрощает вывод типов, но на практике очень неудобно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Swift(Apple)
От: _NN_ www.nemerleweb.com
Дата: 04.06.14 03:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да ни к чему он не поддакивает. Скорее наоборот. Куча действий которые приводят к незаметному перезаему памяти.


Область применения его — телефоны, а там сборщик мусора себя не сильно оправдывает.
Даже в MS создали C++/CX с подсчетом ссылок.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Swift(Apple)
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.14 15:37
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Область применения его — телефоны, а там сборщик мусора себя не сильно оправдывает.

_NN>Даже в MS создали C++/CX с подсчетом ссылок.

Причем тут телефоны? Это дурь конкретных людей из МС. Возможно им влом было в ядро ОС встраивать ЖЦ.

В Андройде и Виндофоне (для дотнетных приложений) ЖЦ без проблем работает и проблем не вызывает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Swift(Apple)
От: Аноним  
Дата: 04.06.14 15:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В Андройде и Виндофоне (для дотнетных приложений) ЖЦ без проблем работает и проблем не вызывает.


Вызывает как минимум на андроиде. Подвисании приложения особенно игрового это жопа.
Там народ извращается отключением гж. Целые тома написаны.
Re[7]: Swift(Apple)
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.06.14 16:24
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, VladD2, Вы писали:


VD>>В Андройде и Виндофоне (для дотнетных приложений) ЖЦ без проблем работает и проблем не вызывает.


А>Вызывает как минимум на андроиде. Подвисании приложения особенно игрового это жопа.


Это не просто жопа. Это ложь. От жц ничего не подвисает. Да и игры не подвисают. У меня уже несколько лет ведрофон. Так что не надо мне рассказывать небылицы.

Проблемы с плавность (ушедшие в небытие полировкой андройда) были связаны с архитектурой ОС (Линукса). А там ведь ни грамма на яве не написано.

А>Там народ извращается отключением гж. Целые тома написаны.


Можно хотя бы на один ссылочку привести?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Swift(Apple)
От: Аноним  
Дата: 04.06.14 18:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Можно хотя бы на один ссылочку привести?

http://habrahabr.ru/post/116578/
http://habrahabr.ru/post/112676/
Re[2]: Swift(Apple)
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 04.06.14 19:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Чисто стилистически не понравилась утащенная из GO идея не писать круглые скобки, но всегда писать фигурные.


Если я правильно понял, эта фича была в языках и до Go; как минимум, в Руби.
Ce n'est que pour vous dire ce que je vous dis.
Re[6]: Swift(Apple)
От: _NN_ www.nemerleweb.com
Дата: 05.06.14 06:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Причем тут телефоны? Это дурь конкретных людей из МС. Возможно им влом было в ядро ОС встраивать ЖЦ.

Swift это замена ObjectiveC , который работает на подсчете ссылок.
Вот и вышел такой язык.

VD>В Андройде и Виндофоне (для дотнетных приложений) ЖЦ без проблем работает и проблем не вызывает.

Apple пока сборщик мусора встраивать не собирается, и так все работает
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: Swift(Apple)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.06.14 10:53
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Swift это замена ObjectiveC , который работает на подсчете ссылок.


Логика потрясающая. По этой логике C# должен был вообще управления памятью не иметь.

_NN>Вот и вышел такой язык.


Думаю, что у Эпла просто нет достойной реализации ЖЦ или в руководстве есть ЖЦ-фобы. Вот и все.

_NN>Apple пока сборщик мусора встраивать не собирается, и так все работает


Подсчет ссылок без автоматического определения и разрыва циклов — это еще тот гимор. Язык сразу на уровень ниже получится. А язык получается не плохой. Почти все фичи Немерла накрыл.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Swift(Apple)
От: artelk  
Дата: 05.06.14 12:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Думаю, что у Эпла просто нет достойной реализации ЖЦ или в руководстве есть ЖЦ-фобы. Вот и все.

Возможно. А еще есть подозрения, что достойную реализацию сделать трудно, т.к. многие полезняшки покрыты патентами в реализациях GC в Java и .NET. Но, если честно, я не копенгаген в этих вопросах.

VD>Подсчет ссылок без автоматического определения и разрыва циклов — это еще тот гимор. Язык сразу на уровень ниже получится.

У них там неплохие тулы есть, которые хорошо отлавливают утечки. Ну и можно делать weak с одного из концов, чтоб дерево получилось — в общем случает не спасает, но при должной сноровке в вопросах самоограничений...

VD>А язык получается не плохой. Почти все фичи Немерла накрыл.

Ага, тоже впечатлился.
Re[3]: Swift(Apple)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.06.14 14:45
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>Если я правильно понял, эта фича была в языках и до Go; как минимум, в Руби.


В руби вообще скобки не использовались. Он не Си подобный.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Swift(Apple)
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 05.06.14 14:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В руби вообще скобки не использовались. Он не Си подобный.


В руби используются и круглые скобки и фигурные. Но круглые часто можно опускать.
Ce n'est que pour vous dire ce que je vous dis.
Re[9]: Swift(Apple)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.06.14 15:07
Оценка:
Здравствуйте, Аноним, Вы писали:

VD>>Можно хотя бы на один ссылочку привести?

А>http://habrahabr.ru/post/116578/
А>http://habrahabr.ru/post/112676/

И то, и то — рассказ о настройках GC в JVM.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Swift(Apple)
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.06.14 15:11
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>В руби используются и круглые скобки и фигурные. Но круглые часто можно опускать.


Они там совсем для другого использовались. А в стейтментах там end-ы используются.

Еще раз повторяю Руби — не Си-подобный язык.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Swift(Apple)
От: valeskas  
Дата: 05.06.14 21:11
Оценка:
Здравствуйте, VladD2, Вы писали:

А>>Там народ извращается отключением гж. Целые тома написаны.


VD>Можно хотя бы на один ссылочку привести?


http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
искать слова All about garbage collectors
Re[6]: Swift(Apple)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 07.06.14 18:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Причем тут телефоны? Это дурь конкретных людей из МС. Возможно им влом было в ядро ОС встраивать ЖЦ.


VD>В Андройде и Виндофоне (для дотнетных приложений) ЖЦ без проблем работает и проблем не вызывает.


Вызывает, еще как. Мобильному ГЦ нужен просто конский запас по памяти, сравнивая с десктопом.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.