Статья о том, как прекрасен Rust (а вы что ждали? :-))
https://matklad.github.io//2020/07/15/two-beautiful-programs.html
https://matklad.github.io//2020/07/15/two-beautiful-programs.html
matklad.github.io
Two Beautiful Rust Programs
This is a short ad of a Rust programming language targeting experienced C++ developers.
Being an ad, it will only whet your appetite, consult other resources for fine print.
Being an ad, it will only whet your appetite, consult other resources for fine print.
"Asynchronous effects"
https://arxiv.org/abs/2003.02110
We explore asynchronous programming with algebraic effects. We complement their conventional synchronous treatment by showing how to naturally also accommodate asynchrony within them, namely, by decoupling the execution of operation calls into signalling that an operation’s implementation needs to be executed,
and interrupting a running computation with the operation’s result, to which the computation can react by installing interrupt handlers
https://arxiv.org/abs/2003.02110
We explore asynchronous programming with algebraic effects. We complement their conventional synchronous treatment by showing how to naturally also accommodate asynchrony within them, namely, by decoupling the execution of operation calls into signalling that an operation’s implementation needs to be executed,
and interrupting a running computation with the operation’s result, to which the computation can react by installing interrupt handlers
Когда ты приходишь, задаёшь вопрос, но твой стакан не то что полон, а ещё и с горкой.
===
Roman na, [20.07.20 01:25]
У меня есть вопрос к знающим людям. Всё никак понять не могу. Вот есть язык C++ и там нет завтипов, насколько я понял. И вот меня интересует следующие - почему. Т.е. чего системе типов С++ не хватает и что нужно добавить, чтобы каким-то образом реализовать/добавить завтипы?
Либо чем тот же идрис на уровне системы типов отличается от С++. Объясните - на доступном уровне, если это возможно.
Обычно все отвечают "ну там они есть, а там нет". Но понятнее не становится
Constantine Drozdov, [20.07.20 01:29]
[In reply to Roman na]
Надо примерно добавить всё, что есть в Idris, и убрать примерно всё, что есть в C++
===
via https://t.iss.one/c/1062361327/31313
(не уверен, что эта ссылка работает не только для меня)
===
Roman na, [20.07.20 01:25]
У меня есть вопрос к знающим людям. Всё никак понять не могу. Вот есть язык C++ и там нет завтипов, насколько я понял. И вот меня интересует следующие - почему. Т.е. чего системе типов С++ не хватает и что нужно добавить, чтобы каким-то образом реализовать/добавить завтипы?
Либо чем тот же идрис на уровне системы типов отличается от С++. Объясните - на доступном уровне, если это возможно.
Обычно все отвечают "ну там они есть, а там нет". Но понятнее не становится
Constantine Drozdov, [20.07.20 01:29]
[In reply to Roman na]
Надо примерно добавить всё, что есть в Idris, и убрать примерно всё, что есть в C++
===
via https://t.iss.one/c/1062361327/31313
(не уверен, что эта ссылка работает не только для меня)
Велика сила утиной типизации
===
Oleg ℕizhnik, [23.07.20 15:29]
[In reply to Александр Меньшиков]
утиная типизация - это принцип моделирования, он в голове моделирующего работает.
Работает примерно так "эти две вещи круглые, их диаметр меньше 10 см, значит вполне логично положить каждую из них в стеклянную литровую банку", даже если это фонарик и полулитровая стеклянная банка
"А если диаметр чего-то из них больше 10 см, или вещь не круглая, ничего страшного у меня есть динамическая типизация, благодаря которой банка треснет, когда я буду класть в неё неподходящую вещь. Очень удобно, какой я продуктивный"
Дальше ты рассуждаешь "я взял из этой банки вещь, она наверняка круглая и диаметром меньше 10 см, очень хороший инструмент для раскатки теста ,иначе тесты бы упали"
В результате ты вытаскиваешь из банки книгу фуко, опасную бритву, катаешь тесто, приготовленное из машинного масла и комков пыли, отрезаешь себе пальцы, окровавленными обрубками ставишь получившееся "тесто" со страницами зарождения биополитики в стиральную машину и ждёшь.
Спустя час получаешь таймаут, и начинаешь отлаживать
===
https://t.iss.one/ebanatics_learn/29351
===
Oleg ℕizhnik, [23.07.20 15:29]
[In reply to Александр Меньшиков]
утиная типизация - это принцип моделирования, он в голове моделирующего работает.
Работает примерно так "эти две вещи круглые, их диаметр меньше 10 см, значит вполне логично положить каждую из них в стеклянную литровую банку", даже если это фонарик и полулитровая стеклянная банка
"А если диаметр чего-то из них больше 10 см, или вещь не круглая, ничего страшного у меня есть динамическая типизация, благодаря которой банка треснет, когда я буду класть в неё неподходящую вещь. Очень удобно, какой я продуктивный"
Дальше ты рассуждаешь "я взял из этой банки вещь, она наверняка круглая и диаметром меньше 10 см, очень хороший инструмент для раскатки теста ,иначе тесты бы упали"
В результате ты вытаскиваешь из банки книгу фуко, опасную бритву, катаешь тесто, приготовленное из машинного масла и комков пыли, отрезаешь себе пальцы, окровавленными обрубками ставишь получившееся "тесто" со страницами зарождения биополитики в стиральную машину и ждёшь.
Спустя час получаешь таймаут, и начинаешь отлаживать
===
https://t.iss.one/ebanatics_learn/29351
Telegram
Oleg ℕizhnik in Задачник по ебанатике или "Что такое ФП"
утиная типизация - это принцип моделирования, он в голове моделирующего работает.
Работает примерно так "эти две вещи круглые, их диаметр меньше 10 см, значит вполне логично положить каждую из них в стеклянную литровую банку", даже если это фонарик и полулитровая…
Работает примерно так "эти две вещи круглые, их диаметр меньше 10 см, значит вполне логично положить каждую из них в стеклянную литровую банку", даже если это фонарик и полулитровая…
Дважды рекомендую статью Parse, Don't Validate, ну и конечно мой перевод другой статьи от того же автора: Нет, динамические системы типов по своей сути не более открыты
Хабр
Нет, динамические системы типов по своей сути не более открыты
Священные войны в интернете о системах типов по-прежнему страдают от распространенного мифа о том, что динамические системы типов по своей природе лучше подходят...
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
Уверен, многие знают и любят эту фичу