In Racket and CL often one does things like
(define myclass% (class ..)). A reference to an object of type “class” is created and assigned to the variable
myclass%. So functions, classes and so on are assigned to variables. The semantic is uniform also if different respect other PL, because the declarations are potentially assignement to a live system.
In CL, fater class definitions one had to call the API and finalize them. So the compiler can apply optimizations.