Ayrat
но дебаг был не то чтобы элементарный
Vasily
Тут скорее подрыв на константах MSBuild
Ayrat
Крылатый
Hog
Ayrat
Kirill
гопак с сишарпом дружит?
Roman
нет
Nikolay
А что за приколюха?
[<Struct>]
type Test =
new (_) =
{
I = 0
}
val mutable I: int
member x.Increment() = x.I <- x.I + 1
let b = Test()
b.Increment()
printfn "%i" b.I
Выводит 0, а если убрать атрибут struct, то 1
Nikolay
Хм, или это вызывает копирование стракта 🤔
Igor
конечно там копирование, надо let mutable b = Test()
Igor
а вот же статья была на днях, я наконец-то почитал когда это защитное копирование бывает
Denis
которая high perfomance F# ?
Nikolay
Мне нужен изменяемый каунтер в стракте
Denis
https://bartoszsypytkowski.com/writing-high-performance-f-code/
Igor
хотя может в этом случае сам компилятор делает защитную копию. Вообще это интересный вопрос - кто делает защитную копию. Надо еще раз читать
Vasily
Igor
в sharplab такой код кстати
@_.Test test = default(@_.Test);
copyOfStruct@13 = test;
copyOfStruct@13.I++;
Nikolay
Nikolay
Память можно всегда менять
Vasily
На куче
Vladislav
gsomix
gsomix
Nikolay
На куче
Не хочу вот это выставлять на кучу
Ayrat
Ayrat
Ты чо.
Ayrat
Это ж в спеке было да и логично
Vasily
Vasily
О, вот это может быть полезно
Ayrat
И вообще, если хочешь избежать копирований структа и кучи, то IsByRefLike
Igor
https://bartoszsypytkowski.com/writing-high-performance-f-code/
да, а внутри была ссылка https://devblogs.microsoft.com/premier-developer/avoiding-struct-and-readonly-reference-performance-pitfalls-with-errorprone-net/
а там написано:
x.Y causes a defensive copy of the x if:
x is a readonly field and
the type of x is a non-readonly struct and
Y is not a field.
Nikolay
Nikolay
Ayrat
Чего ты и добиваешься
Ayrat
Не хочу вот это выставлять на кучу
Ayrat
Ты ж сам сказал что не хочешь на кучу
Ayrat
Ты там определись
Nikolay
Ayrat
Nikolay
Так как этот код очень часто вызывается
Ayrat
Бля. Инкременти сколько влезет в реф структе
Nikolay
Ayrat
Короче, если чо, то ответ на твой изначальный вопрос - там надо объявлять как мутабл или передавать структ как byref / inref чтобы компилятор не делал дефенсив копии
Ayrat
Или делай обычный структ и передавай его везде byref
Ilya
мутабельные структуры ведут на тёмную сторону силы
Ayrat
Но там ты все ещё можешь утечь на кучу
Nikolay
Хм, я правильно понял, что:
let mutable a = Test()
Не будет копирований вызывать?
gsomix
gsomix
Отлично. Можно дальше в Desperados 3 играть. :)
gsomix
Евгений
Anatoly
а тут кто-то вроде бы делал телегу для бизнеса
Anatoly
это ещё так?
Mikhαil
Ayrat
А вот и покупатель
Ayrat
Давайте я буду вашим посредником, 5% комиссии
Ayrat
Если кто-то еще хочет быть посредником, не стесняйтесь
Vasiliy
Ты вообще в Ирландии большую часть времени
Ayrat
Anatoly
Ayrat
Спасибо
не забудь что я в доле!1
Nikolay
Ayrat
два промоушна этому коррупционеру
Ayrat
а с полицией 0 раз
Ayrat
но думаю что бытовой тут мало
Ayrat
но уверен что небытовой навалом - строительство и застройка
Ilya