The power of an array language can reach further when its efficient and rich operations of can be complemented with the ability to execute custom code not covered by those operations, such as tight loops over granular structures. (more examples needed)
PCall IL is away to represent an algorithm "close to the metal" in a low-level portable intermediate language, which is compiled into concrete machine code on-the-fly and invoked using PCall interface.
The ability to execute machine code in J from memory was demonstrated in PCall addon, and native support was added in j602.
The idea of using byte-code representation as opposed straight APL compilers seemed interesting, primarily because of now popular VM platforms: Java and .NET.
In the book Virtual Machines (1) there are other reasons, one of which is that IL representation allows to build fast very simple interpreters for target systems. An illustrative example was how early Windows with limited memory, power and no graphics acceleration generated machine code on-the-fly for various BitBlt operations.
This simplicity was also uncovered in The APL IL Interpreter Generator (2), whose goal was to quickly create APL interpreters a minimal cost. (It appeared in the same 25-year commemorative issue as A Personal View of APL by KEI.) They presented an IL with APL-like syntax and compiler that converted it to machine codes by APL programs. This was the final piece that fit the puzzle.
Ideally the array language interpreter itself would be represented in a way common with the custom code, share the same representation with IL, thus forming a complete and uniform system.
References
J. Smith, R. Nair, Virtual Machines: Versatile Platforms for Systems and Processes, Morgan Kaufmann, 2005 link
M. Alfonseca, D. Selby, R. Wilks, The APL IL Interpreter Generator, IBM Systems Journal (Vol. 30, No 4), 1991 link
Philip S. Abrams, An APL Machine, Stanford University, 1970-02. SLAC-R-114, scan
