Ayrat
но дебаг был не то чтобы элементарный
Vasily
Тут скорее подрыв на константах MSBuild
Ayrat
Тут скорее подрыв на константах MSBuild
эт да. я сам на такое попадался
Vasily
эт да. я сам на такое попадался
Там, кстати, такое только под нетстандарт надо или по умолчанию?
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()
Nikolay
конечно там копирование, надо let mutable b = Test()
И он его каждый раз будет копировать при изменении?
Igor
а вот же статья была на днях, я наконец-то почитал когда это защитное копирование бывает
Denis
которая high perfomance F# ?
Nikolay
Мне нужен изменяемый каунтер в стракте
Igor
которая high perfomance F# ?
ну да, там еще ссылки внутри были
Denis
https://bartoszsypytkowski.com/writing-high-performance-f-code/
Igor
хотя может в этом случае сам компилятор делает защитную копию. Вообще это интересный вопрос - кто делает защитную копию. Надо еще раз читать
Igor
в sharplab такой код кстати @_.Test test = default(@_.Test); copyOfStruct@13 = test; copyOfStruct@13.I++;
Nikolay
Память можно всегда менять
Vasily
На куче
Nikolay
let mutable b = Test()
Я копирований хочу избежать
Nikolay
На куче
Не хочу вот это выставлять на кучу
Ayrat
Ты чо.
Ayrat
Это ж в спеке было да и логично
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
Это ж в спеке было да и логично
Некогда спеки читать
Ayrat
Там куча ограничений накладывается
Везде где ты утекаешь на кучу, да
Ayrat
Чего ты и добиваешься
Nikolay
Везде где ты утекаешь на кучу, да
Оно не дает тебе в кучу закинуть
Ayrat
Не хочу вот это выставлять на кучу
Ayrat
Ты ж сам сказал что не хочешь на кучу
Ayrat
Ты там определись
Nikolay
Ты ж сам сказал что не хочешь на кучу
Но хочу каунтер инкрементить
Nikolay
Так как этот код очень часто вызывается
Ayrat
Бля. Инкременти сколько влезет в реф структе
Ayrat
Короче, если чо, то ответ на твой изначальный вопрос - там надо объявлять как мутабл или передавать структ как byref / inref чтобы компилятор не делал дефенсив копии
Ayrat
Но копирования жеж будут
Реф структы передаются по РЕФЕРЕНСУ, Николай
Ayrat
Или делай обычный структ и передавай его везде byref
Ilya
мутабельные структуры ведут на тёмную сторону силы
Ayrat
Но там ты все ещё можешь утечь на кучу
Nikolay
Хм, я правильно понял, что: let mutable a = Test() Не будет копирований вызывать?
Nikolay
Посмотри в IL.
Не копирует, спасибо
gsomix
Отлично. Можно дальше в Desperados 3 играть. :)
Roman
Отлично. Можно дальше в Desperados 3 играть. :)
ты почуял, что в чате кто-то что-то не понимает?
Евгений
Anatoly
а тут кто-то вроде бы делал телегу для бизнеса
Anatoly
это ещё так?
Ayrat
А вот и покупатель
Ayrat
Давайте я буду вашим посредником, 5% комиссии
Ayrat
Если кто-то еще хочет быть посредником, не стесняйтесь
Vasiliy
Ты вообще в Ирландии большую часть времени
Ayrat
Ты вообще в Ирландии большую часть времени
это не мешает мне получить 5%!!1
Anatoly
Ayrat
Спасибо
не забудь что я в доле!1
Anatoly
не забудь что я в доле!1
Мы тебя за эту долю на дежурство поставим
Nikolay
Ayrat
два промоушна этому коррупционеру
Ilya
два промоушна этому коррупционеру
Ты кстати столкнулся с коррупцией в Ирландии?
Ayrat
Ты кстати столкнулся с коррупцией в Ирландии?
нет, но я с гос структурами общался очень мало.
Ayrat
а с полицией 0 раз
Ayrat
но думаю что бытовой тут мало
Ayrat
но уверен что небытовой навалом - строительство и застройка