skip to main content
10.1145/1639950.1640072acmconferencesArticle/Chapter ViewAbstractPublication PagessplashConference Proceedingsconference-collections
short-paper

Reimagining literate programming

Published:25 October 2009Publication History

ABSTRACT

In this paper we describe Ginger, a new language with first class support for literate programming. Literate programming is a philosophy that argues computer programs should be written as literature with human readability and understanding of paramount importance. While the intent of literate programming is to make understanding computer programs simpler, most literate programming systems are quite complex and consist of three different languages corresponding to 1) an implementation language, 2) a documentation language, and 3) a literate programming glue language. In Knuth's original implementation these were Pascal, TeX, and WEB respectively. Antithetical to the goals that literate programming espouses, this three language paradigm creates a truly challenging environment for new programmers. In this paper we reimagine literate programming as a core programming language feature and describe a novel system for literate programming based on G-expression transformations. We show that Ginger code can be used to naturally represent code, prose, and literate connections, which in turn unifies, simplifies and significantly extends the literate programming experience.

References

  1. K. Beck. A theory of programming. Dr. Dobb's Journal, Nov. 2007.Google ScholarGoogle Scholar
  2. A. Binstock. Interview with Donald Knuth. InformIT, Apr. 2008.Google ScholarGoogle Scholar
  3. M.-J. Dominus. POD is not literate programming. http://www.perl.com/pub/a/tchrist/litprog.html, Mar. 2000.Google ScholarGoogle Scholar
  4. R. Fjeldstad and W. Hamlen. Application program maintenance study: Report to our respondents. Tutorial on Software Maintenance, 1982.Google ScholarGoogle Scholar
  5. P. Grubb and A. A. Takang. Software Maintenance: Concepts and Practice. World Scientific Publishing Company, Sept. 2003.Google ScholarGoogle ScholarCross RefCross Ref
  6. P. Hudak, J. Hughes, S. P. Jones, and P. Wadler. A history of Haskell: being lazy with class. In Proceedings of the third ACM SIGPLAN conference on the history of programming languages. ACM, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. A. L. Johnson and B. C. Johnson. Literate programming using noweb. The Linux Journal, Oct. 1997. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. D. E. Knuth. Literate programming. The Computer Journal, 27(2):97--111, 1984. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. D. E. Knuth. Literate programming. Center for the Study of Language and Information, Stanford, CA, USA, 1992. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. M. W. Mengel and P. Briggs. Nuweb home page. http://nuweb.sourceforge.net/.Google ScholarGoogle Scholar
  11. G. Milde. PyLit home page. http://pylit.berlios.de/.Google ScholarGoogle Scholar
  12. J. D. Palmer. Ginger: Implementing a new lisp family syntax. In Proceedings of the 47th Annual Southeast Regional Conference. ACM, Mar. 2009. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. D. L. Parnas and P. C. Clements. A rational design process: How and why to fake it. IEEE Transactions on Software Engineering, 12(2):251--257, 1986. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. V. Pieterse, D. G. Kourie, and A. Boake. Literate programming to enhance agile methods. In J. Eckstein and H. Baumeister, editors, XP, volume 3092 of Lecture Notes in Computer Science, pages 250--253. Springer, 2004.Google ScholarGoogle Scholar
  15. N. Ramsey. Literate programming simplified. IEEE Software, 11(5):97--105, 1994. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. J. Raskin. Comments are more important than code. ACM Queue, 3(2):64--ff, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. E. Ream. Leo home page. http://webpages.charter.net/edreamleo/front.html.Google ScholarGoogle Scholar
  18. J. Sametinger. Object-oriented documentation. ACM SIGDOC Asterisk Journal of Computer Documentation, 18(1):3--14, 1994. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. J. Sametinger and A. Stritzinger. A documentation scheme for object-oriented software systems. ACM SIGPLAN OOPS Messenger, 4(3):6--17, 1993. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. D. D. Smith. Designing Maintainable Software. Springer, May 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. T. A. Standish. An essay on software reuse. IEEE Transactions on Software Engineering, 10(5):494--497, September 1984. Special Issue on Software Reusability.Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. R. Williams. FunnelWeb home page. http://www.ross.net/funnelweb/.Google ScholarGoogle Scholar

Index Terms

  1. Reimagining literate programming

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader
      About Cookies On This Site

      We use cookies to ensure that we give you the best experience on our website.

      Learn more

      Got it!