Почему в структуре Rust только последнее поле может иметь тип динамического размера

В главе о неразмерных типах первого издания книги говорится, что:

Только последнее поле в структуре может иметь тип динамического размера; другие поля не должны. Варианты перечисления не должны иметь в качестве данных типы с динамическим размером.

Вот я не могу понять причину такого ограничения. Какая разница в последнем поле?

@AndrewHenle Однако язык Rust требует, чтобы поле DST было последним полем в порядке исходного кода. Другими словами: правило более строгое, чем оно должно быть технически.

IInspectable 28.04.2024 14:03

@IInspectable Такой запрет очевидным образом предотвращает непреднамеренное использование нескольких полей летнего времени. Это может быть чрезвычайно полезно для сложных макетов. И это вполне может быть технический метод, выбранный для обеспечения ограничения нескольких полей летнего времени по причинам синтаксиса. Rust — очень глубоко продуманный язык, и я бы не стал утверждать, что какая-либо часть его синтаксиса обусловлена ​​просто нетехническими причинами.

Andrew Henle 28.04.2024 14:14

@AndrewHenle Я не обсуждаю языковые правила. Я утверждаю, что это правильный (и хороший) вопрос. Когда я приехал сюда, его рейтинг был -1. К счастью, с тех пор это было исправлено.

IInspectable 28.04.2024 18:41
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
2
3
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Rust, поскольку расположение памяти не указано, ограничение того, чтобы поле динамического типа (DST) было последним, технически не необходимо. При этом компилятор должен знать размер всех полей, кроме одного, и в памяти поле с динамическим размером должно быть последним, иначе он не сможет статически вычислить смещения всех полей.

Таким образом, требование, чтобы летнее время было последним в коде, соответствует требуемому расположению памяти.

Другие вопросы по теме

Похожие вопросы