Import concerns revisited
Dave
Dave_member at pathlink.com
Tue Jul 11 08:24:27 PDT 2006
Sean Kelly wrote:
> Walter Bright wrote:
>> Dave wrote:
>>> Walter, I think what most are getting at here is that the 'as' syntax
>>> just seems cleaner and more efficient from a coding and maintenance POV.
>>>
>>> If it's easy to implement, then I say go for it. If nothing else,
>>> people can still use 'explicit' aliasing. I argue that 'as' will
>>> actually be quicker for newbies to grasp (*especially* when they see
>>> it in example code), and my sense is that it will be a boon to
>>> maintenance because it generally won't end-up buried in the middle of
>>> a module like many aliases would be. It's not like alias will be a
>>> wasted feature - most prominently it will be used for storage types;
>>> it just feels more 'natural' that way.
>
> (I'm pretty tired so forgive me for being succinct/unclear)
>
>> I think you're saying that this is not a discussion about
>> functionality, but about aesthetics. I agree with that.
>>
>> A couple of people have brought up the alias-in-the-middle thing:
>>
>> 1) If it's in the middle because it's in a nested scope, then it only
>> applies for the duration of that scope. Presumably, it would be easily
>> visible to anyone looking at that scope.
>>
>> 2) I think we can all agree that if it is at module scope in the
>> middle, that is probably bad coding style - especially if there are
>> forward references to it.
>
> Certainly. However, it's been my experience that the vast majority of
> programmers on any given project tend not to be particularly scrupulous
> with their coding style, and code quality tends to degenerate over time.
> Therefore, I believe that any means available to encourage good coding
> style and ease readability is worth considering quite carefully. Having
> literally tossed old projects in the trash because the cost of
> maintenance was actually higher than a complete rewrite, I really can't
> stress this point enough. But please note that I'm not suggesting a
> language or tool should in any way "dumb itself down" for the user, only
> that aesthetics plays a significant role in determining whether a
> particular feature or technique will be successful.
>
Exactly - I couldn't have said it better.
>> 3) The with-import-as won't eliminate bad coding style with aliases.
>> One can still plop an alias down in the middle of the module.
>
> I do believe that bad code typically results from a few common causes:
>
> * The programmer honestly doesn't know any better. Often he's a novice
> or simply hasn't been exposed to the level of programming required for
> the task assigned.
>
> * The programmer knows better but is in a hurry and doesn't care about
> cutting a few corners. He'll go back and fix it when there's more time.
> And that time will never be available.
>
Great point.
> In both of these cases, language aesthetics makes a difference. In the
> first case, a mentor could suggest an alternate approach. For this to
> succeed the learning programmer must be able to remember the solution
> and it must be fairly easy to execute. If not, the programmer is
> destined to become a member of the second category, as he now knows
> better but finds some excuse not to use the technique anyway, often
> because he can't remember the details or because it requires too much
> typing. In both cases, having support for the suggested technique built
> into the language or tool is ideal, as it presents both a syntactical
> reminder and a simpler way to accomplish the task than the programmer
> would be inclined to use otherwise. Finally, if the technique *looks
> better* than another method and it's used pervasively, it will typically
> be followed by others (the broken window problem).
>
Exactly.
>> 4) At least with aliases, they need to be defined within the module.
>> This means one can do a simple search of one source file to find any
>> aliases.
>
> Given the size of some of the source files I've seen, even a directed
> keyword search may take some time. This simply doesn't compare to a
> glance at the import line.
>
>> Let's look a bit at the aesthetics:
>>
>> with foo.bar import
>> abc as def,
>> ghi as jkl,
>> mno;
>>
>> import very.long.name as N;
>> vs:
>> static import foo.bar;
>> alias foo.bar.abc def;
>> alias foo.bar.ghi jkl;
>> alias foo.bar.mno mno;
>>
>> import very.long.name;
>> alias very.long.name N;
>>
>>
>> Yes, the latter is more typing. If one was to do this a lot, it can
>> get annoying. But is it going to be done a lot? I think that is the
>> crux of the matter.
>
> Assuming the language stays as-is, I believe the aliasing will likely be
> limited to instances where collisions occur, as the technique is easy to
> forget and requires a lot of typing. I expect this will also lead to
> maintenance issues as library upgrades cause symbol collisions and such.
>
Again, exactly.
> As for qualifiers themselves, I expect the typical module name to be at
> least two levels deep:
>
> import product.package.module;
>
> and often more for large libraries. Mango is a useful reference here,
> and serves to support this assertion.
>
>> P.S. There are other possible syntaxes:
>>
>> import foo.bar
>> { def = abc,
>> jkl = ghi,
>> mno,
>> }
>
> As long as the syntax is aesthetically pleasing and
> logically/structurally similar to Kris' proposal, I won't bicker over
> minutiae. That isn't too say I'm overly fond of the syntax you just
> suggested, but I do understand that a slightly different syntax may
> parse more easily or better fit the 'feel' of the language as a whole.
>
The exact implementation I leave to Walter (if the statement still
starts with '[private] import' ;))
>
> Sean
More information about the Digitalmars-d
mailing list