1.84K subscribers
3.29K photos
130 videos
15 files
3.57K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #rust

Если вам было интересно, почему Rust запрещает иметь неиспользуемые тИповые параметры, то вот вам RFC, который это ввёл, с мотивацией
Самая большая ложь, которую нам внушает мир — это то, что взрослые существуют.

Их нет, есть только выросшие дети.
2
#prog #java #kotlin #scala #article

Well-Typed Programs Can Go Wrong: A Study of Typing-Related Bugs in JVM Compilers

В этой статье авторы отмечают, что усилия в тестировании компиляторов в основном направлены на отлов некорректных оптимизаций, при этом мало кто целенаправленно занимается отловом багов в фронтендах. Авторы выбрали 320 багов, связанных с типами, среди багов компиляторов Java, Scala, Kotlin и Groovy, и разобрались с тем, как они себя проявляют, какие фичи языка используют и как они фиксятся. Вооружившись этим знанием, они написали генератор тестовых программ, который смог найти 28 багов, из них 12 были новыми (то есть для них исправлений не было).

А ещё авторы отличились тем, что нормально выложили материалы по исследованию.
#prog #rust #article

Небольшая заметка о различиях между ящиками крейтами и пакетами в Cargo/crates.io
#prog #rust #article

Stack-safety for free?

TL;DR:

//рекурсивная функция, использующая системный стек
fn triangular(n: u64) -> u64 {
if n == 0 {
0
} else {
n + triangular(n - 1)
}
}

⬇️

//использует стек на куче
fn triangular_safe(n: u64) -> u64 {
trampoline(|n| move |_| {
if n == 0 {
0
} else {
n + yield (n - 1)
}
})(n)
}

Автор этой статьи столкнулся со случаем, когда ему потребовалось переделывать рекурсивное решение на итеративное из-за переполнения стека, и ему не понравилось, что он руками делает то, что вполне мог бы сделать компьютер автоматически. Немного подумав, он смог разработать решение, которое бы использовало генераторы (пока что всё ещё только на nightly) и которое требовало бы для работы достаточно прямолинейную трансформацию, чтобы её можно было сделать процедурными макросами.

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

Также автор отдельно отмечает, что у него было чувство, что он изобрёл велосипед, но он не смог найти prior art для этого.
Если вы когда-нибудь почувствуете себя глупым, то вспомните, что я разок опоздал на встречу с человеком из-за того, что перепутал станции Октябрьская и Октябрьское поле.
#rust

9 companies using Rust in production.

О некоторых из них я уже рассказывал, но в любом случае иметь сборник лишним не будет.
Понятия не имею, насколько правда, но звучит смешно
простите
#meme

Сайт, кстати, реально есть. Но там ничего интересного
#prog #rust

Синтаксис для условной компиляции (#[cfg(...)]) в Rust позволяет использовать условные выражения, но не в очень эргономичном виде: через all, any и not. Библиотека efg позволяет использовать более привычный синтаксис, похожий на то, что пишут в коде на самом Rust. Пример:

#[efg(feature "proc-macro" && !(target_arch "wasm32" && target_os "unknown"))]
extern crate proc_macro;

Кстати, написана Толяном.
#prog #rust #article

How not to learn Rust — статья с частыми ошибками новичков при изучении Rust