Forwarded from Αλεχ Zhukovsky
https://habr.com/ru/post/472780/ - в плюсах оно может вот так стрельнуть. В расте - вряд ли
  
  Хабр
  
  Зачем избегать друзей, или как я растерял все свои плюсы
  Привет, Хабр. Пару дней назад мне на глаза попался вот этот твит: C++ - Stateful TMP#cpp #cplusplus #Cpp20https://t.co/Q3sh3XtiHC pic.twitter.com/AkCRB2zvrT— Kri...
  Зигохистоморфный Препроморфизм:
чтобы при моделировании через фри монады избавится от T -> a нужно энкодить через Free + Coyoneda
λeonid Onokhov:
через GADTs не расширяемо выходит. на каждый тип добавлять конструктор
Зигохистоморфный Препроморфизм:
https://github.com/sacundim/free-operational/blob/master/Control/Monad/Operational/Simple.hs#L24
https://github.com/sacundim/free-operational#example-applicative-version-of-reader
немного описания такого поведения
https://jstimpfle.de/blah/free-monads-gadts.html
ответ Кметта
https://stackoverflow.com/questions/14263363/is-operational-really-isomorphic-to-a-free-monad#comment19859454_14263363
  
  чтобы при моделировании через фри монады избавится от T -> a нужно энкодить через Free + Coyoneda
λeonid Onokhov:
через GADTs не расширяемо выходит. на каждый тип добавлять конструктор
Зигохистоморфный Препроморфизм:
https://github.com/sacundim/free-operational/blob/master/Control/Monad/Operational/Simple.hs#L24
https://github.com/sacundim/free-operational#example-applicative-version-of-reader
немного описания такого поведения
https://jstimpfle.de/blah/free-monads-gadts.html
ответ Кметта
https://stackoverflow.com/questions/14263363/is-operational-really-isomorphic-to-a-free-monad#comment19859454_14263363
GitHub
  
  sacundim/free-operational
  Operational-style Applicative, Alternative, Monad and MonadPlus, using free monads. - sacundim/free-operational
  Forwarded from Oleg Andreev
Тут интересная история: самый быстрый и аккуратный стек ZKP криптографии написан на Расте: https://medium.com/interstellar/bulletproofs-pre-release-fcb1feb36d4b
Но не потому что компилятор такой быстрый, а потому что язык позволяет всю логику очень аккуратно организовать, от арифметики кривой, до высокоуровневых протоколов. На плюсах никто из тех, кто понимает тему, не осилил бы это. А криптография, которую пишут на си/с++ - это обычно тихий пиздец.
  
  Но не потому что компилятор такой быстрый, а потому что язык позволяет всю логику очень аккуратно организовать, от арифметики кривой, до высокоуровневых протоколов. На плюсах никто из тех, кто понимает тему, не осилил бы это. А криптография, которую пишут на си/с++ - это обычно тихий пиздец.
Medium
  
  Bulletproofs pre-release
  We are excited to announce a pre-release version of our Bulletproofs implementation, providing a stable interface for creating and…
  Forwarded from Mikail Bagishov
А зачем ему брать разность указателей? Ты уверен, что этот кейс не покрывается уже имеющимися решениями? Например, чтобы узнать расположение поля в структуре, есть крейт memoffset.
  Проблема в том, что в текущих типах эта проблема вообще не решается. Коротко от лодочника: https://twitter.com/withoutboats/status/1027702531361857536?s=21
Так что есть мнение что чтобы это так работало нужно было прям вообще сильно иначе всё делать. Ну или жить с "почти" монадами, как впрочем и хаскель живет с "почти" категорией Hask.
  
  Так что есть мнение что чтобы это так работало нужно было прям вообще сильно иначе всё делать. Ну или жить с "почти" монадами, как впрочем и хаскель живет с "почти" категорией Hask.
Twitter
  
  Saoirse Shipwreckt
  MONADS AND RUST A THREAD - or - why async/await instead of do notation
  И Ivan:
А подскажите, можно ли сделать композицию функции с 2-мя параметрами?
Тоесть
f(g(x), h(y))?
Alexander Vershilov:
compose f g h = \x y -> f (g x) (h y)
((flip . ((.) .)) .) . (.) - для любителей pointfree
Sergey:
Читаемо, поддерживаемо, расширяемо )
Alexander Vershilov:
c f g h = curry (uncurry f . first g . second h)
так человечнее
  А подскажите, можно ли сделать композицию функции с 2-мя параметрами?
Тоесть
f(g(x), h(y))?
Alexander Vershilov:
compose f g h = \x y -> f (g x) (h y)
((flip . ((.) .)) .) . (.) - для любителей pointfree
Sergey:
Читаемо, поддерживаемо, расширяемо )
Alexander Vershilov:
c f g h = curry (uncurry f . first g . second h)
так человечнее
Alexander Vershilov:
Как наиболее дешево getClosureSize сделать в живой программе
ghc-heap-view в собранную пргограмму же докинуть можно?
хм, там же был размер, чот не вижу 😕
ghc-datasize
TIL если не указывать custom-setup, то подставляется зависимость Cabal <1.25
optional-packages - прекрасно, добавил зависимость пропатчил попробовал - выкинул
ghc-datasize показывает ерудну, что делать?
О! Не ерунду
177696 -> 98304 за счет компактов
почти в 2 раза ужать структурку и ещё и сделать удобной для GC
в общем я крайне доволен компактами
самый большой набор ip приводит к токену в 1kb, не очень круто
Denis Redozubov:
ты GC оптимизируешь?
Alexander Vershilov:
Ну так нужно кеш добавить, который заведомо не просадит поведение
А то нагрузка и так хорошая, а ещё и ддосят периодически
HashMap + Generic Vector которые мне в кеше нужны не очень клёвые для GC
А собрать всё в компакт оказалось делом пары строк
Roman:
а выложи эти пару строк посмотреть, пожалуйста
Alexander Vershilov:
+- имена индентификаторов:
ref <- newIORef =<< compact HM.empty
let hdl = Handle $ \cid key -> runExceptT $ do
storage <- liftIO $ fmap getCompact $ readIORef ref
c_storage <- HM.lookup cid storage !!? NoRestriction
V.toList <$> HM.lookup key c_storage !!? Missing
pure (hdl, compact >=> writeIORef ref)
строки о компактах в общем-то только compact и getCompact
Отдает функцию для обновления стоража в фоне и функцию поиска в текущем состоянии
  Как наиболее дешево getClosureSize сделать в живой программе
ghc-heap-view в собранную пргограмму же докинуть можно?
хм, там же был размер, чот не вижу 😕
ghc-datasize
TIL если не указывать custom-setup, то подставляется зависимость Cabal <1.25
optional-packages - прекрасно, добавил зависимость пропатчил попробовал - выкинул
ghc-datasize показывает ерудну, что делать?
О! Не ерунду
177696 -> 98304 за счет компактов
почти в 2 раза ужать структурку и ещё и сделать удобной для GC
в общем я крайне доволен компактами
самый большой набор ip приводит к токену в 1kb, не очень круто
Denis Redozubov:
ты GC оптимизируешь?
Alexander Vershilov:
Ну так нужно кеш добавить, который заведомо не просадит поведение
А то нагрузка и так хорошая, а ещё и ддосят периодически
HashMap + Generic Vector которые мне в кеше нужны не очень клёвые для GC
А собрать всё в компакт оказалось делом пары строк
Roman:
а выложи эти пару строк посмотреть, пожалуйста
Alexander Vershilov:
+- имена индентификаторов:
ref <- newIORef =<< compact HM.empty
let hdl = Handle $ \cid key -> runExceptT $ do
storage <- liftIO $ fmap getCompact $ readIORef ref
c_storage <- HM.lookup cid storage !!? NoRestriction
V.toList <$> HM.lookup key c_storage !!? Missing
pure (hdl, compact >=> writeIORef ref)
строки о компактах в общем-то только compact и getCompact
Отдает функцию для обновления стоража в фоне и функцию поиска в текущем состоянии
Mike Lubinets:
Но если надо динамически, то тут только боксить, конечно.
Dima:
https://github.com/rust-lang/rust/blob/5205ae8bdc2991eecf3bfbb58ed8f56c0673e738/src/librustc/ty/mod.rs#L603-L706 вот че-то такое в итоге запилил
Mike Lubinets:
Хакерство)
  
  Но если надо динамически, то тут только боксить, конечно.
Dima:
https://github.com/rust-lang/rust/blob/5205ae8bdc2991eecf3bfbb58ed8f56c0673e738/src/librustc/ty/mod.rs#L603-L706 вот че-то такое в итоге запилил
Mike Lubinets:
Хакерство)
GitHub
  
  rust-lang/rust
  Empowering everyone to build reliable and efficient software. - rust-lang/rust
  Forwarded from Dima
с другой стороны кто из раст сообщества юзает хотя бы https://github.com/dtolnay/no-panic
  
  GitHub
  
  GitHub - dtolnay/no-panic: Attribute macro to require that the compiler prove a function can't ever panic
  Attribute macro to require that the compiler prove a function can't ever panic - dtolnay/no-panic
  Forwarded from Nikita Vilunov
ты не можешь в расте создать тип, который можно дропнуть только передав какое-то дополнительное значение
  Nikita Vilunov:
например тебе нужно закрыть сессию с сервером с каким-то результатом. в линейной системе типов ты бы создал сесионный тип и функцию close(Session, &Msg)
вот тебе пожалуйста юзкейз
Анто Шка:
Ты лучше про BufWriter расскажи и про то, как он в дропе проёбывает ошибки от .flush()
Nikita Vilunov:
вообще интересно зачем ты веришь в то, что у раста линейные типы, у тебя от этого погода солнечнее?
Анто Шка:
А что там рассказывать? BufWriter в дропе дёргает .flush(), чтобы все данные из буфера записались. .flush(), разумеется, может возвращать ошибку. Но если она происходит в дропе, то ты про неё не узнаешь, вообще
  например тебе нужно закрыть сессию с сервером с каким-то результатом. в линейной системе типов ты бы создал сесионный тип и функцию close(Session, &Msg)
вот тебе пожалуйста юзкейз
Анто Шка:
Ты лучше про BufWriter расскажи и про то, как он в дропе проёбывает ошибки от .flush()
Nikita Vilunov:
вообще интересно зачем ты веришь в то, что у раста линейные типы, у тебя от этого погода солнечнее?
Анто Шка:
А что там рассказывать? BufWriter в дропе дёргает .flush(), чтобы все данные из буфера записались. .flush(), разумеется, может возвращать ошибку. Но если она происходит в дропе, то ты про неё не узнаешь, вообще
Forwarded from 𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Как тут не вспомнить знаменитые слова
Новые научные идеи побеждают не потому, что их противники признают свою неправоту, просто противники эти постепенно вымирают, а подрастающее поколение, не обремененное предрассудками, усваивает новые идеи сразу. (Макс Планк)
  Новые научные идеи побеждают не потому, что их противники признают свою неправоту, просто противники эти постепенно вымирают, а подрастающее поколение, не обремененное предрассудками, усваивает новые идеи сразу. (Макс Планк)
Forwarded from Nik Bond
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
structopt = { version = "0.2.18", features = [ "paw" ] }
failure = "0.1.5"Да