История изменений
Исправление
dave,
(текущая версия)
:
Как я понимаю, это что-то типа std::function из плюсов?
Горячо, но не совсем.
В rust, например, можно «употребить» все замыкание, и владение им уйдет в вызываемый код! Это FnOnce. Раньше в стабильной версии не было явной поддержки вызова указателей на такие замыкания, которые Box<dyn FnOnce>, т.е. забоксенные замыкания из кучи. Приходилось или расписывать в ручную (существующий крейт не покрывал все случаи), или использовать нестабильную версию rust. Как понимаю, теперь все поддерживается в стабильной версии из коробки.
Ну, и касательно размещения в памяти. Скорее всего, в rust нет «small size optimisation» для указателей на замыкания, но я точно не знаю. Сами замыкания без боксинга, конечно, находятся на стеке, а вот забоксенные как указатели на кучу - фиг знает, оптимизируется их размещение для крошечных замыканий или нет.
Исправление
dave,
:
Как я понимаю, это что-то типа std::function из плюсов?
Горячо, но не совсем.
В rust, например, можно «употребить» все замыкание, и владение им уйдет в вызываемый код! Это FnOnce. Раньше в стабильной версии не было явной поддержки вызова указателей на такие замыкания, которые Box<dyn FnOnce>, т.е. забоксенные замыкания из кучи. Приходилось или расписывать в ручную (существующий крейт не покрывал все случаи), или использовать нестабильную версию rust. Как понимаю, теперь все поддерживается в стабильной версии из коробки.
Ну, и касательно размещения в памяти. Скорее всего, в rust нет «small size optimisation» для указателей на замыкания, но я точно не знаю. Сами замыкания без боксинга, конечно, находятся на стеке, а вот забоксенные как указатели на кучу - фиг знает, оптимизируется их размещение для крошечных замыканий, или нет.
Исходная версия
dave,
:
Как я понимаю, это что-то типа std::function из плюсов?
Горячо, но не совсем.
В rust, например, можно «употребить» все замыкание, и владение им уйдет в вызываемый код! Это FnOnce. Раньше в стабильной версии не было явной поддержки этой фичи для указателей на такие замыкания, которые Box<dyn FnOnce>, т.е. забоксенные замыкания из кучи. Приходилось или расписывать в ручную (существующий крейт не покрывал все случаи), или использовать нестабильную версию rust. Как понимаю, теперь все поддерживается в стабильной версии из коробки.
Ну, и касательно размещения в памяти. Скорее всего, в rust нет «small size optimisation» для указателей на замыкания, но я точно не знаю. Сами замыкания без боксинга, конечно, находятся на стеке, а вот забоксенные как указатели на кучу - фиг знает, оптимизируется их размещение для крошечных замыканий, или нет.