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