habib
ну, в первую очередь спорили про динамическую типизацию
habib
так вот он может выдавать очень оптимальный машинный код
Doge
ну, в первую очередь спорили про динамическую типизацию
Про ФП и динамическую типизацию вместе
habib
ну, он в том числе фп
habib
очень даже
habib
два срача в одном: динамика против статики, и что считать фп, а что нет)))
Doge
ну, он в том числе фп
Ну он сильно менее ФП, чем та же кложура с которой все и началось.
habib
а по каким признакам это определяется?
Doge
а по каким признакам это определяется?
Ну насколько я помню cl, в нём кардинально меньший упор идёт на иммутабельность, чем в кложуре.
habib
а кто мешает иммутабельные структуры использовать
habib
если сделать упор на иммутабельность в приложение, то она будет, если не заморачиваться - то, соотвественно, нет
habib
steelbank common lisp
habib
я про него конкретно
x
почему называются тогда lua scripts
Viacheslav
Жесткую статическую вестимо.
Ну я бы не называл это типами. Там скорее размеры данных
x
ну я хз, что там сливает типизированным языкам
x
наверное скрипты, ну то не диво
KLH
у некоторых дин тип языков маленький рантайм. маленкьий рантайм хорошо помещается в кешах проца. оттого бывает быстрее на некоторых бенчах. об этом говорил дед видимо.
Igor
что-то мне кажется оно всё несколько по другому. Вот например нужно вызвать метод какого-то объекта. В статически типизированном языке почти всегда сразу известен адрес кода который нужно выполнить, а в динамически типизированном его еще нужно найти в рантайме
Bonart
Ну я бы не называл это типами. Там скорее размеры данных
Богатым этот набор типов не назовешь. Но на этом уровне что есть то есть
Bonart
ну я хз, что там сливает типизированным языкам
Любая динамика сливает статике по производительности при всех прочих равных.
Bonart
Гибкость имеет свою цену
Igor
Кек https://skillbox.ru/media/code/chto_vybrat_novichku_c_ili_f/
KLH
Любая динамика сливает статике по производительности при всех прочих равных.
это да. но тут как раз нюанс бывает, что "прочие не равны"
Bonart
это да. но тут как раз нюанс бывает, что "прочие не равны"
И эти прочие бывают неравны в любую сторону.
KLH
конечно. я вообще начал уточнять только потому что видел бенчи. и был удивлен. а так да, среднестатистически не равны не в пользу динамики
J. A. R. Kotlien
Мне вот так нравится, ещё более ML'но.
Ну и куда же без pipeline operator.
Nikolay
Как ReadOnlySequence.Slice записать в Memory/Span?
Nikolay
🤔
Vasily
@dolfik, а что ты пишешь?
Nikolay
Сокет сервер
Nikolay
На пайпах и вот этом вот всём
Vasily
Короче
Vasily
Берешь буфер
Vasily
let receive() = async { do! Async.SwitchToThreadPool() match getState() with | Connected c -> try let reader = c.Input match! (read reader) with | Ok result -> let buf=result.Buffer if(buf.Length > 0L) then let length = 4L + (result.Buffer.Slice(0,4).ToArray()|>Seg|>toInt|>fst|>int64) // trace<| sprintf "buffer size %i ,expected length %i" buf.Length length if (length <= result.Buffer.Length) then trace<| sprintf "Message received. Length=%i" length parse (result.Buffer.Slice(0L,length).ToArray()|>Seg)|>Async.Start reader.AdvanceTo(result.Buffer.GetPosition(length)) else reader.AdvanceTo(result.Buffer.Start) | Error exn -> trace exn.Message trace exn.StackTrace setState Disconnected with exn-> trace exn.StackTrace trace exn.Message setState Disconnected |_ -> () }
Vasily
Код из реального проекта
Ayrat
Как ReadOnlySequence.Slice записать в Memory/Span?
Ну для начала записывать его в спан нет смысла, слайс и есть спан. В мемори - копирнуть
Vladimir
Вот самое лучшее что я нашел =)
Vladimir
ToArray это экстеншн метод
Ayrat
Вот самое лучшее что я нашел =)
Ну вот да. Учитывая что мемори стрим по сути массив, то проще сразу в массив копирнуть
Nikolay
Вот мне что-то ToArray не нравится
Vladimir
ну ридонли сиквенс это не массив, а массив массивов)
Vladimir
Вот мне что-то ToArray не нравится
мне тоже не нравился, но похоже ничего лучшего нету из коробки
Vasily
Только надо помнить про волшебный параметр resumeWriterTreshold
Vasily
В пайпах
Vasily
Он по умолчанию 32к
Vladimir
По причине?
было бы круто читать не копируя)
Vasily
Я себе так ногу отстрелил
Ayrat
было бы круто читать не копируя)
В память между тредами?
Ayrat
Дичь какая
Nikolay
По причине?
Он же копирование выполнит, не?
Vasily
Дольфик
Vasily
Посмотри еще на ArrayPool.Shared
Nikolay
Я предположил так, что он просто укажет на кусок в памяти
Vladimir
В память между тредами?
ну да, так надо скопировать чтобы стримерами читать, а если бы стримеры могли читать сразу из ReadOnlySequence было бы без копирования
Nikolay
Хочется сделать zero alloc
Vladimir
Посмотри еще на ArrayPool.Shared
он не поможет) ToArray не предоставляет способа указать куда копировать
Ayrat
У вас читатель из сокета - обычно отдельный тред. Если вы читаете из консумера - вы не очень. Пошарить результат чтения с консумером через стек читателя невозможно. Но можно через стек консумера (стакаллок перед полингом и через аут параметр отдаем в консумера) Или через хип
Igor
@neftedollar я же покекать принес
Romɑn
@neftedollar я же покекать принес
ну вот ты покекал, а убирать кто будет?
Vladimir
Там нельзя свой буфер указать?
неа, там все само буферизируется, ты правда можешь конфигом его чуть подправлять
Ayrat
неа, там все само буферизируется, ты правда можешь конфигом его чуть подправлять
Не, я про выходной результат. Ну то есть он сам стакаллочит на своём треде и тебе копировать надо в хип чтобы поюзать в другом треде.
Ayrat
Короче, лучше аррэйПул да