• Выпуск Rust 1.37.0: Profile-Guided Optimization, неименованные константы и cargo vendor
    +3

    Неплохой релиз! Среди прочего особенно приятно видеть инфраструктурных спонсоров для Rust :)

  • Замыкание обобщенного типа в Rust
    0

    Спасибо большое за ответы. Вроде бы все прояснилось теперь :)
    Понял еще, что несколько путал эффекты от статических переменных (static), 'static -типов и 'static в качестве времени жизни — это создавало больше всего конфуза в понимании кода

  • Замыкание обобщенного типа в Rust
    +1

    Все же думаю, что статика никакой роли на выделение переменных на стеке не влияет. Насколько я понимаю, 'static в расте означает то, что не только размер, но еще и расположение значения в памяти будет уже известно на этапе компиляции. В куче можно разместить что-либо, лишь положив это в Box, Rc либо какой-то другой смарт-указатель. Меня просто немного сбила с толку формулировка "static-типы", но вижу, что и в коде используется 'static в качетсве lifetime bound, что как бы намекает… Последний уточняющий вопрос: значит ли данное ограничение, что составить дерево из произвольного количества компонент на основе, например, пользовательского input'а с таким подходом будет невозможно?


    Кстати, енамы со значениями так же будут иметь известный размер, так как по факту это обычные union-ы, размер которых принимает наибольшее значение размера его варианта (+ тег).

  • Замыкание обобщенного типа в Rust
    +3

    Спасибо за статью, очень познавательно!
    У меня появилось 2 вопроса.


    1. 'static-типы — здесь идет речь про lifetime, или же это какое-то отдельное понятие? Значит ли это ограничение, что все дерево должно быть определено уже на этапе компиляции?
    2. У меня сложилось впечатление, что если моделью захочется оперировать несколькими разными функциями, то и придется создавать несколько разных полей в структуре Component. Или с данным подходом можно будет менять ссылку с одного замыкания на другое? Меня настораживает, что если я захочу усложнить логику приложения, расширяя список функций, которыми я смогу взаимодействовать с моделью, то мне придется каждый раз менять объявление структуры компонента, добавляя в нее новые поля для замыканий.