The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Apple выпустил язык программирования Swift 5.3 и открыл код библиотеки Swift System, opennews (ok), 26-Сен-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


33. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +/
Сообщение от Аноним (-), 26-Сен-20, 13:21 
>> Но бинарный код в итоге должен получиться по производительности такой же, как если бы мы написали его на С++.

сомнительно, потому что в swift используется ARC для ссылочных типов(напр. class), и чем больше создаётся объектов классов, тем чаще срабатывает ARC, а без class вряд ли получится обойтись, заменив class на struct, потому что в swift по умолчанию struct копируемые, а moveonly struct всё ещё нет, для moveonly struct нужно реализовать механизмы ownership и borrowing, а это значит, что должен быть borrow checker в компиляторе swift

Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

43. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +/
Сообщение от НяшМяш (ok), 26-Сен-20, 15:49 
Структуры в Swift используют copy-on-write. То есть спокойно можно передавать структуру в методы и ничего копироваться не будет. А если вам нужно структуру модифицировать избежав копирования, то всегда есть inout и &
Ответить | Правка | Наверх | Cообщить модератору

45. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +/
Сообщение от Anonymous23554 (?), 26-Сен-20, 16:05 
есть сомнения, что вы про Array и Dictionary, которые copy-on-write, но в swift на данный момент есть только копируемые struct, а перемещаемых struct нет на данный момент.
Ответить | Правка | Наверх | Cообщить модератору

52. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +/
Сообщение от НяшМяш (ok), 26-Сен-20, 16:53 
Да, точно, только коллекции CoW. Но это не отменяет возможности структуры перемещать. Хотя и делается это немного костыльно:

func address(of data: UnsafeRawPointer) -> Int {
  return Int(bitPattern: data)
}

struct MoveOnly {
    var prop: Int = 0
}

func doSomething(data: inout MoveOnly) -> Void {
    data.prop = 5
    
    print(address(of: &data))
}


var base = MoveOnly()
print(address(of: &base))

base.prop = 3
print(address(of: &base))

doSomething(data: &base)
print(address(of: &base))

Такой код у меня печатает один и тот же адрес. А вот если я захочу из doSomething вернуть MoveOnly (или даже UnsafePointer<MoveOnly>), тогда результат будет копией.

Ответить | Правка | Наверх | Cообщить модератору

57. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +1 +/
Сообщение от Аноним (13), 26-Сен-20, 17:38 
Кстати хорошее замечание, этого в swift еще не проверял. Возможно тут вы правы
Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

59. "Apple выпустил язык программирования Swift 5.3 и открыл код ..."  +/
Сообщение от Аноним (13), 26-Сен-20, 18:05 
Хотя, в С++ я стараюсь получать shared_ptr везде по ссылке, так как инкрементировать счетчик ссылок в такой ситуации нет смысла. Подозреваю, что при передачи экземпляра класса в swift аргументом функции там также счетчик не инкрементируется
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру