Telegram Web Link
Linker Unsafe
Photo
Дождался выхода, наконец-то. Погружаюсь в прослушивание (=чтение).
Впервые ржал как ненормальный над мемом из профунктора😂
Forwarded from Блог*
#prog #rust #article

Статья о внутреннем устройстве BTreeMap из стандартной библиотеки Rust. Старая, вышла ещё до Rust 1.0, но она даёт хороший обзор принципиального устройства этой структуры данных вкупе с обзором различных трюков для локализации небезопасных операций. Эти трюки применяются и в современной реализации BTreeMap
Дождались, Снойман (известный в хаскеллевских кругах спец) начинает по-маленьку испытывать новые GAT из ночника в Rust.
Неплохая вводная статья о том, чего все носятся с этим ГАТом...

https://www.fpcomplete.com/blog/monads-gats-nightly-rust/
Так, тут есть молодой раст-разработчик, пилит небольшие обучающие видеоролики на тему использования Rust и библиотек.

Уровень по-немногу растёт, что отрадно видеть. Возможно, будет интересно: Pretty Code на ютубе
Бриллиант из понва (для понимания контекста: Marz девушка разработчик на пайтоне)

Marz🍰:
Хочу быть довольной, как удав

Anton Trunov:
GIL блокирует центр удовольствий

Marz🍰:
Ору
Сука
АААААААААААААААААААААААААА
Forwarded from Generative Anton
#education

Cornell University выпустил на первый взгляд невероятно крутой курс, который сделан специально для самостоятельно онлайн прохождения. Курс CS 6120: Advanced Compilers как можно догадаться про дебри компиляторов и всё, что вокруг. Базируется на LLVM и самодельном IR слое. Есть и лекции, и книги и статьи. Всего 13 уроков.
Как сделать язык программирования, используя Rust для реализации.

https://arzg.github.io/lang/
A series about making a programming language called Eldiro using the Rust programming language.
Душераздирающая история о том, как человек разочаровался в индустриальном программировании, но потом нашёл Rust, изучил, сменил работу и вновь обрёл веру в человечество.

https://reddit.com/r/rust/comments/khlln4/how_rust_changed_and_saved_my_life

UPD: пофиксил речевой оборот, очень трудно из программирования в литературу вот так вот сразу...
ЧТД
Forwarded from rusta::mann
В этом году я начал задумываться, что, возможно, я выбрал не ту профессию — написание кода перестало меня цеплять, и превратилось в рутину. Подумывал даже в девопсы начать переучиваться, с депрессухи.

Но нет, сегодня я понял, что кодить я люблю — я не люблю C++.
Хотя если бы Option был монадой, то таких cheat sheet-ов бы не потребовалось. Но для текущего состояния вполне норм. Я например долго не мог запомнить название метода and_then☺️
Человек не ожидал, что Spark это не библиотечка уровня leftpad, а огромный фреймворк. В этой ситуации, увы, только обнять и плакать...😢

===
Lookuut Struchkov:
Всем привет. Ребята есть у кого опыт дебагингга большого опенс сорс проекта, я обнаружил багу в одном проекте(spark), написал тесты которые ловят данную багу, хочется сделать PR но для этого надо понять что конкретно не так работает в самом проекте, но вот уже 2 неделю копаюсь и докопаться не могу (вместо того чтобы готовиться к аикапу:\)

как можно посмотреть в идее лог , типа какие объекты создавались и какие методы вызывались у них?

Roman:
Apache Spark?

Lookuut Struchkov:
да

Roman:
глобальненько

Lookuut Struchkov:
у меня голова уже кругом идет, не знал что он под капотом настолько огромный :(
Повезло мне с дочерью :-)
Forwarded from iggisv9t channel
Для любителей странных аттракторов https://www.dynamicmath.xyz/strange-attractors/
Тут картинки, уравнения и ссылки на интерактивные симуляции.
В процессе решения задачек по курсу Спортивное программирование столкнулся со следующим неудобством Раста, а именно на нём иногда неудобно делать динамическое программирование (не путать с динамической типизацией). Для примера приведу задачу о наилучшем делении множества:

Дан массив `[a_0, a_1,..,a_(n-1)]` длины n, все числа положительные, задача разбить массив на 2 кучи так, чтобы разница между кучами была минимальна.

Скажем, для массива [1,5,3] оптимальное разбиение будет [1,3] в одну кучу, [5] в другую.

Каноническое решение этой задачи через динамическое программирование, используя массив d boolean-ов размера (n + 1) ⨉ m, m это достаточно большое число, можно взять половину суммы. Этот массив мы заполняем сверху вниз строка за строкой, когда d[i][j]==true это означает, что сумма j достижима при помощи некоторой комбинации элементов [a_0..a_i].

На Rust это в сущности простой цикл:
let mut d = vec![vec![false; m]; n + 1];
d[0][a[0] as usize] = true;
for i in 1..n {
d[i][0] = true;
for j in 0..m {
// если выключить элемент i
d[i][j] = d[i - 1][j];
// если включить элемент i
if a[i - 1] <= j as i32 {
d[i][j ] |= d[i - 1][j + a[i] as usize]
}
}
}
// далее ищем максимальный индекс j таких, что d[n][j] == true
// тогда (m - 2*j) будет минимально и это будет решение задачи

При больших m мы хотим (или даже вынуждены) воспользоваться спецификой задачи и заметить, что массив d сильно разряжённый. Поэтому от строк-массивов мы переходим ко строкам-множествам.
let mut d = vec![HashSet::new(); n];
d[0].insert(a[0] as i32);
for i in 1..n {
d[i].insert(0);
for j in d[i - 1].iter().copied() {
if d[i - 1].contains(&j) {
d[i].insert(j);
}
if a[i - 1] <= j as i32 {
if d[i - 1].contains(&(j + a[i] as usize)) {
d[i].insert(j + a[i] as usize);
}
}
}
}
И неожиданно (а для кого-то ожидаемо) получаем cannot borrow `d` as mutable because it is also borrowed as immutable.

Очевидный выход из этого положения - склонировать коллекцию перед итерированием по ней:
    // АААААААААА!
for j in d[i - 1].clone().iter().copied() {
...
}

Не столь очевидный: воспользоваться функцией Vec::split_at_mut:
for i in 1..n {
d[i].insert(0);
let (d1, d2) = d.split_at_mut(i);
for j in d1[i - 1].iter().copied() {
// меняем d2[0] как нам угодно!
if d1[i - 1].contains(&j) {
d2[0].insert(j);
}
...
}
}
Код компилируется, но теперь он не идиоматичный, и это меня несколько расстраивает.
Где-то невдалеке маячит unsafe и напрашивается быть куда-нибудь вкоряченным, но я старательно отмахиваюсь от него. 😊
Но в принципе, почему б тогда и не на Rust?👇
Forwarded from Generative Anton
Нашёл классный курс "Advanced Programming in the UNIX Environment". Всё целиком на C, никакого разжёвывания в начале, есть домашка и лекции в отличном качестве.
Проекты в курсе — реимплементация юниксовых утилит (ls(1) и sws(1)).
2025/09/17 00:32:36
Back to Top
HTML Embed Code: