#prog #rust #article
Simplifying endianness sensitive file parsers in Rust with Omnom
Статья о том, как, эксплуатируя вывод типов в Rust, писать код для разбора бинарных значений, поменьше упоминая порядок байт.
Simplifying endianness sensitive file parsers in Rust with Omnom
Статья о том, как, эксплуатируя вывод типов в Rust, писать код для разбора бинарных значений, поменьше упоминая порядок байт.
www.parsed.uk
Blake Loring
Blake Loring, software developer. My personal website
Forwarded from rusta::mann
Начинает казаться, что выделение новичков в отдельный новичковый чат было ошибкой нашего ру комьюнити.
Всё чаще наблюдаю, что в новичковом чате сидят и отвечают такие же новички, как те, что задают вопросы -- и в итоге получилась эхо-камера неверных, но очень уверенных догадок.
А опытные ребята, которые, по задумке, должны были отвечать на новичковые вопросы, видимо, устали от новичков, которые не читают растбук, и перестали активно участвовать в обсуждениях -- врываются только когда бредометр начинает зашкаливать.
Решения у меня, правда, нет -- активно модерировать мейн чтобы "атцы" новичков не обижали за глупые вопросы ресурсов и желания не хватит.
Всё чаще наблюдаю, что в новичковом чате сидят и отвечают такие же новички, как те, что задают вопросы -- и в итоге получилась эхо-камера неверных, но очень уверенных догадок.
А опытные ребята, которые, по задумке, должны были отвечать на новичковые вопросы, видимо, устали от новичков, которые не читают растбук, и перестали активно участвовать в обсуждениях -- врываются только когда бредометр начинает зашкаливать.
Решения у меня, правда, нет -- активно модерировать мейн чтобы "атцы" новичков не обижали за глупые вопросы ресурсов и желания не хватит.
#prog #rust
Набор постов (считай, книга), посвящённый пошаговой реализации на Rust текстового редактора
Набор постов (считай, книга), посвящённый пошаговой реализации на Rust текстового редактора
this is philipp
hecto: Build Your Own Text Editor in Rust
#prog #rust #parsing #rustlib
fast_float — библиотека для быстрого парсинга чисел с плавающей точкой. Судя по бенчмаркам, быстрее lexical_core, да и вообще практически всех библиотек.
Является портом одноимённой библиотеки для C++ за авторством небезызвестного Даниела Лемира.
fast_float — библиотека для быстрого парсинга чисел с плавающей точкой. Судя по бенчмаркам, быстрее lexical_core, да и вообще практически всех библиотек.
Является портом одноимённой библиотеки для C++ за авторством небезызвестного Даниела Лемира.
GitHub
GitHub - aldanor/fast-float-rust: Super-fast float parser in Rust (now part of Rust core)
Super-fast float parser in Rust (now part of Rust core) - aldanor/fast-float-rust
#prog #rust #article #successstory
О том, как переписали на Rust и радикально снизили количество потребляемых ресурсов
О том, как переписали на Rust и радикально снизили количество потребляемых ресурсов
Хабр
Как мы ржавели. История внедрения и обучения
Все говорили – переходи на rust! Начинай пользоваться самым-самым языком, который самый любимый язык на stackoverflow и всё такое. Я тяжело вздохнул и огляделся. Ну опять двадцать-пять. Ладно, давайте...
#prog #rust #parsing #rustlib
nom_supreme — библиотека, расширяющая функционал nom. Новые комбинаторы-методы, очень подробный тип ошибок, функция для быстрого создания парсера любого типа, реализующего FromStr и ещё по мелочи.
В примерах используется cool_asserts — библиотека для более пригодных для использования в
nom_supreme — библиотека, расширяющая функционал nom. Новые комбинаторы-методы, очень подробный тип ошибок, функция для быстрого создания парсера любого типа, реализующего FromStr и ещё по мелочи.
В примерах используется cool_asserts — библиотека для более пригодных для использования в
#[test]
-функциях ассертов.docs.rs
nom_supreme - Rust
A collection of excellent utilities for nom, including:
#bio
Статья (перевод на хабре) с разбором строения вакцины от SARS-CoV-2 от Pfizer.
Да, она вышла почти месяц назад, и что
Статья (перевод на хабре) с разбором строения вакцины от SARS-CoV-2 от Pfizer.
Да, она вышла почти месяц назад, и что
Bert Hubert's writings
Reverse Engineering the source code of the BioNTech/Pfizer SARS-CoV-2 Vaccine - Bert Hubert's writings
Translations: ελληνικά / عربى / 中文 (Weixin video, Youtube video) / 粵文 / bahasa Indonesia / český / Català / český / Deutsch / Español / 2فارسی / فارسی / Français / עִברִית / Hrvatski / Italiano / Magyar / Nederlands / 日本語 / 日本語 2 / नेपाली / Polskie / русский…
Блог*
#prog #rust #successstory Статья об опыте использования Rust в софте для видеоконференций, который, по словам разработчиков, превосходит по малости задержки все альтернативные решения. Experiencing no software-related downtime so far is both a pleasant…
#prog #rust
Статья от этих же разработчиков о разработке firmware для физического пульта. Спойлер: всё прошло на удивление гладко.
Статья от этих же разработчиков о разработке firmware для физического пульта. Спойлер: всё прошло на удивление гладко.
blog.tonari.no
Using Rust for a simple hardware project | tonari blog
Diving into the embedded Rust ecosystem
#prog #rust
Пара слов о трейте Copy.
Во-первых, это один из "магических" трейтов, помечен атрибутом
В-третьих, как сказано в документации к
Продемонстрирую на примере:
Пара слов о трейте Copy.
Во-первых, это один из "магических" трейтов, помечен атрибутом
#[lang = "copy"]
. Компилятор проверяет, что если тип тем или иным способом задекларирован как Copy
, то и всего его поля должны быть Copy
. Следующий код не компилируется:#[derive(Clone, Copy)]Ошибка:
struct StringHolder(String);
error[E0204]: the trait `Copy` may not be implemented for this type
--> src/lib.rs:1:17
|
1 | #[derive(Clone, Copy)]
| ^^^^
2 | struct StringHolder(String);
| ------ this field does not implement `Copy`
Во-вторых, один и тот же тип не может реализовывать Copy
и Drop
одновременно. Скажем, следующий код не компилируется:#[derive(Clone, Copy)]Ошибка:
struct Primitive;
impl Drop for Primitive {
fn drop(&mut self) {}
}
error[E0184]: the trait `Copy` may not be implemented for this type; the type has a destructorТак как полноценных negative trait bounds в Rust всё ещё нет, ограничение
--> src/lib.rs:1:17
|
1 | #[derive(Clone, Copy)]
| ^^^^ Copy not allowed on types with destructors
Copy
можно использовать как более сильную замену ограничению !Drop
.В-третьих, как сказано в документации к
Copy
, "Copies happen implicitly, for example as part of an assignment y = x
. The behavior of Copy
is not overloadable; it is always a simple bit-wise copy.". С другой стороны, Clone
является супертрейтом Copy
, и наличие реализации Copy
не мешает вызывать .clone()
явно. Однако, в отличие от Copy
, Clone::clone
в принципе может вызывать любой код. Поэтому, в частности, технически замена в итераторной цепочке .cloned()
на .copied()
является ломающим изменением, даже если элементы итератора реализуют Copy
.Продемонстрирую на примере:
use std::cell::Cell;Если запустить этот код, то он напечатает
struct Counter<'a>(&'a Cell<u32>);
impl Clone for Counter<'_> {
fn clone(&self) -> Self {
self.0.set(self.0.get() + 1);
Self(self.0)
}
}
fn main() {
let n = Cell::new(0);
let arr = [Counter(&n), Counter(&n), Counter(&n)];
arr.iter().cloned().for_each(drop);
println!("`Counter::clone` called {} times", n.get());
}
`Counter::clone` called 3 times
. Теперь добавим к определению Counter
аннотацию #[derive(Copy)]
и допишем в main
тот же код, что там есть, но с заменой .cloned()
на copied()
:fn main() {Код теперь выводит:
// ...
let n = Cell::new(0);
let arr = [Counter(&n), Counter(&n), Counter(&n)];
arr.iter().copied().for_each(drop); // изменение в этой строке
println!("`Counter::clone` called {} times", n.get());
}
`Counter::clone` called 3 times
`Counter::clone` called 0 times
Берегите себя и не пишите, пожалуйста, в Clone::clone
что-то помимо собственно клонирования.doc.rust-lang.org
Copy in std::marker - Rust
Types whose values can be duplicated simply by copying bits.
Forwarded from Linker Unsafe
Довольно увлекательная статья о том, как человек участвовал в RAIC 2020. В этот раз необходимо было запрограммировать бота для игры в сильно упрощённый Старкрафт.
Человек решил офигенное количество с виду простых задач по разруливанию поведения юнитов на поле. И когда казалось, что все возможные грабли учтены, оказывалось, что находилась ещё ситуация (и не одна!), когда алгоритм действовал не лучшим образом.
Например,
Еще одной важной проблемой, которая не давала покоя было то, что когда мои лучники и лучники противника сближались, и становились стенка против стенки, то новые лучники подходили сзади и подпирали их. Таким образом они были абсолютно неэффективны, т.к. просто стояли и ничего не делали. И так могло накопиться много слоев моих лучников. Это выглядело как явная тактическая ошибка.
В-общем, стоящая статья, я получил удовольствие от прочтения. Краткий вывод:
1. Для участия в RAIC 2021 нужно уволиться с работы или взять отпуск месяца на 2 😊
2. Большинство задач тривиальны, но обобщённое и эффективное решение части из них позволяет разом убить 100 "зайцев" и избавиться от костылей в будущем.
3. Для участия не нужно иметь опыт в AI, ML, DL и других аббревиатурах, нужно просто уметь писать if-ы и циклы😉, но желательно уметь дебажить и профилировать код.
https://m.habr.com/ru/post/535310/
Человек решил офигенное количество с виду простых задач по разруливанию поведения юнитов на поле. И когда казалось, что все возможные грабли учтены, оказывалось, что находилась ещё ситуация (и не одна!), когда алгоритм действовал не лучшим образом.
Например,
Еще одной важной проблемой, которая не давала покоя было то, что когда мои лучники и лучники противника сближались, и становились стенка против стенки, то новые лучники подходили сзади и подпирали их. Таким образом они были абсолютно неэффективны, т.к. просто стояли и ничего не делали. И так могло накопиться много слоев моих лучников. Это выглядело как явная тактическая ошибка.
В-общем, стоящая статья, я получил удовольствие от прочтения. Краткий вывод:
1. Для участия в RAIC 2021 нужно уволиться с работы или взять отпуск месяца на 2 😊
2. Большинство задач тривиальны, но обобщённое и эффективное решение части из них позволяет разом убить 100 "зайцев" и избавиться от костылей в будущем.
3. Для участия не нужно иметь опыт в AI, ML, DL и других аббревиатурах, нужно просто уметь писать if-ы и циклы😉, но желательно уметь дебажить и профилировать код.
https://m.habr.com/ru/post/535310/
Хабр
История 4го места на Russian AI Cup 2020
В этом году поучаствовал в соревновании по написанию игровых ботов Russian AI Cup. И хоть не удалось взять 1е место, как в 2017, но все равно это было увлекательное и невероятно азартное...