Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

IMHO the examples you cite, such as the underscore-example has very little to do with any meaningful definition of "Literate Programming".

While modern languages like JavaScript (or lisp ;-) allow for a very free structure, and ordering of the code in accordance with how comments might fit, or the thought process that went into the design -- that's just proper programming style: proper comments, sane structure.

And I'm not convinced it does much to make sure the narrative keeps up with the code, as the code changes.

The meta-programming that (no)web enables for C/Pascal can be very helpful, as one might have code structured around loops (an algorithm that deals with an iterator, i, and an Array, a) -- code that might see re-use in places where the functionality doesn't lend itself (in a C/Pascal) to re-use in a function/procedure/module. But as in-lining has become more and more main stream, and micro-optimizations have become less and less needed -- this kind of meta-programming -- introduction of named code blocks to languages that otherwise don't have them -- has become less interesting.

I think a better example of "evolved" or "modern" LP is python doctests[1]. It's just a small example, but it is a way to tie commentary tightly with function, and allows for "Here's what this code does"-comment -- that can actually be used for testing.

But even doctests are a pale shadow of what LP offers. On the other hand -- some of the benefits in terms of structure/folding is also provided by powerful editors/IDEs.

I still think LP can have it's place, especially when writing code meant to be read as a teaching tool, like:

http://en.literateprograms.org/Binary_search_(Java)

LP often lends itself well to a top-down structure, regardless of any limitations in the underlying programming language (or common concessions to efficiency, manual in-lining etc). To a certain extent, one could/can/sometimes-should write C programs like:

  include1
  include2

  action_function
    setup_helper
    sub_step1
    sub_step2

  setup_helper
  sub_step1
  sub_step2

  main
   handle_args
   action_function

  handle_args
But frequently it doesn't make sense to keep the actual sources quite like that -- if nothing else because there might be platform ifdefs, various libraries in use etc.

[1] https://docs.python.org/2/library/doctest.html



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: