3 ms·
JavaDoc has also traditionally been pretty good, and Java's idioms let there be rich doc in the source comments that gets turned into nice HTML. Every so often
by Jach 3y ago
JavaDoc has also traditionally been pretty good, and Java's idioms let there be rich doc in the source comments that gets turned into nice HTML. Every so often someone tries to make something similar for Lisp, with mixed results. (The one I remember most recently is https://quickref.common-lisp.net/index-per-library.html https://quickref.common-lisp.net/index-per-library.html but I pretty much never visit it, it's not helpful to me.) It also doesn't help that every project might do something different. (There's also multiple types of docs for different audiences in different contexts, but that's a separate common issue for any language and team.)
For a lot of the commonly used libraries, the doc is sufficiently decent, though sometimes unintuitive to find. For core stuff I like the hyperspec as much as the next lisper (and opening it on a symbol is just ,h for me) but there's also http://clqr.boundp.org/ http://clqr.boundp.org/ that not everyone knows about, it's a great little reference to have printed out at my desk. And there's situations like how part of pretty much every Lisp, available through ASDF, is UIOP, a great little portability library. Its doc is at https://asdf.common-lisp.dev/uiop.html https://asdf.common-lisp.dev/uiop.html and it originates in the source repo from a Lisp script taking doc info from the source and applying a .texinfo template to it. Pretty bespoke. But this is also just part of the cost/benefit of CL: it's very unopinionated, unlike say Java or Clojure, and so lets individuals and teams do what they want which naturally isn't going to be the same worldwide. I like certain doc (especially at least one example of using the thing) in repo README files, others don't, nothing forces one way or the other.
Once the confidence for Lisp is there though, you're right that it's not a big deal. It's very nice to jump-to-source for everything, including SBCL internals, and modify things even. I can fix some bugs in a dependency library, right now, without having to file an issue/pull request to the library maintainer and waiting for a new release, and that modification can even live in my source tree in the interim as just a bit of code that runs after loading the main library and then redefines one of its functions or whatever.
I disagree that any effort needs to be made on attracting lone wolves, less even than trying to make editor support better for beginners; the loners will come on their own in time. Not because CL can only be used by loners (million+ lines of code projects made by teams demonstrate otherwise), but because it's a very good multiplier for that situation.
- medo-bear 3y agoI wasn't being full serious. Personally I take it for granted that CL can be used well in teams just like any other language. Teams are about leadership anyway, which is a seperate concern from choice of language. However, that CL gives you the power to be "lone wolf" (read effective solo programmer) instead of a lone sheep is a huge benefit. I also think that when people decide to learn a comp language, more often than not they do so in their own free time, without other distractions - ie when they are alone. Because of the at-best not so straight forward and dry state of documentation in common lisp libraries (the spec, while dry, is actually really good), common lisp is a bad starter for that type of learner. I mean just the dry style itself looks like it is either not maintained or poorly written. It is a shame because common lisp has great documentation protocols built into the bloody language. Again, I feel this is because seasoned lispers are so capable in reading the actual source code (with assistance of M-. and M-, from Slime) that they just skimp on the documentation. Some things that I have in mind that would take alot of effort but WAAY less than making another editor competitive with Emacs+SLIME/SLY: * Rewrite the spec in org-mode and use babel for interactive learning * Integrate the above with the so called de facto standard libraries * Make excellent documentation for SBCL and ECL implementations (take CCL as an example)