I was just watching a video from Jonathan Blow (the developer of a really 
popular game named Braid) on a new language he’s working on to get around all 
the cruft and slowness in c++ for making games. One the problems he identifies 
is poor memory layout using object oriented inheritance and arrays of structs.

His proposal was to make it easier to build linked lists in structs that can 
access tightly packed arrays of continuous memory for fields that are iterated 
often and susceptible to cache misses. The solution he came up with is really 
brilliant in my opinion and even though he used the keyword “using” it’s 
basically like “with” in Pascal.

I never use “with” normally but this is an extremely interesting idea and I 
wonder if it would be compatible with how “with” works in FPC now. Is any of 
this functionality possible using “with"? Curious what anyone thinks about 
this, providing my explanation makes any sense.

type
        TEntity = record
                position: TVec2;
        end;
        TEntityPtr = ^TEntity;

type
        TDoor = record
                with entity: TEntityPtr; // import entity namespace for entire 
TDoor scope
                state: boolean;
        end;

var
        door: TDoor;
begin
        door.entity := GetAvailableEntity;      // pop an entity from storage
        door.position := V2(1, 1);              // entity is “with” so we get 
access to its members (door.entity^.position)
        
// works with function parameters also.
// this is almost like a class helper or at very least mimics “self” in methods.

procedure OpenDoor(with var door: TDoor);
begin
        state := true; // with imports door namespace into entire function scope
end;


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