Блог*
#prog #rust #моё Хроники замыканий Как я уже говорил, для каждого литерала замыкания компилятор Rust создаёт свой собственный анонимный тип, в котором содержатся захваченные замыканием переменные. Эти сгенерированные типы объединяет одно: они реализуют один…
Ох, постараюсь уложить это в голове. Есть ещё что-то, что нужно знать о замыканиях?
Да. Иногда требуется одно и тоже замыкание передать в качестве аргумента в несколько функций. Клонировать в этом случае не получится, потому что замыкание является клонируемым не всегда (а именно — начиная с версии 1.26.0, тогда, когда все захваченные значения клонируемы). Именно поэтому в стандартной библиотеке есть несколько blanket impl-ов, которые реализуют Fn*-трейты для ссылок на замыкания (например, вот). Поэтому, если, скажем, в двух функциях требуется замыкание, реализующее
Видимо, на этом всё?
Отнюдь, о замыканиях можно рассказать ещё кое-что... Но это уже, видимо, тема для следующего поста.И будем надеяться, что его не придётся ждать ещё пару месяцев.
Да. Иногда требуется одно и тоже замыкание передать в качестве аргумента в несколько функций. Клонировать в этом случае не получится, потому что замыкание является клонируемым не всегда (а именно — начиная с версии 1.26.0, тогда, когда все захваченные значения клонируемы). Именно поэтому в стандартной библиотеке есть несколько blanket impl-ов, которые реализуют Fn*-трейты для ссылок на замыкания (например, вот). Поэтому, если, скажем, в двух функциях требуется замыкание, реализующее
Fn(i32) -> i32
, то можно сделать замыкание и передавать в качестве аргумента ссылку на него. В некоторых случаях сама функция требует ссылку на замыкание (хотя это, вообще говоря, странно). В таком случае можно взять ссылку непосредственно от литерала замыкания. Выглядит это несколько странно, но работает.Видимо, на этом всё?
Отнюдь, о замыканиях можно рассказать ещё кое-что... Но это уже, видимо, тема для следующего поста.
GitHub
Stabilize the copy_closures and clone_closures features by SimonSapin · Pull Request #49299 · rust-lang/rust
In addition to the Fn* family of traits, closures now implement Copy (and similarly Clone) if all of the captures do.
Tracking issue: #44490
Tracking issue: #44490
Forwarded from 💮
Помню, мы как-то собирались у кого-то дома с ноутбуками и поднимали упоротую сеть такого вида:
(интернет) -eth- (PC) -eth- (ноутбук) -wifi- (ноутбук) -eth- (ноутбук)
(интернет) -eth- (PC) -eth- (ноутбук) -wifi- (ноутбук) -eth- (ноутбук)
#prog #rust
Компилятор Rust не очень быстрый, но программисты часто усугубляют ситуацию жирными зависимостями. В частности (что лично мне тоже жутко не нравится), используют регулярное выражение там, где достаточно простого самописного парсера.
https://blog.kodewerx.org/2020/06/the-rust-compiler-isnt-slow-we-are.html
Компилятор Rust не очень быстрый, но программисты часто усугубляют ситуацию жирными зависимостями. В частности (что лично мне тоже жутко не нравится), используют регулярное выражение там, где достаточно простого самописного парсера.
https://blog.kodewerx.org/2020/06/the-rust-compiler-isnt-slow-we-are.html
blog.kodewerx.org
The Rust compiler isn't slow; we are.
Video game development, hacking, and debugging. Brought to you by BlipJoy!
Маjко
Photo
Если кому-то сложно читать, то вот то же самое текстом: https://t.iss.one/ebanatics_learn/22746
Telegram
Nick Linker in Задачник по ебанатике или "Что такое ФП"
Чуть не вытекли глаза...
Здравствуй, <дорогой любитель ФП>
Спасибо за интересный вопрос Я выходные посмотрю эту библиотеку и напишу своё впечатление о ней. А пока поделюсь общими соображениями о функциональном и декларативном подходе.
В некоторых ситуациях…
Здравствуй, <дорогой любитель ФП>
Спасибо за интересный вопрос Я выходные посмотрю эту библиотеку и напишу своё впечатление о ней. А пока поделюсь общими соображениями о функциональном и декларативном подходе.
В некоторых ситуациях…
Донаты! Донаты?
Anonymous Poll
12%
Назови счёт, и я буду кидаться деньгами в монитор!
53%
Слышь, продолжай посты делать за спасибо
35%
😐
#prog #rust
Несколько неожиданное следствие строгой типизации в Rust: она помогает не оставлять в коде отладочную печать. Действительно, если убрать для своего типа реализацию
Несколько неожиданное следствие строгой типизации в Rust: она помогает не оставлять в коде отладочную печать. Действительно, если убрать для своего типа реализацию
Debug
, то код, сгенерированный {, e}print{, ln}!
/format{, args}!
/write!
/dbg!
перестаёт тайпчекаться. К сожалению, не помогает, если печатаются примитивы и типы из чужих библиотек, для которых есть Debug
.Forwarded from мне не нравится реальность (вафель 🧇)
Просто хочу поделиться замечательным rust-quiz от dtolnay (кто бы сомневался). Есть над чем задуматься (хотя прилично и простых вопросов)
Forwarded from Mikail Bagishov
Ты предлагаешь научить компилятор erase-ить любые трейты?