Roman Beltyukov:
Ну это понятно, но почему статик? Т.е. мы заставляем лямбду жить до конца рантайма?
red75prime:
Мы говорим, что лямбда не захватывает ссылки на локальные переменные
https://news.1rj.ru/str/rust_beginners_ru/63071
Ну это понятно, но почему статик? Т.е. мы заставляем лямбду жить до конца рантайма?
red75prime:
Мы говорим, что лямбда не захватывает ссылки на локальные переменные
https://news.1rj.ru/str/rust_beginners_ru/63071
Telegram
Roman Beltyukov in Rust Beginners
Ну это понятно, но почему статик? Т.е. мы заставляем лямбду жить до конца рантайма?
Вафель 🧇:
Но более правильным решением наверное всё же будет параметризовать всё лайфтаймом: 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
Вафель 🧇:
Ааа...
Это можно обойти, но есть ощущение что с Rc будет тупо проще. Тут нужно найти/написать крейт для клонирования unsized типов за указателями...
Вообще этого мне кажется не хватает в стд
О, во, dyn-clone есть
https://news.1rj.ru/str/rust_beginners_ru/63073
Но более правильным решением наверное всё же будет параметризовать всё лайфтаймом: 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
Telegram
Вафель 🧇 in Rust Beginners
Но более правильным решением наверное всё же будет параметризовать всё лайфтаймом: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=82e3ca44e0d340557b3a5308fa14bea1
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
привет всем кто не спит
код рабочий
вопрос
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
docs.rs
maplit - Rust
API documentation for the Rust `maplit` crate.
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
В прод пойдёт всё в куче, один большой 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
GitHub
jfbastien/musl
musl libc experiment. Contribute to jfbastien/musl development by creating an account on GitHub.
Forwarded from Kai Ren
Кстати, у меня тут на днях талантливый коллега изобрёл приём (может и не ново, хз), дабы не писать килотонны трейт-баундов на всяких impl'ах: весь ужас запихиваем во вспомогательный трейт, и просто переиспользеум через ассоциативные типчики.
Подбиваю его проработать идею глубже и запилить статейку по этому делу, но пока что морозится.
Подбиваю его проработать идею глубже и запилить статейку по этому делу, но пока что морозится.
Forwarded from Dima
Бешеный Профессор:
И так факты - получил ты ссылку на какие-то данные в метод или функцию. Изменил их. Без ссылочной прозрачности характерной для ФП ещё кто-то может изменить по ссылке как-то по другому эти данные. Если это происходит в многопоточном окружении это может произойти еще и пока твой метод выполняется. В общем то можно хоро и без ссылочной прозрачности писать но это писец каких затрат сил и бойлерплейта требует. Вот эти все IRepository и прочее это же для того чтобы ты точно знал что вот сейчас будет запись в базу а не в какой-то непонятный момент ты выставил значение свойству и тут бабах
В ФП ссылочно прозрачном языке бабах произойти в принцыпе не должно. Ты явно видишь все места где у тебя IO и где ты в него пишешь. Хотя, это такое - я не силён в ФП. Я волшебник в другом а в ФП я толко учусь. Вон наш любимый Цобакен @DogeShibu может тебе рассказать наверно почему ссылочная прозрачность это хорош 😁
https://news.1rj.ru/str/rust_offtopic/246945
И так факты - получил ты ссылку на какие-то данные в метод или функцию. Изменил их. Без ссылочной прозрачности характерной для ФП ещё кто-то может изменить по ссылке как-то по другому эти данные. Если это происходит в многопоточном окружении это может произойти еще и пока твой метод выполняется. В общем то можно хоро и без ссылочной прозрачности писать но это писец каких затрат сил и бойлерплейта требует. Вот эти все IRepository и прочее это же для того чтобы ты точно знал что вот сейчас будет запись в базу а не в какой-то непонятный момент ты выставил значение свойству и тут бабах
В ФП ссылочно прозрачном языке бабах произойти в принцыпе не должно. Ты явно видишь все места где у тебя IO и где ты в него пишешь. Хотя, это такое - я не силён в ФП. Я волшебник в другом а в ФП я толко учусь. Вон наш любимый Цобакен @DogeShibu может тебе рассказать наверно почему ссылочная прозрачность это хорош 😁
https://news.1rj.ru/str/rust_offtopic/246945
Telegram
Бешеный Профессор in rust_offtopic
В ФП ссылочно прозрачном языке бабах произойти в принцыпе не должно. Ты явно видишь все места где у тебя IO и где ты в него пишешь. Хотя, это такое - я не силён в ФП. Я волшебник в другом а в ФП я толко учусь. Вон наш любимый Цобакен @DogeShibu может тебе…
Forwarded from Stanislav Popov
почитал простыни https://blog.guillaume-gomez.fr/articles/2017-02-22+Rust+asynchronous+HTTP+server+with+tokio+and+hyper
blog.guillaume-gomez.fr
Rust asynchronous HTTP server with tokio and hyper
tuto articles
Forwarded from Stanislav Popov
реально кажется ух вот в питонке все красиво, типы нинужны
Hirrolot:
типы засоряют код в расте
F: Fn() -> Fut, Fut: Future<Output = ()>
типика лкод
можно было бы так записать: async Fn()
типы засоряют код в расте
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
Ликбез по основным принципам ЯП: классификация, вопросы представления состояния, конкурентности и параллелизма.
https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
Forwarded from hirrolot
T* - мутабельный указатель на мутабельные данные
const T* - мутабельный указатель на константные данные
const T* const - константный указатель на константные данные
T * const - константный указатель на мутабельные данные
const T* - мутабельный указатель на константные данные
const T* const - константный указатель на константные данные
T * const - константный указатель на мутабельные данные