Most modern (and some not-so-modern) languages have a standard way of
attaching documentation to functions and other symbols. For example, in
Java documentation looks like this:

*    /***
*     * Example method that adds 1 to its argument. The documentation*
*     * is a normal comment that comes before the object that*
*     * is documented, but starts with /** instead of the usual /*.*
*     * The first sentence is the "short description" and should be*
*     * a one-line general description.*
*     */*
    int add1(int x)
    {
        return x + 1;
    }

Here is a similar documented function in Lisp:

    (defun add1 (x)
*      "Add the value 1 to the argument.*
*    In Lisp, if the function's first element is a string, then*
*    that string becomes the function's documentation. In Emacs-Lisp*
*    the first row of the documentation is the 'short description',*
*    compared to Java where it's the first sentence."*
      (1+ x))

Lisp also supports access and modification of docstrings at runtime, which
is actually pretty cool. A lot of tools take advantage of this to provide
dynamic documentation for the running environment.

I think it would be very neat to have the same thing in GNU APL. One way of
supporting this in a fully backward-compatible way is to use the Java
model; put the documentation in a comment (with some special tag) before
the function. For example:

*    ⍝+ Add the value 1 to the right-hand argument.*
*    ⍝ In this simple example, the tag ⍝+ indicates that*
*    ⍝ the comment is a docstring.*
    ∇Z←add1 X
    Z←X+1
    ∇

Obviously using comments is not the only way to achieve this. Another way
would be to use the Lisp model of having the first command in a function be
a no-op string. This code would not do anything if documentation is not
supported. For example something like this:

    ∇Z←add1 X
*    ⊣"Add one to the right-hand argument."*
    Z←X+1
    ∇

One could then use some ⎕CR functions to get (and set?) the documentation
strings for a given symbol. The Emacs mode can integrate the existing
documentation features to dynamically display documentation for symbols at
appropriate times.

What do you think about this?

Regards,
Elias

Reply via email to