PureBytes Links
Trading Reference Links
|
Mike,
Very thoughtful commentary you've made, there's alot to agree with there (even for those coming from C++ rather than Java).
IMO, all the types of locality specifiers have their uses. Having a few more of them at our disposal would be great (carefully chosen by TJ to integrate well, of course!).
- Progster
--- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> wrote:
>
> I'd like to address what I see as a flaw in the logic of the original post, as well as a suggestion to Tomasz's reply.
>
> There are perhaps more Java developers now than C++ developers. For the true equivalent of StaticVarGet/Set, the Java keyword "public" would work very nicely (as opposed to "shared").
>
> e.g. Java
>
> class MyClass {
> public static int a;
> ...
> }
>
> e.g. AFL
>
> public static a;
>
> In Java, the variable "a" would be accessible as is (i.e. just by typing "a") anywhere within its own class definition (i.e. the file), and in qualified form outside of its class (e.g. MyClass.a).
>
> As Tomasz pointed out, the AFL declaration would be global and therefore have no equivalent qualifier (i.e. no MyClass qualifier). I believe that that is what would be the biggest source of confusion with what the original poster suggested.
>
> Consider that:
>
> - In Java, when we write MyClass.a from within MyOtherClass, it is clear that the static variable is coming from somewhere else (i.e. from the file MyClass.java).
>
> - Similarly, using AFL's function call StaticVarGet, in a different file, makes it clear that the variable is not necessarily local to the current file.
>
> Compare the above to the original poster's proposal of just using
>
> "a = 3" or "a"
>
> When "a" is referenced outside of the file that it was declared in, the variable becomes ambiguous. Should it default to a new implicit, non static variable as is the current behavior? Or, should it first try to resolve against a static variable of that name? What happens when the user has set the option to force all variables to be explicitly declared; Must the author redeclare the static in every file that its referenced? Clearly, the proposal as originally suggested is not sufficient.
>
> However, this weaknesses might be addressed by requiring the use of the existing "global" keyword whenever a static is to be referenced outside of the file in which it was declared.
>
> e.g.
>
> File1.afl
> public static a; // Declared in File1.afl
> a = 3;
>
> File2.afl
> global static a; // Treat as having been declared somewhere else
> x = a;
>
> This has the advantage of building upon the semantics of the existing "global" keyword, while at the same time being compatible with the requirement of explicit variable declarations.
>
> Going a step further, what I would really like to see is the introduction of both "static" and "final" such that we can write our own procedures/functions that accept constants just as AmiBroker itself has constants for atcFlagDefaults, etc.
>
> e.g.
>
> File1.afl
> public static final myInterestingValue = 0;
> public static final myOtherValue = 2;
>
> procedure doSomething(value) {
> switch (value) {
> case myInterestingValue: ...
> case myOtherValue: ...
> }
> }
>
> File2.afl
> #include_once <File1.afl>
> ...
> doSomething(myInterestingValue);
>
>
> We can do this now already. But, we have no way to protect against anyone accidentally changing the value of myInterestingValue, myOtherValue.
>
> These two keywords would go a long way towards promoting more modular code in larger coding projects.
>
> Mike
>
------------------------------------
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com
TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
amibroker-digest@xxxxxxxxxxxxxxx
amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|