Since I’ve got a little more free time I wanted to see if there was a simple 
solution to issue in Pascal that causes quite a bit of friction for me, i.e. 
constructor boiler plate. In c++ there is “uniform initialization” for structs 
which uses the {} syntax. It’s basically identically to record consts in 
Pascal, i.e.

type
  tvec2 = record
    x,y:integer;
  end;

var
  vec: tvec2 = (x:1;y1);

but it can be used at runtime (unlike Pascal which is compile time only). Many 
months ago I mentioned this and got a little positive response so I’d to ask 
again since I could probably implement it now.

Are any of these ideas appealing?

1) Simply move the typed const syntax down into blocks and use the type name 
like a function i.e.,

var
 vec:tvec2;
begin
 vec := tvec2(x:1;y1);

2) providing advanced records are on and perhaps a mode switch or some other 
kind of decorator, auto generate an implicit constructor, given no other 
constructors named “create" in the structure exist. i.e.,

{$something+}
type
  tvec2 = record
    x,y:integer;
  end;
{$something-}

var
 vec:tvec2;
begin
  vec := tvec2.create(1,1); // tvec2 has no constructor defined so “create” 
with all public member fields as parameters is implicitly defined
  vec := tvec2.create;  // “create” is a static class function with default 
values so we can do this
end.

Here is the proposed implicit constructor for tvec2:

class function 
create(_x:integer=default(integer);y:integer=default(integer)):tvec2;static;

I prefer #2 because it’s easiest to type and looks most natural to Pascal. Not 
sure what the downsides are even???

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to