Tampoco he usado Registros avanzados, pero sí he usado los clásicos Objetos (type Object) de Free Pascal.
Los registros avanzados son estructuras de datos que se comportan como los clásicos RECORD pero que tienen la posibilidad de incluir también funciones o procedimientos como las clases:
type
TSomeRecord = record
FSomeField: integer;
function SomeMethod: integer;
end;
Aquí un ejemplo:
https://blog.dummzeuch.de/2017/10/31/advanced-records-in-lazarus-fpc/Como estructura de datos, se parecen más a los RECORD que a las clases, sobre todo porque se crean de forma estática y no soportan herencia (si mal no recuerdo).
Pero en Free Pascal también se tiene el tipo OBJECT para crear algo similar a los ADVANCED RECORD.
En resumen, los OBJECT son la estructura inicial de objetos que apareció en Pascal como un paso para la implementación final de clases. Por otro lado Delphi creó los Registros Avanzados como una mejora o ta vez como una copia de la funcionalidad que ofrecía C++. Pero fomo Free Pascal trata de seguir la compatibilidad con Delphi, terminó incluyendo, también, a los Registros Avanzados, aunque se necesita un modo especial.
Aquí una discusión al respecto:
https://forum.lazarus.freepascal.org/index.php?topic=30686.0En cuanto a los contenedores, lo que recuerdo es que no se llevan bien con Objetos o Registros Avanzados, porque han sido diseñados para manejar clases, así que mi sugerencia es que uses Clases si piensas usar contenedores, y así te evitarías algunos líos como:
https://fpc-pascal.freepascal.narkive.com/6I67LNUK/generic-tfpglist-record-type-gives-me-compiler-error-operator-is-not-overloaded