Предварительное объявление записей (record) в Delphi

Вольный перевод поста Forward record declaration.

Предварительная объявление не новая концепция. Она уже присутствовала в оригинальном Паскале Вирта, где она позволяла программистам делать только одну вещь — вызывать процедуру A из процедуры B и вызывать процедуру B из процедуры A. В те времена не было интерфейсов, классов, модулей, только процедуры и функции. Вот пример

Более знакомая современная концепция — предварительное объявление для классов и интерфейсов.

В тоже время в Object Pascal нет концепции предварительного объявления записей. Следующий код не компилируется

Существует трюк который позволяет достичь аналогичной функциональности с помощью другого синтаксического сахара - record helpers. Мы можем удалить объявление TRecB.Other из TRecB и потом снова добавить его через хелпер для TRecB.

Но помните, что это решение менее стабильно: другой код может скрыть функционал TRecBHelper введя свой собственный хелпер для TRecB. (противная особенность языка которая действительно должна быть исправлена уже давно)