Раз уж тут так много новых людей — и особенно много тех, с кем я совершенно не знаком — пожалуй, стоит рассказать немного о себе и об этом канале.
Меня зовут Антон, ястудент человек студенческого возраста и в настоящий момент я работаю программистом, по работе пишу в основном... Да, на Rust, а как вы догадались? Я люблю Rust и ненавижу примерно все остальные языки программирования. Круг моих интересов относительно широк, но на канал изливается в основном программирование (серьёзно, около половины постов с хештегом #prog). Этот канал изначально планировался как удобная свалка ссылок, материалов и #meme-ов, и... Он таковым, в сущности, и остался. В своё оправдание я могу сказать, что все статьи (выкладываемые с хештегом #article) я всегда читаю перед тем, как выложить, так что делюсь я тем, что считаю стоящим своей аудитории.
Также ведение своего канала сподвигнуло меня на написание своих постов (и иногда даже перевод чужих статей), которые я выкладываю под хештегом #моё (как, впрочем, и созданные мною мемы). В их числе я хотел бы отметить:
- написание трейта, гарантирующего нулевой размер типа
- оптимизация размера итератора из стандартной библиотеки Rust (увы, не принятая)
- реализация zero-cost форматировщиков даты
- разбор различных способ реализации полиморфизма, с их достоинствами и недостатками
- эпические "Хроники замыканий" в 3 (пока что) частях: раз, два, три
- деликатный и глубокий анализ недостатков регулярных выражений
Для удобства привожу список всех хештегов на канале (может быть пополнен в будущем):
#3dcg
#abnormalprogramming
#algo
#amazingopensource
#anime
#art
#article
#bash
#bio
#blogrecommendation
#c
#cinema
#clojure
#cpp
#csharp
#db
#demoscene
#design
#dotnet
#erlang
#game
#go
#idris
#itsec
#haskell
#js
#java
#julia
#justrustaceanthings
#kbd
#life
#math
#mechanics
#meme
#menacingopensource
#ml
#mood
#music
#outoflinestorage
#parsing
#performancetrap
#php
#pixelart
#politota
#postgresql
#prog
#psy
#puzzle
#python
#quotes
#regex
#retroit
#r
#rust
#rustasync
#rustforlinux
#rustreleasenotes
#rustlib
#scala
#science
#serde
#shell
#soc
#softskills
#sql
#successstory
#suckassstory
#tips
#typescript
#video
#web
#zig
#бомбёжкипост
#культурнаяпрограмма
#лингво
#моё
#право
#трудовыебудни
Ну и традиционно — лайки, колокольчик, рассказывайте друзьям, бла бла бла, ну, вы знаете, как это обычно выглядит. Ну и раз уж я пока не могу поприветствовать каждого лично, я поприветствую всех новоприбывших скопом:
Добро пожаловать на канал!
Меня зовут Антон, я
Также ведение своего канала сподвигнуло меня на написание своих постов (и иногда даже перевод чужих статей), которые я выкладываю под хештегом #моё (как, впрочем, и созданные мною мемы). В их числе я хотел бы отметить:
- написание трейта, гарантирующего нулевой размер типа
- оптимизация размера итератора из стандартной библиотеки Rust (увы, не принятая)
- реализация zero-cost форматировщиков даты
- разбор различных способ реализации полиморфизма, с их достоинствами и недостатками
- эпические "Хроники замыканий" в 3 (пока что) частях: раз, два, три
- деликатный и глубокий анализ недостатков регулярных выражений
Для удобства привожу список всех хештегов на канале (может быть пополнен в будущем):
#3dcg
#abnormalprogramming
#algo
#amazingopensource
#anime
#art
#article
#bash
#bio
#blogrecommendation
#c
#cinema
#clojure
#cpp
#csharp
#db
#demoscene
#design
#dotnet
#erlang
#game
#go
#idris
#itsec
#haskell
#js
#java
#julia
#justrustaceanthings
#kbd
#life
#math
#mechanics
#meme
#menacingopensource
#ml
#mood
#music
#outoflinestorage
#parsing
#performancetrap
#php
#pixelart
#politota
#postgresql
#prog
#psy
#puzzle
#python
#quotes
#regex
#retroit
#r
#rust
#rustasync
#rustforlinux
#rustreleasenotes
#rustlib
#scala
#science
#serde
#shell
#soc
#softskills
#sql
#successstory
#suckassstory
#tips
#typescript
#video
#web
#zig
#бомбёжкипост
#культурнаяпрограмма
#лингво
#моё
#право
#трудовыебудни
Ну и традиционно — лайки, колокольчик, рассказывайте друзьям, бла бла бла, ну, вы знаете, как это обычно выглядит. Ну и раз уж я пока не могу поприветствовать каждого лично, я поприветствую всех новоприбывших скопом:
Добро пожаловать на канал!
Telegram
Блог*
#prog #rust #article #моё
Как я и обещал, я... Так, погодите, я не писал об этом в блоге? Впрочем, ладно, напишу сейчас: я планировал написать перевод этой статьи и выложить его на Хабре. Собственно, сегодня я это и сделал.
Как я и обещал, я... Так, погодите, я не писал об этом в блоге? Впрочем, ладно, напишу сейчас: я планировал написать перевод этой статьи и выложить его на Хабре. Собственно, сегодня я это и сделал.
👍8🤮1💩1🤡1
#prog #haskell
Товарищ Мёртвопищ написал небольшую библиотеку для облегчения кастомизации (де)сериализации, реализованных при помощи тайпклассов Binary (того, который базируется на Generic).
github.com/0xd34df00d/binary-generic-combinators
Товарищ Мёртвопищ написал небольшую библиотеку для облегчения кастомизации (де)сериализации, реализованных при помощи тайпклассов Binary (того, который базируется на Generic).
github.com/0xd34df00d/binary-generic-combinators
GitHub
GitHub - 0xd34df00d/binary-generic-combinators: Combinators and utilities to make Generic-based deriving of Binary easier and more…
Combinators and utilities to make Generic-based deriving of Binary easier and more expressive - GitHub - 0xd34df00d/binary-generic-combinators: Combinators and utilities to make Generic-based deriv...
#prog #haskell #article
Статья (pdf) о технике, позволяющей запрограммировать регионы для выделения ресурсов (таких, как открытые файлы), удостоверяющие, что все выделенные ресурсы освобождены в конце региона (а не вычисления в целом, как в ST), что ручки к выделенным ресурсам не утекают из вычислений, корректно прокидывающее исключения (с деаллокацией ресурсов при досрочном завершении вычислений в регионе) и позволяющее вкладывать регионы один в другой без передачи значений-свидетельств вложенности регионов.
Статья (pdf) о технике, позволяющей запрограммировать регионы для выделения ресурсов (таких, как открытые файлы), удостоверяющие, что все выделенные ресурсы освобождены в конце региона (а не вычисления в целом, как в ST), что ручки к выделенным ресурсам не утекают из вычислений, корректно прокидывающее исключения (с деаллокацией ресурсов при досрочном завершении вычислений в регионе) и позволяющее вкладывать регионы один в другой без передачи значений-свидетельств вложенности регионов.
ACM SIGPLAN Notices
Lightweight monadic regions | ACM SIGPLAN Notices
We present Haskell libraries that statically ensure the safe use of resources such
as file handles. We statically prevent accessing an already closed handle or forgetting
to close it. The libraries can be trivially extended to other resources such as ...
as file handles. We statically prevent accessing an already closed handle or forgetting
to close it. The libraries can be trivially extended to other resources such as ...
#prog #haskell #article
Статья (бесстыдно стыренная с Haskell wiki) о дизайне и разработке библиотеки для красивого вывода (pretty printing) выражений.
В данной работе автор решает формализовать красивый вывод, как вывод, удовлетворяющий трём принципам (в порядке убывания важности):
1. Видимость — весь вывод должен умещаться в пределах указанной ширины.
2. Разборчивость — в выводе должна быть видна иерархичная структура данных.
3. Бережливость — вывод должен занимать как можно меньше строк.
Данная библиотека отнюдь не первая, решающая эту задачу, поэтому автор также вскользь касается прошлых библиотек — и замечает, что, ввиду использования жадных подходов, они не дают вышеозначенные свойства.
Автор сначала строит наивный алгоритм, фактически строящий все возможные варианты и выбирающий среди них наилучший — и потому ожидаемо имеющий экспоненциальное время работы — а затем вводит две оптимизации, радикально снижающие время работы за счёт раннего отбрасывания заведомо негодных вариантов. Для обеих оптимизаций автор приводит доказательства их корректности.
Разумеется, автор также проводит замеры производительности библиотеки. Эмпирические результаты показывают, что время, потраченное на вычисления оптимальной раскладки, линейно пропорционально числу строк в итоговом выводе. К сожалению, автор не даёт строгого доказательства линейности данного алгоритма, ограничиваясь правдоподобными рассуждениями (а жаль, я бы почитал).
Сравнение с прошлыми библиотеками показывает, что библиотека автора работает примерно на порядок медленнее state of art на тот момент, что автор считает удовлетворительным с учётом того, что эта библиотека, в отличие от предыдущих, достигает оптимальности раскладки согласно принципам выше.
Статья (бесстыдно стыренная с Haskell wiki) о дизайне и разработке библиотеки для красивого вывода (pretty printing) выражений.
В данной работе автор решает формализовать красивый вывод, как вывод, удовлетворяющий трём принципам (в порядке убывания важности):
1. Видимость — весь вывод должен умещаться в пределах указанной ширины.
2. Разборчивость — в выводе должна быть видна иерархичная структура данных.
3. Бережливость — вывод должен занимать как можно меньше строк.
Данная библиотека отнюдь не первая, решающая эту задачу, поэтому автор также вскользь касается прошлых библиотек — и замечает, что, ввиду использования жадных подходов, они не дают вышеозначенные свойства.
Автор сначала строит наивный алгоритм, фактически строящий все возможные варианты и выбирающий среди них наилучший — и потому ожидаемо имеющий экспоненциальное время работы — а затем вводит две оптимизации, радикально снижающие время работы за счёт раннего отбрасывания заведомо негодных вариантов. Для обеих оптимизаций автор приводит доказательства их корректности.
Разумеется, автор также проводит замеры производительности библиотеки. Эмпирические результаты показывают, что время, потраченное на вычисления оптимальной раскладки, линейно пропорционально числу строк в итоговом выводе. К сожалению, автор не даёт строгого доказательства линейности данного алгоритма, ограничиваясь правдоподобными рассуждениями (а жаль, я бы почитал).
Сравнение с прошлыми библиотеками показывает, что библиотека автора работает примерно на порядок медленнее state of art на тот момент, что автор считает удовлетворительным с учётом того, что эта библиотека, в отличие от предыдущих, достигает оптимальности раскладки согласно принципам выше.
#prog #regex #parsing #haskell
Fix-ing regular expressions
TL;DR: We add variables, let bindings, and explicit recursion via fixed points to classic regular expressions. It turns out that the resulting explicitly recursive, finitely described languages are well suited for analysis and introspection.
Если читали мои претензии к регулярным выражениям, то наверняка помните, что одной из моих претензий было отсутствие декомпозируемости. В статье это решается за счёт добавления явных переменных (точнее, привязок в форме
К сожалению, не обошлось без ложки дёгтя: даже с некоторыми оптимизациями производительность итогового решения оставляет желать лучшего — что, в принципе, вполне ожидаемо, учитывая, что распознавание использует подход regular expression derivatives, который при применении в лоб приводит к сильному распуханию промежуточных структур данных. А ещё лично меня несколько расстраивает использование в финальной версии fix и полиморфной рекурсии — это означает, что итоговый результат не переносим в лоб на другие ЯП.
Fix-ing regular expressions
TL;DR: We add variables, let bindings, and explicit recursion via fixed points to classic regular expressions. It turns out that the resulting explicitly recursive, finitely described languages are well suited for analysis and introspection.
Если читали мои претензии к регулярным выражениям, то наверняка помните, что одной из моих претензий было отсутствие декомпозируемости. В статье это решается за счёт добавления явных переменных (точнее, привязок в форме
let x = r in re
). Также добавление явного fix
расширяет возможности языка и даёт возможность использовать рекурсию. На практике это означает, что подобное решение в состоянии распарсить известный пример грамматики, являющейся контекстно-зависимой: aⁿbⁿ
.К сожалению, не обошлось без ложки дёгтя: даже с некоторыми оптимизациями производительность итогового решения оставляет желать лучшего — что, в принципе, вполне ожидаемо, учитывая, что распознавание использует подход regular expression derivatives, который при применении в лоб приводит к сильному распуханию промежуточных структур данных. А ещё лично меня несколько расстраивает использование в финальной версии fix и полиморфной рекурсии — это означает, что итоговый результат не переносим в лоб на другие ЯП.
👎2👍1