dvm (Was: denv - D version of rbenv)

Nick Sabalausky SeeWebsiteToContactMe at semitwist.com
Fri May 4 15:13:22 PDT 2012


"Jacob Carlborg" <doob at me.com> wrote in message 
news:jo1jnt$1vfl$1 at digitalmars.com...
>> Last time it was brought up, I was unsure of quite what you had in mind. 
>> I
>> was under the impression that you wanted to redesign the whole way the
>> command system *worked*. It's occurred to me that's maybe not what you
>> meant? Were you thinking that the *system* of commands would work the 
>> same
>> way as now, but just some commands/subcommands need to be moved around, 
>> the
>> stuff that's kind of an ugly "internal psuedo-command" should be promoted 
>> to
>> a true command/subcommand, etc?
>
> I was mostly thinking of how the code is structured internally. Basically 
> nothing would be changed from a user's point of view.
>
> What I don't like is that all functionality is implemented in the command 
> classes. The command classes should only handle the actual command and the 
> flags for that given command. Then it should delegate to other classes for 
> functions.
>
> The "install" command is a perfect example of this. Currently the Install 
> class inherits from Fetch, which is so wrong. It just does that to inherit 
> the implementation, it's not an actual subtype. What should have been done 
> is something like this (in some kind of pseudo code) :
>
> class FetchCommand
> {
>     void execute ()
>     {
>         auto fetcher = new Fetcher;
>         auto result = fetcher.fetch(args ...);
>         store(result);
>     }
> }
>
> class InstallCommand
> {
>     void execute ()
>     {
>         auto fetcher = new Fetcher;
>         auto result = fetcher.fetch(args ...);
>
>         auto installer = new Installer;
>         installer.install(result);
>     }
> }
>
> You can have a look at how Orbit it's structured as well. Structuring the 
> code like this will also make it usable as a library (don't know if that 
> would be useful in this case).
>

Ah, ok, I see now.

> What should be changed from a user's point of view is that flags specific 
> to a command should only be available to that command and not globally.
>

Totally agree.

> I was also hoping to factor out any compiler specific code in it's own 
> classes/functions. This would make it possible handle other compilers like 
> GDC, LDC and SDC. Although I don't think they provide pre-compiled 
> binaries in the same way as DMD does.
>

Probably a good idea. Having support for those other compilers would be 
fantastic.




More information about the Digitalmars-d-announce mailing list