|
|
|
|
|
by jostylr
4017 days ago
|
|
One functional feature that is missing is that of having blocks in different order. Jeremy Ashkenas argues that because of functions, we do not need that reordering. I disagree with that. I do think a large part of what makes literate programming powerful is that one can easily sculpt the order of the presentation. It elevates the code and comment to telling a story for humans. I think the code is not incidental, but is part of the aspect of the story, much like in a fictional story one has descriptive passages and dialog passages. If one updates the story, both may change or perhaps just one of them. My take on literate programming, using markdown:
* minimal client at https://www.npmjs.com/package/litpro
* core library and docs at https://github.com/jostylr/literate-programming-lib |
|
If they were, we wouldn't need variables, loops, blocks etc. Now you could argue that we don't, we should just write code in lambda calculus -- but we don't do that.
Especially for languages like assembler and C-like languages, it can be very nice to single out smaller sections of code. And while for eg: C, or I suppose a macro assembler, one might be able to in-line a lot of such blocks -- having to stay at the "block-semantic"-level of the host language can make some things pretty hard to communicate to the human reader in a good way.
Ruby might actually be a good candidate for "simple" literate programming, in the sense that one probably could, and perhaps sometimes should, program ruby much like smalltalk -- no method/function longer than five lines or so, except for the most exceptional circumstances.
Even then, I think one would find patterns that would make sense to abstract out of the "function level", or "language level".
At the other end of the spectrum is too much magic, just as with any meta-programming technique, such as proper macros.
I had a most peculiar experience trying to write some (mostly procedural) java with noweb. It was typical intro programming stuff, basically some very simple data structures/algorithms.
It was a very nice fit for literate programming, but not such a good fit for java -- while the literate program read nicely, and was well structured, the mangled java code was unwieldy -- it turned out I'd ended up generating a java program that did what I wanted.
Now, that's not really a problem, we generate assembly programs that are unwieldy all the time -- but the point is it took some discipline and thought to write a literate program that was also readable in it's tangled form.
Only an issue if people are expected to read/modify it in that state, obviously. And they are, as they'll have to debug it at some point ;-)
> I think the code is not incidental
That was a bit tongue-in-cheek -- I meant more in the sense that comments are incidental to code in most programming languages.
> https://github.com/jostylr/literate-programming-lib
Very nice, thank you for sharing.