#prog #rust #rustlib
Иногда бывает полезным не использовать порядок, определённый на типе при помощи Ord, а использовать порядок, заданный некой внешней сущностью. Крейт comparator даёт интерфейс
Как известно, куча из std Rust является максимальной кучей, т. е. на вершине лежит максимальный элемент. Для того, чтобы сделать минимальную кучу, приходится оборачивать элементы в
comparator на crates.io
Документация
Иногда бывает полезным не использовать порядок, определённый на типе при помощи Ord, а использовать порядок, заданный некой внешней сущностью. Крейт comparator даёт интерфейс
Comparator<T>
с методом compare(&self , &T, &T) -> Ordering
. Само по себе это не очень интересно, но на базе этой абстракции можно построить уже непосредственно полезные сущности. В частности — то, что предоставляет сам крейт, бинарную кучу с порядком на элементах, заданных компаратором.Как известно, куча из std Rust является максимальной кучей, т. е. на вершине лежит максимальный элемент. Для того, чтобы сделать минимальную кучу, приходится оборачивать элементы в
std::cmp::Reverse
. Это не только не очень удобно, но и лишает возможности за константное время превратить кучу в вектор. В случае с кучей из comparator такой проблемы не возникает, потому что можно легко сделать кучу с обратным порядком:use comparator::reverse_order;К сожалению, это, в сущности, всё, что есть в comparator, а последнее обновление было год назад. С другой стороны, даже в текущем виде крейт полезен, поэтому я и решил о нём рассказать.
use comparator::collections::BinaryHeap;
let mut heap = BinaryHeap::with_comparator(reverse_order());
comparator на crates.io
Документация
Forwarded from rusta::mann
Сегодня написал на автомате
make_unique::<Name>()
на C++, и долго не мог понять почему компилятор кричит что-то про неймспейсы на турборыбу.Forwarded from xor eax, eax
Как раст ходит по типам в данном случае?
trait SomeType {}
struct Test<T: ?Sized>(core::marker::PhantomData<T>);
impl<T: ?Sized + SomeType> Test<T> {
const FOO: bool = true;
}
trait Fallback {
const FOO: bool = false;
}
impl<T: ?Sized> Fallback for T {}
Test::<$ty>::FOO
trait SomeType {}
struct Test<T: ?Sized>(core::marker::PhantomData<T>);
impl<T: ?Sized + SomeType> Test<T> {
const FOO: bool = true;
}
trait Fallback {
const FOO: bool = false;
}
impl<T: ?Sized> Fallback for T {}
Test::<$ty>::FOO
#prog #rust #rustreleasenotes #politota
Выпущена новая версия Rust: 1.44.0! Изменений не так много, самое значимое —
Блогопост
Подробные заметки о релизе
Выпущена новая версия Rust: 1.44.0! Изменений не так много, самое значимое —
asycn/await
более не требует thread-local storage и потому может быть использован в #[no_std]
. К сожалению, ввиду недавних событий в США, а также мнения Rust core team, что "tech is and always will be political", внятного описания новых фич в блогопосте нет, так что лучше сразу раздел в RELEASES.md открыть.Блогопост
Подробные заметки о релизе
blog.rust-lang.org
Announcing Rust 1.44.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
Блог*
#prog #rust #python #article Насколько далеко можно зайти в поддержке кода на Python внутри Rust? Достаточно далеко, чтобы заставить IDE подсвечивать ошибки в коде на Python. https://blog.m-ou.se/writing-python-inside-rust-3/
#prog #rust #python #rustlib #amazingopensource
Следующий логический шаг: макрос ct_python, который на этапе компиляции выполняет заданный код на Python и раскрывается в вывод в stdout этого скрипта.
Презентация возможностей
Документация
Следующий логический шаг: макрос ct_python, который на этапе компиляции выполняет заданный код на Python и раскрывается в вывод в stdout этого скрипта.
Презентация возможностей
Документация
Twitter
Mara Bos
If you ever wanted to generate Rust code using Python within your Rust, look no further! Next to inline-python, there's now also a ct_python macro, which executes Python code at compile time and inserts the output as Rust code back into your program.✨docs.rs/ct…
Forwarded from Dr. Friedrich von Never
А мне название нравится. Сразу видно, что преимущества сразу двух языков.
#prog #c #abnormalprogramming
Крестики-нолики, упакованные в вызов printf в цикле.
github.com/carlini/printf-tac-toe
Крестики-нолики, упакованные в вызов printf в цикле.
github.com/carlini/printf-tac-toe
GitHub
GitHub - carlini/printf-tac-toe: tic-tac-toe in a single call to printf
tic-tac-toe in a single call to printf. Contribute to carlini/printf-tac-toe development by creating an account on GitHub.
👍1
Forwarded from Matwey Kornilov
В итоге вчера тренировал случайный лес с максимальной глубиной в 200 слоев и 3 деревьями
#prog #article
Как гарантировать, что слияние отсортированных списков сливает списки, отсортированные по одному предикату? Как доказать, что данному ключу в ассоциативном массиве обязательно соответствует значение? И как ещё и не платить за всё это в рантайме? Обо всём этом можно прочитать в Ghosts of Departed Proofs. Читать одно удовольствие.
kataskeue.com/gdp.pdf
Как гарантировать, что слияние отсортированных списков сливает списки, отсортированные по одному предикату? Как доказать, что данному ключу в ассоциативном массиве обязательно соответствует значение? И как ещё и не платить за всё это в рантайме? Обо всём этом можно прочитать в Ghosts of Departed Proofs. Читать одно удовольствие.
kataskeue.com/gdp.pdf
#prog #rust #abnormalprogramming #article
"Имитируем функционал зависимых типов в системе типов Rust". Да, примерно то, что вы прочитали. И это действительно НАРКОМАНИЯ.
habr.com/ru/post/477330/
"Имитируем функционал зависимых типов в системе типов Rust". Да, примерно то, что вы прочитали. И это действительно НАРКОМАНИЯ.
habr.com/ru/post/477330/
Хабр
Имитируем функционал зависимых типов в системе типов Rust
Системы типов — это настоящее безумие. Некоторое время назад я уже отметился здесь со статьёй, в которой пытался разобрать, какие гарантии в compile-time может...