Forwarded from rusta::mann
< мем из профунктора
Я сгорел, ведь правильно приготовленный type-driven design оберегает от кучи логических ошибок, особенно связанных с проверками инвариантов (пресловутый is_initialized() вместо типа, который гарантирован находиться в валидном состояннии всегда).
Рекоммендую прочитать Parse, don't validate, или ее растоадаптацию для хабра.
Я сгорел, ведь правильно приготовленный type-driven design оберегает от кучи логических ошибок, особенно связанных с проверками инвариантов (пресловутый is_initialized() вместо типа, который гарантирован находиться в валидном состояннии всегда).
Рекоммендую прочитать Parse, don't validate, или ее растоадаптацию для хабра.
Forwarded from Блог*
#prog #rust #article
На этот раз — статья про концепцию разномерности типа в Rust.
github.com/pretzelhammer/rust-blog/blob/master/posts/sizedness-in-rust.md
На этот раз — статья про концепцию разномерности типа в Rust.
github.com/pretzelhammer/rust-blog/blob/master/posts/sizedness-in-rust.md
GitHub
rust-blog/posts/sizedness-in-rust.md at master · pretzelhammer/rust-blog
Educational blog posts for Rust beginners. Contribute to pretzelhammer/rust-blog development by creating an account on GitHub.
Forwarded from 𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Я помню свои первые впечатления, когда я сделал какой-то простой алгоритм на Rust, скомпилировал и попытался запустить. Что такое? Ничего не произошло? Я попытался ещё раз нажать ENTER на этот исполняемый файл, и вроде снова ничего не произошло... Нажатие Ctrl+O выявило собственно "проблему" - код отрабатывал настолько быстро, что я даже не успевал заметить моргание панелей MC 😊
Это было настолько свежим впечатлением после других, более тяжеловесных платформ, что я тут же полез скачивать и изучать Rust Book.
С тех пор прошла целая куча времени, и видно, как платформа (а язык Rust теперь смело можно называть не просто языком, а платформой) растёт и матереет, для меня наиболее значимым изменением оказались NLL, я прямо ощутил, насколько легче стало делать алгоритмический код, включающий в себя, как правило, множество изменяемых структур данных. И нельзя не отметить также насколько улучшился Rust плагин для моей любимой среды программирования Intellij Idea.
За эти 5 лет я стал участником русскоязычного Rust сообщества и Rust стал моим профессиональным инструментом. Мой путь в Rust был довольно долог и тернист, но сейчас у меня нет ощущения, что мне хочется переходить куда-то ещё. Так что пока я поработаю на Rust-е😊
Это было настолько свежим впечатлением после других, более тяжеловесных платформ, что я тут же полез скачивать и изучать Rust Book.
С тех пор прошла целая куча времени, и видно, как платформа (а язык Rust теперь смело можно называть не просто языком, а платформой) растёт и матереет, для меня наиболее значимым изменением оказались NLL, я прямо ощутил, насколько легче стало делать алгоритмический код, включающий в себя, как правило, множество изменяемых структур данных. И нельзя не отметить также насколько улучшился Rust плагин для моей любимой среды программирования Intellij Idea.
За эти 5 лет я стал участником русскоязычного Rust сообщества и Rust стал моим профессиональным инструментом. Мой путь в Rust был довольно долог и тернист, но сейчас у меня нет ощущения, что мне хочется переходить куда-то ещё. Так что пока я поработаю на Rust-е😊
^^^ Это мои слова, приведённые в статье, посвящённой годовщине выхода Rust. Более тяжеловесные платформы здесь имелись ввиду JVM (Java, Scala) и Haskell. Особенно первое.
Хабр
Пять лет Rust
В этом бардаке, который сейчас происходит в мире, легко забыть, что прошло уже пять лет с выпуска 1.0 в 2015 году! Rust за эти пять лет сильно изменился, так что...
^^^ Это об одном счастливом рефакторинге.
В какой-то момент я пришёл к выводу, что мне свои деревья надо переделывать. Я применил довольно спорное решение:
И таким образом вроде как мы можем гарантировать, что все
Но беда подкралась в тот момент, когда мне стало нужно несколько экземпляров деревьев, когда мы получаем
И тут может случиться паника из-за вон того
То есть изначальная моя идея о том, чтобы ходить в дерево с
Но кстати и там у меня был выбор:
можно было допилить и сделать дерево с несколькими корнями (и тогда экземпляр дерева был бы только 1), или избавлятья от этого
Я выбрал таки избавиться, соответственно все
Переделки обещали быть многочасовыми и долгими, с фиксом кода, тестов и вот этого всего. Но как в дообрых индийских фильмах, всё разрешилось сразу и полностью, код и тесты заработали как только компилятор перестал ругаться.
В какой-то момент я пришёл к выводу, что мне свои деревья надо переделывать. Я применил довольно спорное решение:
pub fn get_node_mut(&mut self, r: Key<K>) -> &mut Node<K, T> {Вот этот
self.pool.get_mut(&r).expect("Tree invariant violation")
}
Key<K>
— это тонкая обёртка (newtype) вокруг обобщённого типа K
. И моя идея была такова, что этот Key<_>
руками сконструировать невозможно, его можно получить только через методы вроде add_child_node
.И таким образом вроде как мы можем гарантировать, что все
Key<K>
обязательно содержатся в дереве, и поэтому можно просто возвращать &Node
(операций удаления элементов нет, всё хорошо).Но беда подкралась в тот момент, когда мне стало нужно несколько экземпляров деревьев, когда мы получаем
Key<_>
из одного экземпляра дерева, а потом берём этот ключ, и говорим get_node/get_node_mut
у другого экземпляра дерева.И тут может случиться паника из-за вон того
.expect("Tree invariant violation")
.То есть изначальная моя идея о том, чтобы ходить в дерево с
Key
была неудачная. Я поздно это понял, только когда уже в реальном коде столкнулся с несколькими деревьями.Но кстати и там у меня был выбор:
можно было допилить и сделать дерево с несколькими корнями (и тогда экземпляр дерева был бы только 1), или избавлятья от этого
Key
.Я выбрал таки избавиться, соответственно все
get_node
отныне должны вовзращать Option
.Переделки обещали быть многочасовыми и долгими, с фиксом кода, тестов и вот этого всего. Но как в дообрых индийских фильмах, всё разрешилось сразу и полностью, код и тесты заработали как только компилятор перестал ругаться.
Forwarded from dd if=/dev/stuff of=/dev/tg
Вчера стартовала бесплатная онлайн-конференция Haskell.Love. Сегодня с 16:00 на твиче начинаются доклады второго и заключительного дня: https://haskell.love/agenda-day-2
Из того, что лично я рекомендую не пропустить:
— Доклад Филип Уодлера «Propositions as Types» — материал старый, но просто за харизму докладчика стоит послушать ❤️
— Доклад Кристофера Фогта «Writing 2D games using super simple Haskell» — для тех, кто спрашивает «а что на этом вашем хаскеле вообще пишут?»
— Доклад Дерека Элкинса «Quotient Types + Behavioral Reflection = ?»
— Доклад Бартоша Милевского «Replacing functions with data» про технику дефункционализации…
— …либо доклад Габриэля Гонзалеса «How to market Haskell to a mainstream programmer», если интересен прикладной аспект хаскеля
— Доклад Ричайда Эйзенберга «Parameters of many Flavors»
— Ну и, наконец, доклад Эмили Пиллмор «Hulk SMASH: re-imagining the Maybe-monad and its design space»
Вчера тоже были крутые доклады — скажем, Вероника Ромашкина и Дмитрий Коваников представили офигенный Stan, Владислав Завьялов очень круто рассказал, как рассахариваются разные фичи хаскеля в GHC Core, а Андрес Лох поведал про Typed Template Haskell с использованием Staging (вот слайды).
Из того, что лично я рекомендую не пропустить:
— Доклад Филип Уодлера «Propositions as Types» — материал старый, но просто за харизму докладчика стоит послушать ❤️
— Доклад Кристофера Фогта «Writing 2D games using super simple Haskell» — для тех, кто спрашивает «а что на этом вашем хаскеле вообще пишут?»
— Доклад Дерека Элкинса «Quotient Types + Behavioral Reflection = ?»
— Доклад Бартоша Милевского «Replacing functions with data» про технику дефункционализации…
— …либо доклад Габриэля Гонзалеса «How to market Haskell to a mainstream programmer», если интересен прикладной аспект хаскеля
— Доклад Ричайда Эйзенберга «Parameters of many Flavors»
— Ну и, наконец, доклад Эмили Пиллмор «Hulk SMASH: re-imagining the Maybe-monad and its design space»
Вчера тоже были крутые доклады — скажем, Вероника Ромашкина и Дмитрий Коваников представили офигенный Stan, Владислав Завьялов очень круто рассказал, как рассахариваются разные фичи хаскеля в GHC Core, а Андрес Лох поведал про Typed Template Haskell с использованием Staging (вот слайды).
А меня так бесит реакция на ^W в разных приложениях и браузерах
В Intellij Idea оно (сочетание) для инкрементального увеличивающегося выделения части слова под курсором - слова - обрамляющего выражения и так далее. Это настолько удобная фича, что её жмёшь уже бессознательно и тут херак -- и окно закрылось 😖
В Intellij Idea оно (сочетание) для инкрементального увеличивающегося выделения части слова под курсором - слова - обрамляющего выражения и так далее. Это настолько удобная фича, что её жмёшь уже бессознательно и тут херак -- и окно закрылось 😖
Forwarded from мне не нравится реальность (вафель 🧇)
По привычке нажал
^R
в плейграунде, чтобы заменить текст и страница перегрузилась стерев весь мой код >_<This media is not supported in your browser
VIEW IN TELEGRAM
Уверен, многие знают и любят эту фичу
Не распознал сарказм, чёрт. Пора спать уже
===
Doctor Foland Dondoa:
payload = generate_payload(**locals(), exclude=['files'])
ЭТО БЛЯТЬ ГЕНИАЛЬНО
**locals()
Nick Linker:
Щас бы называть неконтролируемый эффект доступа к окружению гениальным 😑
Berkus Decker:
думаю это был сраказм
Doctor Foland Dondoa:
ну вот я бы до такого маразма не додумался
но есть гении однако
===
via https://www.tg-me.com/rust_offtopic/341279
===
Doctor Foland Dondoa:
payload = generate_payload(**locals(), exclude=['files'])
ЭТО БЛЯТЬ ГЕНИАЛЬНО
**locals()
Nick Linker:
Щас бы называть неконтролируемый эффект доступа к окружению гениальным 😑
Berkus Decker:
думаю это был сраказм
Doctor Foland Dondoa:
ну вот я бы до такого маразма не додумался
но есть гении однако
===
via https://www.tg-me.com/rust_offtopic/341279
Telegram
Doctor Foland Dondoa in rust_offtopic
payload = generate_payload(**locals(), exclude=['files'])
ЭТО БЛЯТЬ ГЕНИАЛЬНО
ЭТО БЛЯТЬ ГЕНИАЛЬНО
Я поддержу растамана,
anyhow
когда вам нужно "по-быстрому", и thiserror
когда вам нужно "правильно".Forwarded from rusta::mann
Неплохой обзор языков со статической типизацией и набором фич, которые поддерживают системы типов каждого из языков (и проблем, которые их системы типов содержат).
https://typing-is-hard.ch/
https://typing-is-hard.ch/