Dr. Friedrich
Если мы не научимся чинить компилятор, то языку хана.
Ayrat
Если мы не научимся чинить компилятор, то языку хана.
Это правда. Надо разобраться в текущем и переписать на рослин
Ayrat
Иначе сдохнет от собственного наследия
Ayrat
я уже чинил ворнинги, надо потянуть
Окей, сегодня и завтра поковыряю
Ayrat
Надо найти похожий варнинг и сделать по подобию
Ayrat
Всегда делаю по подобию когда нихера не понимаю
Dr. Friedrich
Надо найти похожий варнинг и сделать по подобию
Боюсь, нету похожего, тут будет хардкор
Dr. Friedrich
Скажи спасибо, что локально внутри структуры.
Ayrat
Боюсь, нету похожего, тут будет хардкор
Нам надо найти такой АСТ который делает <- для структуры
Ayrat
Для начала хватит
Ayrat
А не, не хватит лол
Ayrat
Бля, ты прав.
Dr. Friedrich
В идеале надо рекурсивно найти и пометить все функции, которые её мутируют
Dr. Friedrich
А при вызове такой функции ругаться
Dr. Friedrich
И это ещё реалистичная часть задачи!
Ayrat
Там же присваивание только через проперти или методы разрешено. Через проперти просто. Надо сматчить что мы тянем сеттер у структуры. А с методом шансов около 0
Dr. Friedrich
Дальше хуже: что если функция в скомпиленном коде? Кажись, тут уже всё :(
Ayrat
Поправили компилятор с резолюцией By Design
Hog
By DonSyme
Pavel
до BDSM 1 буквы не хватило
Ayrat
Hog
ну, или SyMe
Ayrat
будем честны, структуры и работа с ними даже в C# не очень очевидны
Ayrat
спаны и ОСОБЫЕ byref структуры так вообще вывели неявные правила на новый уровень неявности
Ayrat
там просто с доками получше поэтому вот такие gotchas лучше описаны.
Ayrat
иногда мне кажется что лучше было бы как в расте - всё на стеке с бороу чекером и сам в хип ходишь. Или как в джаве - всё на хипе, имплиситно ескейп анализ выделяет на стеке.
Ayrat
Хотя не, как в джаве говно какое-то
Ayrat
Но как в расте збс. Бороу чекер огонь
x
если раст такой заебатый, почему у меня файрфокс отжирает больше памяти чем хром?
Ayrat
мир дотнета поделён на 2 типа данных и это местами люто, хотя и позволяет писать чуть более оптимально. Наверное. Средства работы со стеком всё равно говно
Ayrat
@fvnever ты известный байтодрочер. Скажи, есть ли способ лучше получить поинтер на конец стака?
Ayrat
в сишарпе это было бы что-то вроде unsafe context byte *GetStackPtr() { byte dummy; return &dummy; }
Ayrat
если спросишь зачем - отвечу, чтобы узнать сколько ещё до конца стака осталось и можно ли ещё накидать на него говна
Ayrat
У нас уже обещают вот-вот сделать escape analysis.
Егор говорил что вроде как уже.
Ayrat
даже смержено
Ayrat
Этот способ мне милее прочих!
прости, а прочие это какие?
Dr. Friedrich
если спросишь зачем - отвечу, чтобы узнать сколько ещё до конца стака осталось и можно ли ещё накидать на него говна
Для этого есть специальная функа в маршале (которая довольно вафельно работает, впрочем) .
Ayrat
EnsureStackIsEnoughSize или как-то так
Ayrat
там херня какая-то
Dr. Friedrich
прости, а прочие это какие?
Ну через натив наверняка можно, но удачи потом с портированием.
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
Ayrat
а может он и не ломался у меня, дай проверю ещё раз
Ayrat
странно он же там не использовался
проверил. У меня он и на обычном коде не валится с SO
Ayrat
тут сразу надо уточнить. ты на каком фреймворке запускаешь?)
Ayrat
мы тут недавно выясняли что Hopac новый на старых фреймворках падает с SO на ровном месте
Ayrat
старые это всё что ниже 47
Ayrat
Через стекфрейм мб можно?
Да, возможно. Я правда не знаю есть ли там указатели на конец фрейма. Надо посмотреть
Pavel
да помню. но у меня корка
Ayrat
я потестил на FSI и на корке. Не падает этот код с SO S.merge fast fast |> S.mapFun printer2 |> S.foldFun (fun s _ -> s) () |> run
Ayrat
indefinitely там из кода было ясто что обязан был упасть)
Pavel
fast через unfold?
Ayrat
let infiniteStream f = S.unfoldFun (fun s -> Some (box <| f (), s)) () let fast = infiniteStream (fun () -> 1)
Pavel
мля
Ayrat
мля
шо, не то?
Pavel
да вот такие неопределенное поведения от необъяснимости происходящего (когда у всех работает кроме тебя) напрягают.
Ayrat
Можешь ещё раз дать полный листинг кода
Pavel
на лаб?
Ayrat
Можешь прям сюда