This article is from the FAQ, by with numerous contributions by others.
Allowing instances in attribute forms makes separate compilation of
fragments very difficult due to problems in calculating the size of objects
being allocated from the descriptor in which the fragment form is bound (to
a slot). E.g.
fSource.bet:
ORIGIN '...'
--- lib: attributes ---
f: (# t: @text;
<<SLOT fLib: attributes>>
enter t[]
<<SLOT fBody: dopart>>
#)
fUsage.bet: ORIGIN '...'; INCLUDE 'fSource' --- program: descriptor --- (# foo: @f do (* ... usage of foo ... *) #)
fImpl1.bet: ORIGIN 'fSource' --- fLib: attributes --- i,j: @integer; r: @real --- fBody: dopart --- do (* ... some code implementing f ... *)
fImpl2.bet: ORIGIN 'fSource' --- fLib: attributes --- i,j,k: @integer; r, s: @real --- fBody: dopart --- do (* ... some code implementing f ... *)
fProg1.bet: ORIGIN 'fUsage'; BODY 'fImpl1'
fProg2.bet: ORIGIN 'fUsage'; BODY 'fImpl2'
 
Continue to: