envy for "Writing Go Packages"

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri May 7 17:40:30 PDT 2010


Michel Fortin wrote:
> On 2010-05-07 13:55:34 -0400, Walter Bright <newshound1 at digitalmars.com> 
> said:
> 
>> Source code could look something like:
>>
>>      import http.d_repository.foo.version1_23;
>>
>> and the compiler could interpret "http" as meaning the rest is an 
>> internet url, foo is the package name, and version1_23 is the 
>> particular version of it.
> 
> So now, each time a new version of a library pops up you need to 
> search-replace the version number for all your source code, and source 
> code of other library you depend on? This is insane.

Not at all. Some builds want to peg the code against a specific version, 
so they encode that in the path. Some others may just want to use the 
latest, so they'd import http.d_repository.foo.current. On the server, 
current is always aliased to the latest.

This scheme is used everywhere on Unix.

> The version number shouldn't be there, except perhaps if it's a 'major' 
> version number full of breaking changes.

When I delivered my book, my publisher asked me to send them all LaTeX 
packages I used. I replied, "they're the system-provided packages coming 
with LiveTeX x.y.z". They insisted they need the exact files so they 
have them. It's not at all uncommon (albeit sad) that software is built 
for a very specific version of some software. My employer has huge issues m

> Also, putting in the source code the location or protocol to fetch the 
> repository isn't much better. There's a reason we have a module import 
> path: so that finding external code depends on compile-time 
> configuration, not on the actual code you build.

That's a good point. At a minimum, there should be the possibility to 
define aliases like this:

alias http.erdani.com.tdpl.code tdpl;
...
import tdpl.stuff;

Then the alias definition becomes a unique point of maintenance. 
Unfortunately something like that doesn't currently work, so if the 
online modules feature is introduced, we need to introduce such aliases 
as well.

> Allowing URLs in the import path might be an interesting idea though.

Yah. Unfortunately other languages don't have it so it's difficult to 
learn from others' experience.


Andrei


More information about the Digitalmars-d mailing list