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

Фи сюда: @nlinker
Download Telegram
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 - константный указатель на мутабельные данные