В главе о неразмерных типах первого издания книги говорится, что:
Только последнее поле в структуре может иметь тип динамического размера; другие поля не должны. Варианты перечисления не должны иметь в качестве данных типы с динамическим размером.
Вот я не могу понять причину такого ограничения. Какая разница в последнем поле?
@IInspectable Такой запрет очевидным образом предотвращает непреднамеренное использование нескольких полей летнего времени. Это может быть чрезвычайно полезно для сложных макетов. И это вполне может быть технический метод, выбранный для обеспечения ограничения нескольких полей летнего времени по причинам синтаксиса. Rust — очень глубоко продуманный язык, и я бы не стал утверждать, что какая-либо часть его синтаксиса обусловлена просто нетехническими причинами.
@AndrewHenle Я не обсуждаю языковые правила. Я утверждаю, что это правильный (и хороший) вопрос. Когда я приехал сюда, его рейтинг был -1. К счастью, с тех пор это было исправлено.
В Rust, поскольку расположение памяти не указано, ограничение того, чтобы поле динамического типа (DST) было последним, технически не необходимо. При этом компилятор должен знать размер всех полей, кроме одного, и в памяти поле с динамическим размером должно быть последним, иначе он не сможет статически вычислить смещения всех полей.
Таким образом, требование, чтобы летнее время было последним в коде, соответствует требуемому расположению памяти.
@AndrewHenle Однако язык Rust требует, чтобы поле DST было последним полем в порядке исходного кода. Другими словами: правило более строгое, чем оно должно быть технически.