Alexander
вообще это как раз тот кусок, который мне все равно изобретать если либу использовать буду
Alexander
мне интересно несколько вещей, можно ли придумать интерфейс который будет хорошо специализироваться для per-capability буфферов
Alexander
но видимо это плохая идея до тех пор пока нельзя временно пиннить тред к капабилити
Kirill
а как это "временно"? на время логанья чтоль?
Alexander
ага
Alexander
типа: pinned $ do x <- getBuffer writeLogToBuffer x msg
Alexander
кметт такое предлагал сделать
Alexander
поидее это 1 бит в инфе о процессе менять
Alexander
без такой фичи поведения можно добиться, только если логирование не аллоцирует ничего и работает только с # объектами
Alexander
@A64m_qb0 ICFP сломалось
Alexander
https://www.youtube.com/channel/UCwRL68qZFfub1Ep1EScfmBw
Alexander
видео выложили
Andrei
и воркшопы тоже?
A64m
нет конечно
Andrei
олсо https://www.youtube.com/playlist?list=PLnqUlCo055hVknu7QAW_RUZRmRZWXmnvv православнее
A64m
@A64m_qb0 ICFP сломалось
да все нормально, видео с прошлого icfp вообще было сразу (только не разрезанное), в этот раз я не нашел где стримы можно не в прямом эфире смотреть
A64m
а вот остальное только три месяца назад закончили выкладывать
Leonid 🦇
со звуком беда какая-то
Alexander
ещё и звук вам
A64m
со звуком беда какая-то
на icfp хорошего звука не бывает
A64m
но для многих докладов хоть пейпер есть, весело когда с какого-нибудь hiw выкладывают видео где полностью неразличимый хуррбурр и еще постоянно камера перефокусируется, так что и слайдов не видно
Dmitrii
а бенч там про парсинг, да, это мимо
Открыл issue на добавление бенча про форматтинг: * https://github.com/andrewthad/chronos/issues/22 Да, это именно та библиотека, которую я имел в виду! Видел твит, что там человек бенчи реализовывал. Печально, конечно, что там только парсинг. Мне пока ни разу не приходилось парсить время, бенчи для форматирования были бы более полезными...
Зигохистоморфный
какой профит от инлайнинга?
A64m
весь профит от инлайнинга, пока не заинлайнишь - ничего как следует не оптимизируешь
Зигохистоморфный
это же тупо встраивание кода в то место короче какой-то копи-паст только на уровне компилятора
A64m
так пока код не вставишь - ничего с ним не сделаешь
A64m
т.е. какое-то время можно попереставлять "непрозрачные" функции, но только какое-то время, дальше уже без прозрачности ничего не сделать
Зигохистоморфный
это какой-то лямбда лифтинг?
A64m
да вообще все оптимизации
Зигохистоморфный
тоесть, если просадка в перформансе, то тыкай инлайн где попало и будет ок?
A64m
не все так просто, конечно
Зигохистоморфный
ну по большей степени так?
Anonymous
@nishirken будет жить. Поприветствуем!
A64m
в хаскеле же правила перезаписи, т.е. переставлением функций можно добиться больше чем обычно
Зигохистоморфный
ну реврайтинг тоже ок для оптимизаций
A64m
т.е. некоторые вещи нельзя инлайнить раньше времени, чтоб было за что правилам зацепится
A64m
но INLINE в общем-то на это и заточен
A64m
но не INLINEABLE
Зигохистоморфный
а в чем разница между ними?
A64m
и есть еще менее благоприятный способ для правил - экспоз олл анфолдингс или как там он называется
A64m
а в чем разница между ними?
компилятор особо не старается заинлайнить инлайнабл функцию, чтоб правилам были доступны внутренности для обработки правилами, но внутренности сохраняются для обработки правилами, как и в случае инлайн функций
A64m
правда, можно по мемту применения решить чтоб инлайнабл работал как инлайн для данного конкретного применения функции, есть "магическая" функция inline
Зигохистоморфный
чот пока не въехал во всю эту магию
A64m
ну есть некое пространство решений
A64m
мы можем сохранить разверку в неизменном виде, чтоб правила могли работать с внутренностями функции, но оптимизировать мы будем потом n по месту применения можем сначала оптимизировать одни внутренности, а потом сохранить в HI для дальнейшего использования, оптимизировать придется меньше, но правилам зацепиться не за что можем не сохранять развертки дакже отдельно мы можем принимать решения инлайнить по месту определения или по обстоятельствам по месту применения в хаскеле нет способа проаннотировать это все так ясно и поотдельности
A64m
есть набор каких-то мутных прагм которые называются примерно одинаково, ключей и автоматики у которой свои эвристики когда и что делать
A64m
в смысле не принимать решение инлайнить по месту определения, а принимать решение по месту определения, будем ли инлайнить на месте применения
Alexander
что-то в хроне не понравилось но на увроне байкшеддинга
Alexander
для этого одна и таже прагма?
есть inline inlineable specialize
Alexander
первое говорит заинлайнь всегда
Alexander
второе - сохрани развертку
Alexander
третье сгенерируй специализацию и сохрани
Alexander
для первого есть модификаторы когда оно срабатывает
A64m
лучше бы они inlinable назвали specializable
Alexander
но я не знаю ни одного живого человека который умеет этим пользоваться и объяснить
Alexander
это как?
есть полиморфная функция, ты ее инстанциируешь конкретным типом и сохраняешь полученный обьект
Alexander
тогда если в другом модуле компилятор встретит такую же специализацию он возьмёт готовый код
Зигохистоморфный
просто вчера у Кметта была ошибка, и он сделал инлайн и ошибка еще более специфицировалась
Alexander
ошибка компилятора или в программе?
Alexander
inline на тайпчеккер не влияет никак
A64m
ну, можно написать такие правила перезаписи, что будет влиять
Alexander
inline или правила?
Alexander
и.е. если заинлайнилось то правило перепишет во что-то другого типа?
Alexander
{-# RULES "foo inlined" foo = bogus #-}
Alexander
?
A64m
можно же делать так чтоб получался нетайпчекающийся код если правило не сработало это описанная техника, обычно так правда не делают
Alexander
тогда если foo не заинлайнено, то ошибка будет?
Alexander
похоже на то, что выше?
Alexander
только нужно сделать чтобы стреляло только на 0
A64m
вроде того, да
A64m
также обсуждается еще один способ сделать так чтоб что-то без инлайна не тайпчекалось
A64m
СПЖ в некоторых обсуждениях левити-полиморфизма предлагает использовать существующий механизм специализации для того чтоб генерить несколько версий кода левити полиморфного объявления
Alexander
и Лин типы туда же
A64m
ничё не знаю про левити, а взрыва комбинаторного не будет?
Так СПЖ так и обосновывает, мол, на практике при специализации взрыва нет, так и тут не будет
A64m
к тому же, по умолчнанию выводятся лифтед типы, т.е. пользователю такой фичи придется писать страшные сигнатуры, которые он будет писать пока они ему нужны
A64m
т.е. куча функций левити полиморфными не станут просто потому что программисту наплевать какие они там будут