[racket-dev] planet2

From: Neil Van Dyke (neil at neilvandyke.org)
Date: Mon Dec 10 20:26:13 EST 2012

Jay McCarthy wrote at 12/10/2012 02:22 PM:
> On Sun, Dec 9, 2012 at 1:26 PM, Neil Van Dyke <neil at neilvandyke.org 
> <mailto:neil at neilvandyke.org>> wrote:
>
>
>     * I'm very concerned about discarding support for mixing versions
>     of packages.  PLaneT 1 didn't fully nail this, but I suspect
>     planet2 is punting needlessly, rather than getting data and
>     solving problems (perhaps due to changing mission, as speculated
>     in next two points).
>
>
> My rationale is that what OSes provide is good enough for wide uses 
> and we can more easily build the right versioned package system on top 
> of this than a non-versioned package system on top of one that is 
> versioned.

Perhaps some multiple version support can be grafted on later 
satisfactorily.  I'm just surprised by abandoning the problem, after 
PLaneT made a credible first attempt, and before Racket actually got 
much experience with apps built from lots of independently-developed 
packages.

I still suspect that multiple versions support is a good thing and 
doable.  I wonder whether the design of a new packaging system would 
benefited from having worked through the versioning problem in the 
earlier stages of design, rather than after migrating people from one 
system to a new one.  I don't really know.

> For example, the various library collections on P1 (like scheme, 
> unlib, etc) seems to me a product of the pain of P1 deployment 
> encouraging monolithic packages.

There are also lots of small, loosely-coupled packages in PLaneT.  
Certainly, getting things into PLaneT is tricky, and sometimes, even if 
people got one version into PLaneT, sometimes they'd tell people "a 
better version is in Git" because they didn't want to go through PLaneT 
hoops again.  And there are other reasons people make monolithic 
libraries -- this is not at all peculiar to PLaneT.  Which is part of 
why I was planning in my book to push people to developing around 
loosely-coupled reusable modules, with very low friction to moving the 
module to PLaneT.  I was working on tools to make that a reasonable story.

>     * Related to previous point, it also looks like there *might*
>     (unclear) be a desire to increasingly centralize or canonicalize
>     some of the kinds of library work that I've been thinking are
>     generally best done in a more decentralized and organic manner.
>      If so, have to be careful with this.
>
>
> I assume you are referring to the suggestion to (a) use known 
> collections like data, (b) not give things cute names, and (c) not 
> name things after developers. 

No, it looked like it might be an implicit, pervasive influence.

> This would, for instance, make it so that we have "net/soap" package 
> rather than "roap", "unroap", and "super-soap". I think this is a good 
> thing. We should be encouraging collaboration to produce excellent 
> packages rather than having many 20% solutions.

If one has the resources to pull this off, more power to one.  I'm not 
sure Racket has the resources.  (One way you could do it is if PLT 
Design hired expensive full-time engineers who don't have 
research/teaching commitments.  Or you could do it as projects for 
undergrad team software engineering courses, but I suspect the quality 
of design and implementation would often not be up to what people come 
to Racket for.)

I suspect there's still a big place for grassroots library development 
for Racket.  So I hope the design of the new package system hasn't been 
biased away from grassroots needlessly.

Above are my main points.  Rest of this email is asides, some 
supporting, and some tangential.  All can be skipped.

If you want me to see a response, please CC me.

* * *

Aside #1: On your "net/soap" example... I think a generally better 
practice would be to name it "soap" rather than try to munge a 
conceptual taxonomy into the name as "net/soap", unless "net/" is some 
intertangled framework (which it doesn't seem to be).  The taxonomies 
change over time -- more frequently than the names should.  I think one 
of the PLT lists discussed this before.  Thankfully, people nowadays 
avoid putting these taxonomies as part of the key for most purposes.  
For example, package namespaces for various GNU/Linux distros are flat, 
even if they tend to use taxonomies for UI purposes elsewhere.  For a 
negative example fresh in my mind, CDDB is reviled for using genre as 
part of its key, rather than showing more foresight with their namespace.

Aside #2: Don't be *too* hard on the cutesy names.  Even when projects 
do the officially blessed module with boring name, they tend to wind up 
with better modules arising separate from the official one.  If they do 
eventually move to bring the iconoclast into the fold, blessing it with 
an official generic name, sometimes they tack a "2", "new", "ng", or 
other suffix/prefix onto the old generic name, or sometimes they simply 
break backward compatibility, so you get people talking about which 
version of a language you used for an app when they're really asking 
about which library you used.

Aside #3: Cutesy or developer-qualified names (e.g., Java's use of 
domain name authorities) are also a way for someone to name their 
library and share it, without the burden of trying to be the 
be-all-end-all of "foo".  In his/her spare time, the pope can decide 
whether and when to elevate "fooey" or "joe/foo", or "com.joe.foo" to 
the official "foo".  (I don't actually like seeing my name in package 
names, but I do like that I can comfortably be less cutesy with the 
names, such as when HtmlPrag (an awful name) became "html-parsing" and 
"html-writing", without worrying that I'm getting in the way of someone 
else's better efforts.)

Aside #4: I can tell you that on multiple occasions I've had a client 
want me to revive some old app code, usually written in Python or Java, 
which includes trying to figure out which versions of libraries were 
used originally (and/or port the code to newer versions of the 
libraries, since both Java and Python communities often break backward 
compatibility, and libraries that come through Debian/Ubuntu packaging 
also tend to break at that point, too).  On multiple occasions, at the 
risk of sounding like a fanboy to client, I've used this as an 
opportunity to advocate Racket, noting that Racket does a better job of 
this (with PLaneT).

Aside #5: I'm not sure what the lesson here is, but... the talk of %age 
solutions reminded me of when Olin Shivers said something similar... 
when he put a lot of effort into a couple early SRFIs.  And then the 
SRFI drafts went through a community process for refinement.  And 
PLT/Racket didn't really pick up the result.  And Dr. Shivers directed 
his energy towards other pursuits.  I'm stretching a little, but one way 
to spin this is that canonical library development expensive and 
complicated, and you'll need to enlist and retain enough highly-skilled 
resources if you want it to happen and keep happening.

Aside #6: My coolest libraries (like my time library) are unreleased, 
because I was waiting for them to be sufficiently polished, and then 
they bit-rotted.  And lots of other times, I'm in the middle of an app, 
and don't have time to perfect each of the few of new reusable libraries 
I made in the course of making the app.  So I switched to releasing 
early-and-often (with ugly warnings about known issues), which seems to 
have more net benefit.  I prefer to do complete solutions, but I don't 
have enough resources, and I don't think Racket overall does, either.

Aside #7: We're probably all seeing instances right now when multiple 
different people each probably feel like it might be easier to just do 
things their way, get it done, and move on with their *real* projects, 
rather than to discuss and try to reach some kind of consensus or 
bearable compromise.  Which is sorta how I think libraries are usually 
going to be developed.

Neil V.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20121210/e8ffaf06/attachment-0001.html>

Posted on the dev mailing list.