alternative aliases [Re: [fpc-devel] Re: [fpc-pascal] Re: Ideas for namespace implementation]
Martin
fpc at mfriebe.de
Tue Jul 27 12:35:13 CEST 2010
On 27/07/2010 10:20, Alexander Klenin wrote:
> On Tue, Jul 27, 2010 at 02:27, Martin<fpc at mfriebe.de> wrote:
>
>> uses Foo in 'lcl' alias 'FooLCL', Foo in 'RTL' alias 'FooRTL'
>>
> I think this is a reasonable idea, with the following caveats:
>
> 1) I think both aliases and namespaces should be identifiers, not strings
> (i.e. quotes are unnecessary distraction).
>
ok, by me
especially for the namespace (see the wiki page too), it solves the
difference between
uses Foo in 'LCL'; // a folder called lcl, in the project
uses Foo in LCL; // the namespace
alias without quotes is sensible too.
> 2) I think that namespace-like syntax is preferable, i.e.
> "LCL.Foo", not "Foo in LCL"., additionally, I do think it would do no harm
> to let programmer use "namespaced" unit without alias.
>
yes and no:
a) "in" is already established
b) ok, but this must only be allowed in the uses clause.
In the uses clause the dot as no ambiguity . In the source it can have
(see many earlier mails)
In the source, the unit should only be known by either it's name, or
if aliased by it's alias only.
Both alternatives could be allowed, they do not conflict.
Unless in $Mode Delphi, the dot will at some time be used in delphi
compatibility....
> 3) Finally, after a slight variation of syntax to avoid extra 'alias' keyword,
> we arrive at the following proposed syntax:
>
> uses
> FooLCL=LCL.Foo, RTL.Foo;
>
possible => but not my favourite
rather shorten "qalias" to "as"
uses LCL.Foo as LCLFoo
> begin
> FooLCL.proc();
>
yes
> RTL.Foo.proc();
>
no,no,no
The beauty of the alias is, that the pascal source remains pascal, and
not a new form of java or C
also RTL.Foo.proc is ambigious.
there could be a
unit RTL;
type Foo=class
class procedure proc;
end;
> end.
>
> which is quite similar to already existing 'alias' feature for types:
>
> type
> TFooLCL=LCLUnit.TFoo;
>
> begin
> TFooLCL.Create();
> RTLUnit.TFoo.Create();
>
yes, but if you do the above uniot namespace with dot in source, you
could also read this as
unit TFoo, procedure Create(); // in namespace RTLUnit
---
uses RTLUnit.TFoo; RTLUnit.TFoo.Create();
More information about the fpc-devel
mailing list