Linker Unsafe
220 subscribers
182 photos
24 videos
18 files
859 links
Собираю ржавые и лямбдообразные новости, прикольные цитатки с форумов, ссылки на статьи и всё такое. В-общем, сюда я тащу такие крупицы, которые мне будет жаль потерять в цифровой бездне. Возможно, они покажутся интересными и вам.

Фи сюда: @nlinker
Download Telegram
С днём математика, этот день можно легко превратить в праздник, просто решив что-нибудь забористое. )
Капец, только что майнтейнер 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 какой-то эстет, вероятно бывший хаскеллист 😂
Ехал (void*) через (void*)
Видит (void*) - в (void*) (void*)
сунул (void*) (void*) в (void*)
(void*)(void*)(void*)(void*)
Комментарий хорош👆
Forwarded from ozkriff.games 🦀 (Andrey @ozkriff Lesnikóv)
# Rust GameDev Newsletter 20: Март 2021

📆 Выпустил ежемесячник по ржавому игрострою за Март: https://rust-gamedev.github.io/posts/newsletter-020 (обсуждения: /r/rust, Twitter).

По Земероту и новому проекту в ближайшие месяцы обновлений можно не ждать: я вконец загнался и решил таки взять "отпуск от хобби" как минимум до лета (а то и до осени).
Преобразование сишной строки в &str можно сделать так:
pub fn safe_fun() -> Result<&'static str, Utf8Error> {
let char_ptr = unsafe { unsafe_fun() };
let c_str = unsafe { CStr::from_ptr(char_ptr) };
c_str.to_str()
}

Но нужно соблюсти 2 условия:
- сишная библиотека обязана не удалять строку
- сишная библиотека обязана не менять строку
Если соблюдение этих условий кажется проблематичным, то лучше сделать owned copy:
pub fn safe_fun() -> Result<String, Utf8Error> {
let char_ptr = unsafe { unsafe_fun() };
let c_str = unsafe { CStr::from_ptr(char_ptr) };
c_str.to_str().map(|s| s.to_owned())
}
Разгрызите ещё этих не очень сладких, но вкусных калачей, выпейте чаю, да взгляните на космос. Постарайтесь аккуратно облететь во-он те спутники. Подключайте нейроинтерфейс и запускайте среду программирования Rusty JetSuperbrains, пора заняться делом 😎😉 🚀🚀🚀
Большая статья про интероп с C++ и кишки.
Я ещё не читал, оставлю здесь с тегом #статья
https://hsivonen.fi/modern-cpp-in-rust/
Странно, не добавилось превью. У автора ещё есть видео со слайдами, посмотрю их тоже.
Классная идея, особенно для FFI. Типа "превратим Rust в ООП с виртуальными таблицами и вот этим всем вот". Многие подумают, мол ну что за бред, зачем возвращать то, от чего ушли (наконец-то)?

Ну вот, для FFI, когда надо передать объект в C++, он в том рантайме будет туда-сюда передаваться, а когда вернётся обратно в Rust — все методы будут на месте и их можно будет корректно вызвать. Так что вот статья.
https://adventures.michaelfbryan.com/posts/ffi-safe-polymorphism-in-rust/

А вот человек засучил рукава и обернул это в удобный макрос:
https://github.com/kotauskas/thin_trait_object
Marat, [26.09.19 20:52]
а че пакеты компилятора (66 метров) и стандартной библиотеки (173 метра) такие жирные? такое ощущение, что jdk качаешь

Roma S, [26.09.19 21:08]
там все zero-cost абстракции сложены


Продолжая старую шутку про Rust можно даже показать, где скрываются zero-cost абстракции 😃
This media is not supported in your browser
VIEW IN TELEGRAM
Только что обнаружил в Clion классный шорткат p + TAB.
— Это же п-проблема Бен Б-бецалеля. К-калиостро же доказал, что она н-не имеет р-решения.
— Мы сами знаем, что она не имеет решения, — сказал Хунта, немедленно ощетиниваясь. — Мы хотим знать, как ее решать.
— К-как-то ты странно рассуждаешь, К-кристо… К-как же искать решение, к-когда его нет? Б-бессмыслица какая-то…
— Извини, Теодор, но это ты очень странно рассуждаешь. Бессмыслица — искать решение, если оно и так есть. Речь идет о том, как поступать с задачей, которая решения не имеет. Это глубоко принципиальный вопрос, который, как я вижу, тебе, прикладнику, к сожалению, не доступен.

(Стругацкие, Понедельник начинается в субботу)