Forwarded from Идеи неинтересных фильмов
Железный человек сражается со злейшим врагом - ржавчиной.
#prog #rust #article
Очередной наброс на тему Rust. Как всегда, всё самое интересное — в комментариях.
habr.com/ru/post/504622/
Очередной наброс на тему Rust. Как всегда, всё самое интересное — в комментариях.
habr.com/ru/post/504622/
#prog #go #menacingopensource
Для Go есть пакет filter. Это реализация некоторых FP-like примитивов, написанных самим Робом Пайком. Как он сам пишет в README:
"I wanted to see how hard it was to implement this sort of thing in Go, with as nice an API as I could manage. It wasn't hard.
Having written it a couple of years ago, I haven't had occasion to use it once. Instead, I just use "for" loops.
You shouldn't use it either."
Внутри есть всё то, что мы так любим в Go:
github.com/robpike/filter
Для Go есть пакет filter. Это реализация некоторых FP-like примитивов, написанных самим Робом Пайком. Как он сам пишет в README:
"I wanted to see how hard it was to implement this sort of thing in Go, with as nice an API as I could manage. It wasn't hard.
Having written it a couple of years ago, I haven't had occasion to use it once. Instead, I just use "for" loops.
You shouldn't use it either."
Внутри есть всё то, что мы так любим в Go:
interface{}
, рефлексия, отсутствие ленивости, захардкоженность слайсов. Но, конечно, вишенка на торте — это единственный PR, который так и не был смержен, и реакция Пайка на него.github.com/robpike/filter
#prog #article
Csmith — программа для генерации случайных программ на C. Отличается от остальных подобных программ тем, что сгенерированные программы не содержат неопределённого поведения. Использование Csmith позволило обнаружить несколько сотен багов в GCC и LLVM. О структуре Smith и о достигнутых с её помощью результатов подробно изложено в статье — к сожалению, довольно старой, от 2011 года.
Несколько интересных подробностей:
1) Из всех протестированных компиляторов CompCert был единственным, в котором не было багов мидл-енда, приводящих к неправильной компиляции кода. Формальная верификация работает!
2) Абзац про тестирование коммерческих компиляторов настолько хорош, что я процитирую его целиком:
"Experience with commercial compilers
There exist many more commercial C compilers than we could easily test. The ones we chose to study are fairly popular and were produced by what we believe are some of the strongest C compiler development teams. Csmith found wrong-code errors and crash errors in each of these tools within a few hours of testing.
Because we are not paying customers, and because our findings represent potential bad publicity, we did not receive a warm response from any commercial compiler vendor. Thus, for the most part, we simply tested these compilers until we found a few crash errors and a few wrong-code errors, reported them, and moved on."
Csmith на GitHub
Csmith — программа для генерации случайных программ на C. Отличается от остальных подобных программ тем, что сгенерированные программы не содержат неопределённого поведения. Использование Csmith позволило обнаружить несколько сотен багов в GCC и LLVM. О структуре Smith и о достигнутых с её помощью результатов подробно изложено в статье — к сожалению, довольно старой, от 2011 года.
Несколько интересных подробностей:
1) Из всех протестированных компиляторов CompCert был единственным, в котором не было багов мидл-енда, приводящих к неправильной компиляции кода. Формальная верификация работает!
2) Абзац про тестирование коммерческих компиляторов настолько хорош, что я процитирую его целиком:
"Experience with commercial compilers
There exist many more commercial C compilers than we could easily test. The ones we chose to study are fairly popular and were produced by what we believe are some of the strongest C compiler development teams. Csmith found wrong-code errors and crash errors in each of these tools within a few hours of testing.
Because we are not paying customers, and because our findings represent potential bad publicity, we did not receive a warm response from any commercial compiler vendor. Thus, for the most part, we simply tested these compilers until we found a few crash errors and a few wrong-code errors, reported them, and moved on."
Csmith на GitHub
#prog #article
Для облегчения симптомов синдрома самозванца: "Я выпустил текстовый процессор, форматировавший жёсткий диск после каждого 1024-го сохранения".
Оригинал (в виде треда в твиттере, так что читать не очень удобно)
Перевод на Хабре
Для облегчения симптомов синдрома самозванца: "Я выпустил текстовый процессор, форматировавший жёсткий диск после каждого 1024-го сохранения".
Оригинал (в виде треда в твиттере, так что читать не очень удобно)
Перевод на Хабре
#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