[fpc-pascal] FPC's generics

Bisma Jayadi bisma at brawijaya.ac.id
Wed Jun 13 13:35:54 CEST 2007


Hi all,

FPC uses 2 keywords for generics: "generic" for generic definition block, and 
"specialize" for generic type implementation. I think the "generic" keyword is 
quite redundant, useless, and too verbose since generics already use pair of <> 
to define a generics type. Generics definition should be enough described using 
the pair of <> only without "generic" keyword.

The example below should be very obvious to the compiler:

(*** begin of example ***)

type
   TRegularIntegerArray: array[0..100] of integer;
   TGenericArray<T>: array[0..100] of T;

var
   IntegerArrayFromGeneric = specialize TGenericArray<integer>;

(*** end of example ***)

Or, if we MUST use "generic" keyword to help compiler parse the code, also make 
the syntax less cryptic, I suggest using the example below:

(*** begin of example ***)

type
   TList = generic class(TObject)
     type public
        TCompareFunc = function(const Item1, Item2: T): Integer;
     var public
       data : T;
     procedure Add(item: T);
     procedure Sort(compare: TCompareFunc);
   end of T;

   TGenericArray: generic array[0..100] of T;

var
   PointerListFromGeneric = specialize TList for Pointer;
   IntegerArrayFromGeneric = specialize TGenericArray for Integer;

(*** end of example ***)

Though I agree that a generic MUST have a clear structure definition (in type 
section) before it's being used (in var section), since generic is all about 
type definition, also for ease of readability.

Any comments?

-Bee-

has Bee.ography at:
http://beeography.wordpress.com



More information about the fpc-pascal mailing list