I'm concerned that this dramatically underrates the importance of
having some kind of specification for a library (or any software).
A project that emerges through gung-ho programming alone is likely
to be incomprehensible to other programmers who may want to
contribute (and probably to the author, a few months later).

Maybe this is my own preference showing (I always try to work out a
spec and a formal semantics first), but I think that even an informal
and protean specification is beter than no specification at all.  To
paraphrase Conal Elliott, I'd like these libraries to be precise about
'what', not just 'how'.

I too often start solving a problem by writing a draft spec, and find that it clarifies thinking a lot. But there are situations where it doesn't make sense. Sometimes it's better to just get something out the door. This tends to be the case when the problem is either really well understood (i.e. the spec is obvious), or really poorly understood (i.e. no use writing a spec about guesses and stabs in the dark).

In terms of deliverables, if stable releases were to be cut from Scheme Live at intervals, those releases should be defined by a spec document, and ship with the code at that point in time as a sample implementation of the spec. (I.e. just like SRFI in this respect, but probably without the rationale sections, unless someone is keen to write them.)

The question then is how to arrive at this document. It will be just a file in version control, so in principle nothing stops people from editing that file whenever they like. If you like to go spec first, you could edit the doc first until you're happy with it, and then write the code. Someone who prefers to implement first could do that.

IMHO the right approach would be informally discovering a process that works for the participants. If only one person works on HTML parsing for example, and that person likes implementing first, then they should work on those parts that way. Otherwise we'd have no HTML parsing library, which IMO is a bigger loss. If we have a parsing library that sucks but gets the job done, can always fix it later, keeping in mind that the process if tolerant of mistakes.

Related to comprehensibility is the issue of the monorepo.  What's
the advantage of this approach?  I second John's point about the
difficulty of cleanly extracting subtrees; this is especially a
problem if any (sub)library were to become a SRFI.  Committing and
testing a monorepo seem likely to become very time-expensive, as well.
Why not multiple repos, perhaps with Git submodules?

The main point of a monorepo is that changing module boundaries becomes easy. Another point is to get people invested in the whole, avoiding a situation where everyone picks their favorite parts and doesn't run the rest. This approach ensures that a cohesive whole eventually emerges, not only a self-assembly kit of good parts.

For testing the whole collection, CI is a big help. When programming locally, the test runner should let people run only parts of the full test suite.

Not sure what you mean by committing being slow; git isn't slow with the kinds of repo sizes we'd be likely to hit. Echoing many people's experience with git submodules, I'd have to say "now you have two problems".

In summary, I'd like a Scheme Live library collection to be clear,
well-defined, and easy to work with.  A large monorepo of unspecified
in-progress libraries sounds like the opposite.

That would be everyone's goal, but we may disagree on how to get there. We may only disagree in degree, not in kind.

Reply via email to