Блог*
#rust #article Why Rust in Production? (советую включить режим чтения в вашем браузере, фон ядовито-оранжевого цвета) Статья о взгляде на Rust со стороны компаний. The intent is to provide an honest look at Rust's practicality for production to help decision…
#rust #article
Adopting Rust: the missing playbook for managers and CTOs
Взгляд на привнесение Rust в разработку с точки зрения руководящих должностей.
Adopting Rust: the missing playbook for managers and CTOs
Взгляд на привнесение Rust в разработку с точки зрения руководящих должностей.
Mainmatter
Adopting Rust: the missing playbook for managers and CTOs - Mainmatter
You want to kick off your first Rust project. How do you make it a success? Here is a playbook for building your first Rust team and, if all goes well, scaling it up.
👍1
#prog #amazingopensource
wuffs (Wrangling Untrusted File Formats Safely) — язык (и компилятор) для написания программ обработки данных, который компилируется в C. Язык намеренно весьма ограниченный — в частности, в нём отсутствует IO и способы динамически управлять памятью, да и в принципе доступ к сисколам. Язык также memory safe: компилятор отказывается компилировать программу, в которой индексы выходят за границу массива (а также если в ней где-то есть переполнение).
Несмотря на ограниченность языка и намеренно простые проверки диапазонов переменных, на практике он с успехом подходит для написания (де)кодировщиков медиаформатов — реализации на wuffs по производительности обгоняют существующие реализации на C и Rust.
(thanks @experimentalchill за привлечение внимания к этой вещи — взято из поста про ошибки реализации в CRC32 в Linux)
wuffs (Wrangling Untrusted File Formats Safely) — язык (и компилятор) для написания программ обработки данных, который компилируется в C. Язык намеренно весьма ограниченный — в частности, в нём отсутствует IO и способы динамически управлять памятью, да и в принципе доступ к сисколам. Язык также memory safe: компилятор отказывается компилировать программу, в которой индексы выходят за границу массива (а также если в ней где-то есть переполнение).
Несмотря на ограниченность языка и намеренно простые проверки диапазонов переменных, на практике он с успехом подходит для написания (де)кодировщиков медиаформатов — реализации на wuffs по производительности обгоняют существующие реализации на C и Rust.
(thanks @experimentalchill за привлечение внимания к этой вещи — взято из поста про ошибки реализации в CRC32 в Linux)
GitHub
GitHub - google/wuffs: Wrangling Untrusted File Formats Safely
Wrangling Untrusted File Formats Safely. Contribute to google/wuffs development by creating an account on GitHub.
👍8❤🔥2
Forwarded from 💞Gay Mems🔥 | Гей мемы 💪
Анекдот дня: Всероссийский научно-исследовательский геологический институт (ВСЕГЕИ) изменил логотип на сайте. Аббревиатура ВСЕГЕИ пропала, вместо неё появилась надпись «Институт Карпинского».
В Твиттере предполагают, что всё из-за нового закона о запрете ЛГБТ-движения. ВСЕГЕИ всё, Сергеям приготовиться!
В Твиттере предполагают, что всё из-за нового закона о запрете ЛГБТ-движения. ВСЕГЕИ всё, Сергеям приготовиться!
😁20👍1
Forwarded from Segment@tion fault
- приглашаем вас к нам на работу, у нас отличный коллектив, интересные проекты, каждому выдаём макбук
- надбавка будет?
- за что?
- за работу на макбуке
- надбавка будет?
- за что?
- за работу на макбуке
👍29💩9❤🔥3🤡3👎2🌚2💯2
Forwarded from I’m CEO, beach
Команда, скоро день зарплаты. Для меня это очень грустный день. Мне жаль снова осознавать, что вы работаете ради какой-то еды и одежды, а не ради нашей крутой идеи. Ну и денег тоже жалко.
🌚13💯1
#prog #rust хайлайты:
▪️Добавили линт на биндинги типа
▪️Стабилизировали ptr::addr_eq, которая сравнивает указатели по адресам без учёта метаданных.
▪️На
▪️Парсер теперь обрабатывает слайсинг с синтаксисом Python и предлагает использовать эквивалентный нативный синтаксис.
▪️К реализациям арифметических операций добавили #[track_caller].
▪️Серьёзность
▪️
▪️Стабилизировали {Rc, Arc}::unwrap_or_clone. Эти функции достают значение из счётчика ссылок при помощи клонирования, но избегают этого, если значение единственно.
▪️Реализация Vec::dedup_by теперь делает два прохода по вектору и начинает второй проход только в том случае, если элементы действительно нужно удалять. Это позволяет делать меньше работы для векторов уникальных значений, а также немного ускоряет все остальные случаи за счёт того, что теперь при перемещении элементов вместо
▪️Добавили линт на биндинги типа
()
. Линт не срабатывает, если ()
есть явно с одной или иной стороны или тип явно записан, как ()
, также не работает на коде из макросов.▪️Стабилизировали ptr::addr_eq, которая сравнивает указатели по адресам без учёта метаданных.
▪️На
NonNull
добавили методов с обычных указателей.▪️Парсер теперь обрабатывает слайсинг с синтаксисом Python и предлагает использовать эквивалентный нативный синтаксис.
▪️К реализациям арифметических операций добавили #[track_caller].
▪️Серьёзность
IMPLIED_BOUNDS_ENTAILMENT
подняли с обычного линта до фатальной ошибки компиляции. Этот линт указывает на ситуации, когда реализация трейта из-за implied bounds (таких, как 'b: 'a
в &'a &'b T
) является более ограничительной, чем декларация трейта.▪️
LinkedList
добавили retain{, _mut}▪️Стабилизировали {Rc, Arc}::unwrap_or_clone. Эти функции достают значение из счётчика ссылок при помощи клонирования, но избегают этого, если значение единственно.
▪️Реализация Vec::dedup_by теперь делает два прохода по вектору и начинает второй проход только в том случае, если элементы действительно нужно удалять. Это позволяет делать меньше работы для векторов уникальных значений, а также немного ускоряет все остальные случаи за счёт того, что теперь при перемещении элементов вместо
ptr::copy
используется ptr::copy_nonoverlapping
.GitHub
Add allow-by-default lint for unit bindings by jieyouxu · Pull Request #112380 · rust-lang/rust
Example
#![warn(unit_bindings)]
macro_rules! owo {
() => {
let whats_this = ();
}
}
fn main() {
// No warning if user explicitly wrote `()` on either side.
let expr = (...
#![warn(unit_bindings)]
macro_rules! owo {
() => {
let whats_this = ();
}
}
fn main() {
// No warning if user explicitly wrote `()` on either side.
let expr = (...
🎉5
Why are you all making restful services instead of, dunno, hard-working services or at least active ones?
👍13
#prog #rust #article
Semantic fuzzing of the Rust compiler and interpreter
Авторы сделали Rustlantis — фаззер, который генерирует программы на уровне MIR. Так как вывод программы предсказать заранее трудно, авторы применили подход differential testing: именно, они использовали несколько интерпретаторов и находили те программы, на которых они расходятся. Разумеется, подобный подход не имеет смысла для кода с UB, поэтому авторы специально написали генератор таким образом, чтобы избежать генерации UB.
В качестве верификаторов авторы использовали miri, компиляцию с помощью LLVM (с и без оптимизациями на уровне MIR) и Cranelift. Не смотря на крайне узкий охват пространства возможных программ, за 4,5 CPU-лет авторам удалось найти 13 новых багов.
Как видите, авторам не удалось найти баги, связанные с Cranelift, даже не смотря на то, что авторы ожидали противоположного. Авторы называют несколько возможных причин: cranelift намеренно не реализует много оптимизаций и он уже постоянно фаззится (аллокатор регистров — ещё и через symbolic execution).
*
Проектом заинтересовалась Rust foundation, так что есть шанс, что Rustlantis будет жить и развиваться дальше, а не помрёт, как очередная академическая штуковина.
*
Один из выявленных фаззером багов был спровоцирован, судя по фиксу, тем, что для одного из типов данных сравнение выполнялось неправильно: для него не была определена операция сравнения, но был определён неявный оператор каста в другой тип, для которого операция сравнения была, из-за чего сравнение начального типа учитывало лишь часть существенной информации.
Semantic fuzzing of the Rust compiler and interpreter
Авторы сделали Rustlantis — фаззер, который генерирует программы на уровне MIR. Так как вывод программы предсказать заранее трудно, авторы применили подход differential testing: именно, они использовали несколько интерпретаторов и находили те программы, на которых они расходятся. Разумеется, подобный подход не имеет смысла для кода с UB, поэтому авторы специально написали генератор таким образом, чтобы избежать генерации UB.
В качестве верификаторов авторы использовали miri, компиляцию с помощью LLVM (с и без оптимизациями на уровне MIR) и Cranelift. Не смотря на крайне узкий охват пространства возможных программ, за 4,5 CPU-лет авторам удалось найти 13 новых багов.
┌─────────┬──────────────┬─────┐
│ │Miscompilation│Crash│
├─────────┼──────────────┼─────┤
│rustc │ 3 │ 2 │
├─────────┼──────────────┼─────┤
│LLVM │ 6 │ 2 │
├─────────┼──────────────┼─────┤
│cranelift│ 0 │ 0 │
└─────────┴──────────────┴─────┘
*Как видите, авторам не удалось найти баги, связанные с Cranelift, даже не смотря на то, что авторы ожидали противоположного. Авторы называют несколько возможных причин: cranelift намеренно не реализует много оптимизаций и он уже постоянно фаззится (аллокатор регистров — ещё и через symbolic execution).
*
Проектом заинтересовалась Rust foundation, так что есть шанс, что Rustlantis будет жить и развиваться дальше, а не помрёт, как очередная академическая штуковина.
*
Один из выявленных фаззером багов был спровоцирован, судя по фиксу, тем, что для одного из типов данных сравнение выполнялось неправильно: для него не была определена операция сравнения, но был определён неявный оператор каста в другой тип, для которого операция сравнения была, из-за чего сравнение начального типа учитывало лишь часть существенной информации.
🔥14
Forwarded from Офигительные идеи🦄
А пооомните несколько лет назад ходило фото платья которые одни видели чёрно-синим, другие - жёлто-белым и в упор не понимали, как можно иначе?
Так вот. Я наткнулся на рисунок, который позволяет это ПОНЯТЬ, УВИДЕТЬ. ААААААААААА.
Так вот. Я наткнулся на рисунок, который позволяет это ПОНЯТЬ, УВИДЕТЬ. ААААААААААА.
🤯16👍3🤡2❤1