Size: a a a

2020 June 01
Блог*
#prog #rust #article

Очередной наброс на тему Rust. Как всегда, всё самое интересное — в комментариях.

habr.com/ru/post/504622/
источник
2020 June 02
Блог*
#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: interface{}, рефлексия, отсутствие ленивости, захардкоженность слайсов. Но, конечно, вишенка на торте — это единственный PR, который так и не был смержен, и реакция Пайка на него.

github.com/robpike/filter
источник
2020 June 03
Блог*
#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
источник
Блог*
#prog #article

Для облегчения симптомов синдрома самозванца: "Я выпустил текстовый процессор, форматировавший жёсткий диск после каждого 1024-го сохранения".

Оригинал (в виде треда в твиттере, так что читать не очень удобно)
Перевод на Хабре
источник
Блог*
#meme
источник
Блог*
источник
2020 June 04
Блог*
#prog #rust

Иногда бывает полезным не использовать порядок, определённый на типе при помощи Ord, а использовать порядок, заданный некой  внешней сущностью. Крейт comparator даёт интерфейс Comparator<T> с методом compare(&self , &T, &T) -> Ordering. Само по себе это не очень интересно, но на базе этой абстракции можно построить уже непосредственно полезные сущности. В частности — то, что предоставляет сам крейт, бинарную кучу с порядком на элементах, заданных компаратором.

Как известно, куча из std Rust является максимальной кучей, т. е. на вершине лежит максимальный элемент. Для того, чтобы сделать минимальную кучу, приходится оборачивать элементы в std::cmp::Reverse. Это не только не очень удобно, но и лишает возможности за константное время превратить кучу в вектор. В случае с кучей из comparator такой проблемы не возникает, потому что можно легко сделать кучу с обратным порядком:

use comparator::reverse_order;
use comparator::collections::BinaryHeap;

let mut heap = BinaryHeap::with_comparator(reverse_order());

К сожалению, это, в сущности, всё, что есть в comparator, а последнее обновление было год назад. С другой стороны, даже в текущем виде крейт полезен, поэтому я и решил о нём рассказать.

comparator на crates.io
Документация
источник
Блог*
#prog #quotes
источник
Блог*
Сегодня написал на автомате make_unique::<Name>() на C++, и долго не мог понять почему компилятор кричит что-то про неймспейсы на турборыбу.
источник
Блог*
#prog #quotes (заново, потому что без контекста хуже понятно)
источник
Блог*
Переслано от /bin/cat
Как раст ходит по типам в данном случае?


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 #politota

Выпущена новая версия Rust: 1.44.0! Изменений не так много, самое значимое — asycn/await более не требует thread-local storage и потому может быть использован в #[no_std]. К сожалению, ввиду недавних событий в США, а также мнения Rust core team, что "tech is and always will be political", внятного описания новых фич в блогопосте нет, так что лучше сразу раздел в RELEASES.md открыть.

Блогопост
Подробные заметки о релизе
источник
Блог*
dereference_pointer_there
#prog #rust #python #article

Насколько далеко можно зайти в поддержке кода на Python внутри Rust? Достаточно далеко, чтобы заставить IDE подсвечивать ошибки в коде на Python.

https://blog.m-ou.se/writing-python-inside-rust-3/
#prog #rust #python #amazingopensource

Следующий логический шаг: макрос ct_python, который на этапе компиляции выполняет заданный код на Python и раскрывается в вывод в stdout этого скрипта.

Презентация возможностей
Документация
источник
2020 June 06
Блог*
#prog #quotes
источник
Блог*
cython не нужен
источник
Блог*
Переслано от Dr. Friedrich von Ne...
А мне название нравится. Сразу видно, что преимущества сразу двух языков.
источник
Блог*
Переслано от Dr. Friedrich von Ne...
Быстрый как python, безопасный как C. Ага?
источник
Блог*
#prog #c #abnormalprogramming

Крестики нолики, упакованные в вызов printf в цикле.

github.com/carlini/printf-tac-toe
источник
Блог*
#prog #quotes
источник