DIP11: Automatic downloading of libraries

Nick Sabalausky a at a.a
Tue Jun 14 14:46:29 PDT 2011


"Nick Sabalausky" <a at a.a> wrote in message 
news:it8kkv$20hr$1 at digitalmars.com...
> "Andrei Alexandrescu" <SeeWebsiteForEmail at erdani.org> wrote in message 
> news:it7pd2$2m07$1 at digitalmars.com...
>> http://www.wikiservice.at/d/wiki.cgi?LanguageDevel/DIPs/DIP11
>>
>> Destroy.
>>
>
> After all that talk about how we need to be very cautious about adding new 
> features to the compiler and work with the existing language whenever 
> possible, only a few days later now we're seriously considering adding an 
> entire *build system* to the compiler? And let's not fool ourselves: in 
> order for this not to be half-baked, it would have to completely take over 
> all the roles handled by a full-featured build-and-package-management 
> system.
>
> Just off the top of my head:
>
> - Putting it in the compiler forces it all to be written in C++. As an 
> external tool, we could use D.
>
> - By default, it ends up downloading an entire library one inferred source 
> file at a time. Why? Libraries are a packaged whole. Standard behavior 
> should be for libraries should be treated as such.
>
> - Are we abandoning zdmd now? (Or is it "dmdz"?)
>
> - Does it automatically *compile* the files it downloads or merely use 
> them to satisfy imports? If the latter, then the whole proposal becomes 
> pointless - you'll just need to tie it in with RDMD anyway, so you may as 
> well just keep it outside the compiler. If the former, then you're 
> implicitly having DMD creep into RDMD's territory - So either be explicit 
> about it and take it all the way putting all of rdmd into there, or get 
> rid of it and let the build tools handle package-management matters.
>
> - Does every project that uses libX have to download it separately? If not 
> (or really even if so), how does the compiler handle different versions of 
> the lib and prevent "dll hell"? Versioning seems to be an afterthought in 
> this DIP - and that's a guaranteed way to eventually find yourself in dll 
> hell.
>
> - How do you tell it to "update libX"? Not by expecting the user to 
> manually clear the cache, I hope.
>
> - With a *real* package management tool, you'd have a built-in (and 
> configurable) list of central data sources. If you want to use something 
> you don't have installed, and it exists in one of the stores (maybe even 
> one of the built-in ones), you don't have to edit *ANYTHING AT ALL*. It'll 
> just grab it, no changes to your source needed at all, and any custom 
> steps needed would be automatically handled. And if it was only in a data 
> store that you didn't already have in your list, all you have to do is add 
> *one* line. Which is just as easy as the DIP, but that *one* step will 
> also suffice for any other project that needs libX - no need to add the 
> line for *each* of your libX-using projects. Heck, you wouldn't even need 
> to edit a file, just do "package-tool addsource http://...". The DIP 
> doesn't even remotely compare.
>
> - I think you're severely overestimating the amount of extra 
> dmd-invokations that would be needed by using an external build tool. I 
> beleive this is because your idea centers around discovering one file at a 
> time instead of properly handling packages at the *package* level. 
> Consider this:
>
> You tell BuildToolX to build MyApp. It looks at MyApp.config to see what 
> libs it needs. It discovers LibX is needed. It fetches LibX.config, and 
> finds it's dependencies. Etc, building up a dependency graph. It checks 
> for any problems with the dependency graph before doing any real work 
> (something the DIP can't do). Then it downloads the libs, and *maybe* runs 
> some custom setup on each one. If the libs don't have any custom setup, 
> you only have *one* DMD invokation (two if you use RDMD). If the libs do 
> have any custom setup, and it involves running dmd, then that *only* 
> happens the first time you build MyApp (until you update one of the libs, 
> causing it's one-time setup to run once more).
>

Also, if you do want to throw away the "*.config" file (which might not be a 
good idea) and truly have "no editing needed" by inferring library 
dependencies from dmd's deps output, you still don't need a lot of extra dmd 
invokations: Just one extra deps-gathering invokation each time a 
deps-gathering invokation finds unsatisfied depenencies, and *only* the 
first time you build.

> I think this proposal is a hasty idea that just amounts to chasing after 
> "the easy way out".
>
>
> 




More information about the Digitalmars-d mailing list