Rectangle

type Rectangle =
    inherit Control

    val memory@atom = (width@atom, height@atom)
        |> to_atom
        |> map { w, h ->
            let quad = Quad.create
                up_left = Vector3 0 0 0
                up_right = Vector3 w.as<f32> 0 0
                down_left = Vector3 0 h.as<f32> 0
                down_right = Vector3 w.as<f32> h.as<f32> 0

            MeshMemory.from_quad quad }

Прямоугольник хранит в себе геометрическую форму, созданную исходя из его ширины и высоты.

to_atom преобразовывает кортеж атомов в атом кортежей.

Из-за модификатора @atom привязка memory имеет тип MeshMemory, а не Atom<MeshMemory>.

type Control
    var maybe_drawable : Option<Drawable> @mut = None

Единица упаковки кода называется ящик.

Тип Rectangle определён в ящике control, отвечающем за внутреннюю логику элементов управления. Последний же фрагмент кода находится в ящике drawer, который выводит пользовательский интерфейс на экран и зависит от конкретного отрисовщика, частью которого является Drawable.

type Rectangle
    let materials : Materials @auto

    val drawable = Drawable
        material = materials.ui
        mesh = Mesh.from_memory memory@atom

    maybe_drawable = drawable

Поле materials получает значение автоматически благодаря атрибуту @auto. Далее оно используется при создании объекта Drawable.

let materials @publish = app.drawer.materials

let rectangle = Rectangle.new

materials опубликовано для передачи значения в зависимые от него объекты и функции.

Именно автоматическая передача объектов в конструктор Rectangle это не только вопрос снижения сложности. В других ящиках может находиться код, создающий Rectangle, но ничего не знающий о зависимостях, которые он получил в ящике drawer. Весь этот код продолжит работать, но теперь при вызове будет требовать предварительно опубликованного materials.