Telegram Web
https://www.opennet.ru/opennews/art.shtml?num=54516

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

Очень специфическая проблема, редчайший случай в софте на C++🤔
Одно из самых интересных траекторий планет задачи трёх тел, маленькую планету колбасит просто!
This media is not supported in your browser
VIEW IN TELEGRAM
Initial states:
m: 8.824 x: 2.963 y: -3.744 vx: 0.181 vy: 0.671
m: 0.105 x: 5.368 y: 6.131 vx: -0.438 vy: -0.021
m: 5.209 x: -3.997 y: 4.265 vx: 0.002 vy: 0.486
Interest-ness score: 73
Оставляю для себя потом прочитать, довольно важная тема оптимизации программ на Rust в одном единственном посте. Старый пост Achieving warp speed with Rust, 2017-го аж года, но при этом вроде бы актуальный. Единственное но, разные штуки, вроде test::black_hole пока доступны только в nightly и для них нужно включать #![feature(test)].
Навеяно постом Ильи
https://www.tgoop.com/optozorax_dev/298

У меня есть история из детства. Когда я только учился программировать (я на самом деле до сих пор не умею😭), я решил сделать компьютерный аналог игры в 1000 с пятью кубиками, игральными костьми то есть.

Особенность этой игры в том, что после того, как были сгенерировано 5 случайных чисел, нужно было этот массив проверить на то, содержится ли там 3, 4, 5 одинаковых числа и если да, выяснить, что это за числа, кроме этого есть ещё комбинации 1,2,3,4,5 и 2,3,4,5,6.

Если попытаться вычислить вхождение каждой комбинации в лоб получая на вход массив чисел, то это порождает необходимость в переборе всех комбинаций троек, потом четвёрок, кучи проверок и когда я тогда попытался продавить это решение, оно было кошмарным и я утонул в багах.

И однажды мне неожиданно пришла простая мысль: давайте сделаем массив длины 6, s = [s1, s2, s3, s4, s5, s6] и в нём будем накапливать количество выпавших на текущем ходу единиц, двоек и так далее шестёрок. Этот препроцессинг сделал проверку условий элементарным, скажем, "выпало ли 4 единицы" нам нужно проверить выполнено ли s1 == 4.

Прежние мои попытки я с радостью удалил и переписал проверку паттернов (и соответственно подсчёт очков). Я был так воодушевлён, что решил было сделать алгоритм игры, то есть бота, чтобы мне поиграть против компьютера. Увы, такого рода задачи уже были мне не по зубам вплоть до универа, когда я начал грызть "Программирование игр" Адельсона-Вельского и компании.
Та самая книжка
Интересное интервью с создателем Factorio известным как kovarex. Длинный 2.5-часовой подкаст, где товарищ kovarex рассказывает, что его связывало со старкрафтом, и как он пришёл к идее создания Factorio.
(Factorio — это такая игра, где вместо раздачи команд юнитам игрок создаёт всё более и более высокоуровневые структуры для решения стратегических задач).

https://makingcomputerdothings.com/the-undermind-episode-45-an-interview-with-kovarex-the-creator-of-factorio/
Воу воу, помедленнее там
https://www.zdnet.com/article/linus-torvalds-on-where-rust-will-fit-into-linux/

Линус говорит о том, где Раст будет зажигать на линуксе (хинт: на уровне приложений, дрова и утилиты, в ядро Линус его не пустит).
А вы знали, что сегодня International Waffle Day?
Давайте поздравим Вафеля (www.tgoop.com/ihatereality), я уже съел вафельку за его здоровье🖐
Открываю релиз ноты Rust, вижу не очень красивый коде сниппет
fn main() {
let array = [1, 2, 3, 4, 5];

// Было
for item in array.iter().copied() {
println!("{}", item);
}

// Стало
for item in std::array::IntoIter::new(array) {
println!("{}", item);
}
}
И дальше: "Обратите внимание, что это было добавлено как отдельный метод, вместо .into_iter(), так как сейчас оно ломает текущее соглашение о том, что .into_iter() относится к срезам по ссылочному итератору."

Увы, нужно признать, разработчики языка допустили архитектурную ошибку💥, теперь это соглашение ушло в библиотеки и сторонний код. Бывает.

Теперь будем терпеть, если вдруг в каком-то месте нужно будет переключиться с вектора на массив (или обратно), нужно будет протыкать и форычи заодно.
Статья, написанная ещё год назад, у меня дошли руки только сегодня.
https://oribenshir.github.io/afternoon_rusting/blog/copy-on-write

В этой статье автор ссылается на Герба Саттера (Herb Sutter), который (Герб) представляя свою библиотеку, реализующую Copy-On-Write в плюсах изрёк две противоречивые мысли:

» 1. Библиотека сделана на случай возможного использования из нескольких потоков. Это означает, что деградация производительности будет иметь место даже если программа будет выполняться строго в одном потоке.

» 2. Примеры будут на C++, но рассуждения применимы к любому языку.

И тут оказывается, что-таки растовый Cow<T> избегает деградации производительности и накладных расходов, связанных с многопоточностью, если используется в одном потоке!

Так уж получается, что гуру, повидав C++ и изучив его досконально, намылил глаз и свой опыт нечаянно распространил на любые языки. Бывает 😃
Хороший крейт, если мне однажды надо сделать будет динамический диспатч, но нужно будет избежать лишнего косвенного вызова для быстродействия, этот крейт поможет.
https://crates.io/crates/enum_dispatch

Встречал как-то в обсуждениях, но самому использовать не доводилось. Чтобы не забыть, пусть повисит здесь.
"Первый, первый, у нас пробой в области жопы"😂
Источник уже не найду, где-то на хабре. Но удовольствие от прочтения как в первый раз🤤
С днём математика, этот день можно легко превратить в праздник, просто решив что-нибудь забористое. )
Капец, только что майнтейнер indicatiff замерджил мой PR, после разборок на 39 комментов и предыдущего PR, который за полгода устарел настолько, что его было проще переписать заново, чем ребейзить на новый мастер (простите, main🤮).

Нынешний PR, который я сделал 23 дня назад: https://github.com/mitsuhiko/indicatif/pull/258

Прошлый PR, аж с 13 Июля 2020 (!): https://github.com/mitsuhiko/indicatif/pull/185

Некоторые из комментариев меня почти выбивали из колеи, например, сначала товарищ говорит, мол HashSet тормозит и жрёт память, а потом говорит, мол, зря я в следующих правках занимаюсь оптимизацией, ведь у нас ограниченное количество элементов.
Потом "давай использовать BinaryHeap", а позже "ой, ну наверное BTreeSet лучше", а потом "да и пофиг, пусть будет Vec".🤪

Я так и не понял, куда надо стремиться, чтобы выполнить требования. Он не похож на бывшего джависта, у которого "память больше не ресурс", и не плюсовик, у которого "ты здесь сделал лишнее ветвление, ты заставляешь процессор сбрасывать конвейер😡", и не питонист, которому "похер, лишь бы работало".

Короче, я рад, но одновременно в растерянности.
Единственное, что мне понравилось, это его предложение заменить
if state.objects[*idx].is_some() {
state.objects[*idx] = None;
state.free_set.insert(*idx);
if let Some(idx) = state.ordering.iter().position(|x| *x == *idx) {
state.ordering.remove(idx);
}
...
}

на
if let Some(obj) = state.objects[*idx].take() {
state.free_set.insert(*idx);
state.ordering.retain(|&x| x != *idx);
...
}

Блин, Option::take никогда раньше не использовал и он офигенен.
Мейнтейнер indicatiff какой-то эстет, вероятно бывший хаскеллист 😂
2025/07/05 06:53:42
Back to Top
HTML Embed Code: