[fpc-devel] RTTI generating
Boian Mitov
mitov at mitov.com
Sat Sep 20 02:08:44 CEST 2014
Hi Hans,
I am sorry to disagree with you.
The attributes in particular allow you to do real magic, and reduce your
code by at least 4 times, and speed up your development up to 10 times.
We have done that in Delphi.
I actually did a session in the PasCon few days on that.
Here is example:
TMyInterfacedClass1 = class;
[CreateType( typeinfo( TMyInterfacedClass1 ))] // Specifies the default
creation type as TMyInterfacedClass1
IMyInterface = interface
['{EB12CEBD-42C3-4259-AE2C-70267B67F454}']
function GetValue() : String;
end;
TMyInterfacedClass1 = class( TBasicInterfacedObject, IMyInterface )
public
function GetValue() : String;
end;
TMyInterfacedClass2 = class( TBasicInterfacedObject, IMyInterface )
public
function GetValue() : String;
end;
TMyNestedClass = class( TBasicObject )
protected
[Default( True )] // FValue1 will be initialized with True
FValue1 : Boolean;
[Default( 11.5 )] // FValue2 will be initialized with 11.5
FValue2 : Real;
[AutoManage( TMyInterfacedClass2 )] // FInterfaceValue will be created as
TMyInterfacedClass2
FInterfaceValue : IMyInterface;
public
property Value1 : Boolean read FValue1;
property Value2 : Real read FValue2;
property InterfaceValue : IMyInterface read FInterfaceValue;
end;
TMyClass = class( TBasicObject )
protected
[Default( 100 )] // FValue1 will be initialized with 100
FValue1 : Integer;
[Default( 'Helo World!' )]
FValue2 : String; // FValue1 will be initialized with 'Helo World!'
[AutoManage] // FNested will be automatically created and destroyed
FNested : TMyNestedClass;
[AutoManage( TStringList )] // FStrings will be automatically created as
TStringList and destroyed
// [AutoDestroy] // - If AutoDestroy is used instead of AutoManage, the
object will not be created but will be automatically destroyed!
FStrings : TStrings;
[AutoManage] // FNested will be automatically created as TStringArrayList
FStringArrayList : IStringArrayList;
[AutoManage] // FInterfaceValue will be created as TMyInterfacedClass1
FInterfaceValue : IMyInterface;
public
property Value1 : Integer read FValue1;
property Value2 : String read FValue2;
property Nested : TMyNestedClass read FNested;
property Strings : TStrings read FStrings;
property StringArrayList : IStringArrayList read FStringArrayList;
property InterfaceValue : IMyInterface read FInterfaceValue;
end;
As you can see all the management of all the classes and interfaces is done
without the need of even one line of code.
No constructors, no destructors, nothing.
This alone cuts vast amounts of code.
This however only scratches the surface of the RTTI power. You have no idea
about some of the other possibilities ;-) .
The RTTI does not only work with properties and fields, but with functions
as well, allowing easy implementation of RPC and network distributed
execution.
It is a whole ball game.
Frankly some of the arguments you provide ware the same I have heard 20
years ago when I programmed in C++ and people ware telling me I should be
doing it in Assembler.
They simply had no idea what power OOP had as example, as you probably have
no idea what is the real power of modern RTTI when properly used.
I am at the same time huge fan of strong typed languages. The advanced RTTI
does not really mean the code should and will not be strongly typed. Indeed
I have done my own RTTI API which is stronger typed than the one Delphi
provides.
With best regards,
Boian Mitov
-------------------------------------------------------
Mitov Software
www.mitov.com
-------------------------------------------------------
-----Original Message-----
From: Hans-Peter Diettrich
Sent: Friday, September 19, 2014 4:28 PM
To: FPC developers' list
Subject: Re: [fpc-devel] RTTI generating
Boian Mitov schrieb:
It's up to the coder to make all properties etc. published, when he
*intends* to ever use RTTI on them. That't the way to tell the compiler
what to do.
Inside a program there exists no distinct "brave object inspector" and
"unauthorized object garbler" - both can be implemented by using RTTI.
If you don't like safe types and other restrictions, which exist in
Pascal for good reasons, then choose any unsafe language to implement
whatever mess you like :-]
DoDi
_______________________________________________
fpc-devel maillist - fpc-devel at lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
More information about the fpc-devel
mailing list