^^^ Это об одном счастливом рефакторинге.
В какой-то момент я пришёл к выводу, что мне свои деревья надо переделывать. Я применил довольно спорное решение:
И таким образом вроде как мы можем гарантировать, что все
Но беда подкралась в тот момент, когда мне стало нужно несколько экземпляров деревьев, когда мы получаем
И тут может случиться паника из-за вон того
То есть изначальная моя идея о том, чтобы ходить в дерево с
Но кстати и там у меня был выбор:
можно было допилить и сделать дерево с несколькими корнями (и тогда экземпляр дерева был бы только 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://t.iss.one/rust_offtopic/341279
===
Doctor Foland Dondoa:
payload = generate_payload(**locals(), exclude=['files'])
ЭТО БЛЯТЬ ГЕНИАЛЬНО
**locals()
Nick Linker:
Щас бы называть неконтролируемый эффект доступа к окружению гениальным 😑
Berkus Decker:
думаю это был сраказм
Doctor Foland Dondoa:
ну вот я бы до такого маразма не додумался
но есть гении однако
===
via https://t.iss.one/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/
Forwarded from Kai Ren
ожидания: бог алгоритмики
реальность: императивная макака
реальность: императивная макака
AMD + Rust = 🦄❤️
Ну во всяком случае работа по этому направлению становится активнее, что не может не радовать.
https://bheisler.github.io/post/state-of-gpgpu-in-rust/
Ну во всяком случае работа по этому направлению становится активнее, что не может не радовать.
https://bheisler.github.io/post/state-of-gpgpu-in-rust/
bheisler.github.io
The State of GPGPU in Rust
At work a few months ago, we started experimenting with GPU-acceleration. My boss asked if I was interested. I didn’t know anything about programming GPUs, so of course I said “Heck yes, I’m interested!“. I needed to learn about GPUs in a hurry, and that…
^^^ Или лучше сказать, GPU + Rust, потому что в статье не только об OpenCL и Вулканах, а также и CUDA, которая как известно является проприетарной технологией Nvidia.
Forwarded from Dev Meme / devmeme
This media is not supported in your browser
VIEW IN TELEGRAM
Submitted by @Strangerx