On Thu, 2 Jun 2005, Sebastian Kaliszewski wrote:
Michael Van Canneyt wrote:
This is only 'logical' if the hypothesis
"productivity is inversely related to the syntax verbosity"
is correct.
And it's not.
What is correct is "productivity is directly related to the number of
separate language constructs developer has to put in program to acomplish the
task"
Inversely related, I assume you want to say :-)
So, for example, need to put separate finally block to free memory means
additional few constructs. Or lack of standard libary supplied container
apropriate for a task requires programmer to develop his/her own or to adapt
something less usable.
Geeintg rid of end in begin / end wont help much (as they can;t be separated,
they count as single construct).
So here is some little idea which seems to me Pascalish enough to be
considered:
how about new keyword: local
Class variable declared local will be automatically freed upon every exit
from the scope (i.e. something along the lines of implicit try/finally for
some builtin types).
While I can see the use, there are all kinds of problems associated with it.
So instead of
Var
S : TStringList;
ManagedVar // or whatever. All that goes here is freed again by the compiler.
S : TStringList;
begin
S:=TStringList.Create;
// code here
end; // Compiler frees S here.
But the compiler needs to check many things:
1. Initialize the S with Nil.
2. Check that S is assigned only once during the lifetime of the
procedure.
This is actually a bigger restriction than you might think,
unless you want to introduce reference counting.
3. Put a try/finally block and generate a call to S.Destroy at the end.
It must also catch any errors that may occur when s.destroy is
called. For classes, this danger is very real; For ansistrings it is
not (well, very small)
4. It cannot assign S to anything, since that could mean that the
lifetime of S could be prolonged. The alternative is again again ref.
counting.
This is not so easy, and reference counting is always a mess...
Michael.
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel