Ayrat
я бы сказал что в таком отложенном выполнении нихуя отложенного уже нет
Ayrat
давай проще. Перед компилятором на самом деле вот такое (lazy SOME_EXPRESSION)
Ayrat
и то что оно у тебя выглядит как lazy (FUNC_EXPR (ARG_EXPRESSION, BODY_EXPRESSION)) и ты почему-то хочешь вычислить ARG_EXPRESSION жадно...
Ayrat
я не понимаю логику твоего желания
Ayrat
оно видит справа от lazy експрешн, оно не вычисляет его. И конечно же оно не дойдёт до вложенных экспрешнов в этом экспрешне, в твоём случае format
Ayrat
Как оно может его вычислить к слову, не вычисляя предыдущие этапы? И если так, то о каком отложенном выполнении может идти речь?
Aleksandr
я не понимаю логику твоего желания
не, он работает именно так, как я желаю. Просто возникли трудности с пониманием того, как это реализовано
Ayrat
Тоже не будет вычисляться
Aleksandr
убедил
Ayrat
в самом деле
Но без мемоизации!
Ayrat
Ну там мемоизацию тоже изи добавить
Ayrat
А вот тредсейф добавить ещё...
Ayrat
Ну тоже изи
Hog
Ну тоже изи
как-то странно на этот раз. нетрадиционно я бы сказал...
Ayrat
замечу что в данном случае printfn НЕ вычислится
Hog
я верю, что lock добавить изи :) я к тому, что не закончилось сам-знаешь-чем :))))))
Hog
и украинскими народными плясками
Ayrat
Аааа
Ayrat
ну кстати там вообще изи
Ayrat
Promise
Ayrat
и сразу тебе и лейзи, и мемоизация
Pavel
фигасе у тебя развлечения as this
Ayrat
фигасе у тебя развлечения as this
блин там штука по-интереснее слева
Ayrat
а ты про as this
Hog
интересно... квотойшон компайлер... я почему-то думал, что он для <@ @>
Hog
а тут вот оно чо
Ayrat
блин, вы всю соль снипета упускаете
Pavel
слева понятно. this тебе там зачем? знаешь как он срет в конструктор?
Ayrat
и лочить x
Hog
рифлектед деф струячит аргумент в экспрешон? не дожидаясь перетонита?
Ayrat
хуярит как аргумент
Ayrat
т.е. у тебя аргумент уже будет типа Expr<_>
Ayrat
и это происходит на callsite
Hog
Магия!
Ayrat
т.е. НЕТ вычисления этого експрешна
Ayrat
и можно не писать <@ @>
Hog
да!
Ayrat
да!
Hog
вот этого не хватало
Ayrat
так уже давно было. с 4.0
Hog
помнишь - некоторое время назад разговор заходил за ц# элвис-оператор?
Ayrat
Думаешь пора делать?)
Pavel
тормозить же будет
Hog
ну с <@ @> легко, но некрасива
Ayrat
тормозить же будет
этот квотейшн компайлер довольно быстрый, если верить автору
Ayrat
https://github.com/eiriktsarpalis/QuotationCompiler
Hog
(на лемура, кстати похоже>
Ayrat
Library Execution time GC gen0,1,2 Native 00:00:00.053 0,0,0 Unquote 00:01:46.675 9598,12,1 FSharp.Quotations.Evaluator 00:00:00.087 15,0,0 QuotationCompiler 00:00:00.053 0,0,0
Hog
Не Эрик :)))
Ayrat
то есть по скорости РАВНО нативному вызову
Hog
Квотейшон :)))
Ayrat
колд старт долгий, да
Ayrat
да там вроде как так же 0
Hog
FSharp.Quotations.Evaluator 00:00:00.087 15,0,0
Ayrat
а я им не пользовался
Hog
Native 00:00:00.053 0,0,0
Hog
а... про компилер
Hog
тогда да
Hog
то же самое
Ayrat
ну колд старт там приличный
Ayrat
кстати FSharp.Quotations.Evaluator не заброшен
Ayrat
и туда Эрик комитит
Ayrat
при такой разнице я бы забил на QuotationCompiler
Ayrat
и взял то что поддерживается
Ayrat
Походу оно полностью мигрировало. open QuotationCompiler -> open FSharp.Quotations.Evaluator QuotationCompiler.Eval -> QuotationEvaluator.Evaluate
Ayrat
вся разница в коде и работает
Ayrat
S C:\dev\test> dotnet run before lazy created after lazy created hello after lazy forced
Hog
может про спан ещё расскажешь чо-нить? как его прально готовить с фаршем?
Hog
не точно :)