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

Фи сюда: @nlinker
Download Telegram
Forwarded from p0lunin
Ты прочитал?
Без пина нельзя взять ссылку на объект, потому что нельзя взять ссылку на Movable данные
It's good idea to learn rust making desktop apps rather tha c++ or java?
Roman Beltyukov:
Ну это понятно, но почему статик? Т.е. мы заставляем лямбду жить до конца рантайма?

red75prime:
Мы говорим, что лямбда не захватывает ссылки на локальные переменные

https://news.1rj.ru/str/rust_beginners_ru/63071
Вафель 🧇:
Но более правильным решением наверное всё же будет параметризовать всё лайфтаймом: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=82e3ca44e0d340557b3a5308fa14bea1

Это всё таки не "до конца жизни структуры", а до конца 'l :)

Разницу может быть сложно прочувствовать, но она есть

Roman Beltyukov:
Rc нужен, потому что он иначе не хочет иметь Vec<dyn Fn(&R) -> bool + 'l>, т.к. не знает размер в компайл тайме

Вафель 🧇:
В таких случаях нужен Box, а не Rc :)

Roman Beltyukov:
no method named clone found for struct std::vec::Vec<std::boxed::Box<(dyn for<'r> std::ops::Fn(&'r R) -> bool + 'l)>> in the current scope

Вафель 🧇:
Ааа...

Это можно обойти, но есть ощущение что с Rc будет тупо проще. Тут нужно найти/написать крейт для клонирования unsized типов за указателями...

Вообще этого мне кажется не хватает в стд

О, во, dyn-clone есть

https://news.1rj.ru/str/rust_beginners_ru/63073
egoarka:
привет всем кто не спит

код рабочий
вопрос

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f777b0a65b4fad3cc2cb121eb513a561

можно оптимизировать как - то этот код?
если нет, то больше всего волнует строка 50 - там произойдет полное копирование хешмапа по значению или по ссылке?

Denis:
iter_mut заменяешь на into_iter и таким образом поглащаешь мапу без копирований

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=cf5969b3cfe8edddae0eb5def55f0a3d

many_values тоже можно поглотить

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1d889711c4769d04b46b79dc3369377b

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6474aeb38bdfafb96855ce29f4fa44aa

extend принимает любой объект, который реализует IntoIterator, т.е. можно и просто итератор подсунуть, необязательно его перед этим собирать в вектор

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=18fe338e2edf68ba173eea1aa4d79ea2

а, вот ещё в начале заметил .iter().cloned(), можно смело на .into_iter() заменять

[("a".to_string(), "000".to_string())].into_iter() — не работает
vec![("a".to_string(), "000".to_string())].into_iter() — работает

на самом деле совсем правильно было бы использовать https://docs.rs/maplit/1.0.2/maplit/

угу

могу ещё предложить сделать хелпер-функцию fn make_hashmap(slice: &[(&str, &str)]) -> HashMap<String, String>

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fa293aa682e70f000a94f8ba883069e6

https://news.1rj.ru/str/rust_beginners_ru/63350
Nick Linker:
В прод пойдёт всё в куче, один большой WASM-файл.
Динамическая подгрузка здесь выглядит привлекательно, потому что этот маленький wasm кусок хочется пересобирать часто и обновлять быстро. Кроме этого, есть ещё css, который тоже относительно редко меняется, и генерировать для него обёртки тоже не хочется на каждый чих (поэтому такая обёртка будучи сгенерированной один раз могла бы лечь в большой wasm кусок).

lil pep:
я не знаю где лучше всего пример будет

тут есть
https://github.com/jfbastien/musl/blob/wasm-prototype-1/arch/wasm32/wasm.js
но тут не approachable

Mikhail Voronov:
https://github.com/fluencelabs/multi-module-example

lil pep:
кстати, вроде новый инструмент в wabt появился для декомпиляции
https://v8.dev/blog/wasm-decompile

Nick Linker:
В этом multi-module-example какая-то специфичная аннотация, которая к сожалению мне недоступна. Но спасибо, я по-меньшей мере знаю, что это возможно 😊
Ладно, спасибо, буду ковырять дальше.

Mikhail Voronov:
https://github.com/fluencelabs/fce/blob/master/src/vm/module/abi.rs#L19
там макросы скрывают всю грязную работу, вот по этой ссылке можно почитать, что происходит.
P.S. Код там пока очень сырой

https://news.1rj.ru/str/WebAssembly_ru/29934
Forwarded from Kai Ren
Кстати, у меня тут на днях талантливый коллега изобрёл приём (может и не ново, хз), дабы не писать килотонны трейт-баундов на всяких impl'ах: весь ужас запихиваем во вспомогательный трейт, и просто переиспользеум через ассоциативные типчики.
Подбиваю его проработать идею глубже и запилить статейку по этому делу, но пока что морозится.
Бешеный Профессор:
И так факты - получил ты ссылку на какие-то данные в метод или функцию. Изменил их. Без ссылочной прозрачности характерной для ФП ещё кто-то может изменить по ссылке как-то по другому эти данные. Если это происходит в многопоточном окружении это может произойти еще и пока твой метод выполняется. В общем то можно хоро и без ссылочной прозрачности писать но это писец каких затрат сил и бойлерплейта требует. Вот эти все IRepository и прочее это же для того чтобы ты точно знал что вот сейчас будет запись в базу а не в какой-то непонятный момент ты выставил значение свойству и тут бабах

В ФП ссылочно прозрачном языке бабах произойти в принцыпе не должно. Ты явно видишь все места где у тебя IO и где ты в него пишешь. Хотя, это такое - я не силён в ФП. Я волшебник в другом а в ФП я толко учусь. Вон наш любимый Цобакен @DogeShibu может тебе рассказать наверно почему ссылочная прозрачность это хорош 😁

https://news.1rj.ru/str/rust_offtopic/246945
Forwarded from hirrolot
Forwarded from hirrolot
Forwarded from Stanislav Popov
реально кажется ух вот в питонке все красиво, типы нинужны
Hirrolot:
типы засоряют код в расте

F: Fn() -> Fut, Fut: Future<Output = ()>

типика лкод

можно было бы так записать: async Fn()
Forwarded from PLComp
Programming Paradigms for Dummies: What Every Programmer Should Know
Ликбез по основным принципам ЯП: классификация, вопросы представления состояния, конкурентности и параллелизма.
https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
Forwarded from hirrolot
T* - мутабельный указатель на мутабельные данные
const T* - мутабельный указатель на константные данные
const T* const - константный указатель на константные данные
T * const - константный указатель на мутабельные данные