Dr. Friedrich
Dr. Friedrich
Если мы не научимся чинить компилятор, то языку хана.
Hog
Ayrat
Иначе сдохнет от собственного наследия
Ayrat
Ayrat
Надо найти похожий варнинг и сделать по подобию
Ayrat
Всегда делаю по подобию когда нихера не понимаю
Dr. Friedrich
Dr. Friedrich
Скажи спасибо, что локально внутри структуры.
Ayrat
Для начала хватит
Ayrat
А не, не хватит лол
Ayrat
Бля, ты прав.
Dr. Friedrich
В идеале надо рекурсивно найти и пометить все функции, которые её мутируют
Dr. Friedrich
А при вызове такой функции ругаться
Dr. Friedrich
И это ещё реалистичная часть задачи!
Ayrat
Там же присваивание только через проперти или методы разрешено. Через проперти просто. Надо сматчить что мы тянем сеттер у структуры.
А с методом шансов около 0
Dr. Friedrich
Дальше хуже: что если функция в скомпиленном коде? Кажись, тут уже всё :(
Ayrat
Ayrat
Поправили компилятор с резолюцией By Design
Hog
By DonSyme
Pavel
до BDSM 1 буквы не хватило
Hog
ну, или SyMe
Ayrat
будем честны, структуры и работа с ними даже в C# не очень очевидны
Ayrat
спаны и ОСОБЫЕ byref структуры так вообще вывели неявные правила на новый уровень неявности
Ayrat
там просто с доками получше поэтому вот такие gotchas лучше описаны.
Ayrat
иногда мне кажется что лучше было бы как в расте - всё на стеке с бороу чекером и сам в хип ходишь.
Или как в джаве - всё на хипе, имплиситно ескейп анализ выделяет на стеке.
Ayrat
Хотя не, как в джаве говно какое-то
Ayrat
Но как в расте збс. Бороу чекер огонь
x
если раст такой заебатый, почему у меня файрфокс отжирает больше памяти чем хром?
Ayrat
мир дотнета поделён на 2 типа данных и это местами люто, хотя и позволяет писать чуть более оптимально. Наверное. Средства работы со стеком всё равно говно
Roman
Ayrat
Ayrat
@fvnever ты известный байтодрочер. Скажи, есть ли способ лучше получить поинтер на конец стака?
Ayrat
в сишарпе это было бы что-то вроде
unsafe context
byte *GetStackPtr() {
byte dummy;
return &dummy;
}
Ayrat
если спросишь зачем - отвечу, чтобы узнать сколько ещё до конца стака осталось и можно ли ещё накидать на него говна
Dr. Friedrich
Ayrat
Ayrat
даже смержено
Dr. Friedrich
Ayrat
Dr. Friedrich
Ayrat
Ayrat
EnsureStackIsEnoughSize или как-то так
Ayrat
там херня какая-то
Ayrat
@deexpp спасибо что нашёл отсутсвие трамплина в indefinetly, там надо было делеем обмазать и все твои примеры завелись
Ayrat
Если ещё найдёшь, кидай
Ayrat
там действительно
let rec f () =
cons(..., f ())
нигде не могло упереться (при жадном вычислении F# ни в лямбду, ни в лейзи примитив гопака)
Ayrat
поэтому падало с SO
Ayrat
для примера
let rec chooseJob (x2yOJ: 'x -> #Job<'y option>) (xs: AltStream<'x>) : AltStream<'y> =
xs ^=> function
| AltCons (x, xs) ->
Alt.prepare(
x2yOJ x >>- function
| None -> chooseJob x2yOJ xs
| Some x -> cons (x, chooseJob x2yOJ xs))
| AltNil -> nil
вот тут cons(x, chooseJob ...) при вычислении сразу же упирается в xs ^=> ...
что возвращает Alt, а он ленивый и его это устраивает
Ayrat
т.е. это трамплин
Pavel
merge тоже работает?
Ayrat
да
Ayrat
merge тоже работает?
уточню
S.merge fast fast
|> S.mapFun printer2
|> S.foldFun (fun s _ -> s) ()
|> run
ты про это?
Pavel
тогда обновляй гит )
Ayrat
работает после починки indefinetly
Pavel
Ayrat
а может он и не ломался у меня, дай проверю ещё раз
Vladislav
Ayrat
тут сразу надо уточнить. ты на каком фреймворке запускаешь?)
Ayrat
мы тут недавно выясняли что Hopac новый на старых фреймворках падает с SO на ровном месте
Ayrat
старые это всё что ниже 47
Pavel
Pavel
да помню. но у меня корка
Ayrat
я потестил на FSI и на корке. Не падает этот код с SO
S.merge fast fast
|> S.mapFun printer2
|> S.foldFun (fun s _ -> s) ()
|> run
Ayrat
indefinitely там из кода было ясто что обязан был упасть)
Pavel
fast через unfold?
Ayrat
Ayrat
let infiniteStream f =
S.unfoldFun (fun s -> Some (box <| f (), s)) ()
let fast =
infiniteStream (fun () -> 1)
Pavel
мля
Ayrat
Pavel
да вот такие неопределенное поведения от необъяснимости происходящего (когда у всех работает кроме тебя) напрягают.
Ayrat
Можешь ещё раз дать полный листинг кода
Pavel
на лаб?
Ayrat
Можешь прям сюда