jaxon@uicsrd.csrd.uiuc.edu (11/30/89)
Generally I'd agree that hooking into an external function is an adequate way to extend APL systems. It is certainly the best approach when you're still exploring the design space. But there are at least four good reasons to consider language extension in the direction Andrew suggests. 1) APL's traditional claim to the Linear Algebra turf would be substantially strengthened. There are strong competitors, and the applications domain seems to be expanding. 2) Once adopted into the language these features are more readily standardized. 3) Once the interpreter or compiler knows the intended semantics of a function the implementation may be able to optimize some of the call sites. In particular it may recognize that the function can be used in parallel. 4) By nature the extensions must cooperate with some other language primitives. As I understand the problem, the dominoe functions could benefit greatly from information about the structure and other properties of the linear system they are solving. This information is too costly to recompute, so traditional codes typically generate a system with some special properties, maintain those properties through whatever transformations they make, then use a linear solver tuned to this special case (or requiring that case for correctness!) In APLB, we carried a hash value around for arrays that had been used with any of the comparison algorithms (membership, match, equal, iota, ...). It had to be invalidated by any in-place modification of the array, but was otherwise carried from some source to an unknown destination without change. I suspect the decomposition schemes could follow this example, but I'm not (yet) competent enough to suggest the design.