LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

Такой подход просто не будет в общем случае работать: компилятор раста имеет право переупорядочивать поля структуры

А не все ли равно, какой порядок? Генерируешь новый экземпляр мономорфной функции под конкретную структуру — вот и все дела. Вплоть до копирования.

Если структуры связаны, то почему бы это и не выразить кодом?
struct B {
a: A,
...
}
Тогда можно будет отдать честную ссылку на подструктуру. Ну а если содержимое «случайно совпало», то может и правда не надо? Тем более, что в новой версии что-то может и поменяться

Go реализует такую композицию через делегацию (type embedding):

type B struct {
    A
}

И внезапно ты можешь дергать поля A как поля B.

Исходная версия byko3y, :

Такой подход просто не будет в общем случае работать: компилятор раста имеет право переупорядочивать поля структуры

А не все ли равно, какой порядок? Генерируешь новый экземпляр мономорфной функции под конкретную структуру — вот и все дела. Вплоть до копирования.

Если структуры связаны, то почему бы это и не выразить кодом?
struct B {
a: A,
Тогда можно будет отдать честную ссылку на подструктуру. Ну а если содержимое «случайно совпало», то может и правда не надо? Тем более, что в новой версии что-то может и поменяться

Go реализует такую композицию через делегацию (type embedding):

type B struct {
    A
}

И внезапно ты можешь дергать поля A как поля B.