[fpc-pascal] Uniform initialization?

Ryan Joseph ryan at thealchemistguild.com
Mon Nov 12 03:11:44 CET 2018



> On Nov 12, 2018, at 12:25 AM, Sven Barth via fpc-pascal <fpc-pascal at lists.freepascal.org> wrote:
> 
> I'm not convinced that this feature is really needed, because one can simply create a constant and assign that, would transport a clear name as well.

This is for runtime though and necessarily for constants. It’s just a short hand for initializing records so you don’t need to make boiler plate constructors. Often time when you create a new record you add a constructor so you can init in one line. Swift and c++ both have this default constructor and it’s a nice time saver.

for example:

struct Vec2 {
	float x,y;
};

int main() {
	Vec2 v = {1,2};
	v = {v.x + 1, v.y + 1}; 
	return 0;
}

> But *if* I had to decide I would pick #1, cause then there wouldn't be the chance to break existing code if a user decides to add a constructor to their record and some other code relies on there not being a constructor. Also due to the syntax TYPENAME(FIELDNAME:VALUE[;FIELDNAME:VALUE[;…]]) it's in principle possible to have the parser distinguish whether it's a typecast or a default constructor.

Yeah there could be name conflicts then. Maybe there should be some way to explicitly state you want the constructor with a certain name, i.e.,

type
	TVec2 = record
		x, y: integer;
		constructor create; default;
	end;

??? I don’t know, just an idea.

Regards,
	Ryan Joseph




More information about the fpc-pascal mailing list