Newsgroups: comp.lang.apl
Path: utzoo!utgpu!news-server.csri.toronto.edu!torsqnt!tmsoft!itcyyz!yrloc!hui
From: hui@yrloc.ipsa.reuter.COM (Roger Hui)
Subject: Re: what is j?
Message-ID: <1991May18.143707.3182@yrloc.ipsa.reuter.COM>
Reply-To: hui@yrloc.ipsa.reuter.COM (Roger Hui)
Organization: Iverson Software Inc.
References: <199113.993.337@canrem.uucp> <3970007@hpwrce.HP.COM> <1991May18.004902.29060@yrloc.ipsa.reuter.COM> <1991May18.042957.704@yrloc.ipsa.reuter.COM>
Date: Sat, 18 May 91 14:37:07 GMT

Reply to article by Robert Bernecky, 1991 May 18:

>Umm, err. "The following verbs are compiled". Please Explain. 
>My understanding ofcompilation is that you take advantage of knowledge about
>data types, rank, shape, etc,  to produce highly efficient code.
>Please tell me HOW J achieves this in tacit definition. It seems to me
>that tacit definition appears to be more like C macro expansion than
>compilation: e.g., destruction of any evidence of what you originally
>wrote, rather than true compilation(Destruction plus substantial
>performance improvement).

The verbs I cited are "compiled", in the sense that they are re-executed
without having to reparse the source.  The original question was "Is J
compiled or interpreted?", and I believe my description of J as an
interpreter with certain things compiled is fair and accurate.

Re your parenthetical definition of "true compilation" -- destruction
plus substantial performance improvement:  Some compilers bill themselves
as "optimizing compilers".  Does this mean that non-optimizing
compilers are not performing "true compilation"?  Whether something is 
a compiler is a matter of what methods are used to execute sentences.
While compiled code generally perform better than interpreted code,
the performance improvement is not a defining characteristic of a compiler.

As it happens, the technique that J uses for tacit defns does result in
measurable performance improvement, relative to the equivalent explicit defn.

>Furthermore, it appears to my naive view that Tacit Defn also 
>makes it impossiblw to debug a system unless you have maintained 
>source files for everything. For example, if you have  a defn for 
>a function "foo" which calls  "mean",and you define it using tacit defn,
>and LATER discover a bug in "mean", you end up fixing "mean", BUT
>"foo" is NOT fixed unless you recompile the universe.
>
>This strikes me as :
>a. making Real Programs, rather than Toy Programs, harder to develop and debug.
>b. Increasing the liklihood of bugs in Real Programs.

Well, one does maintain source files for C or Fortran or Pascal programs;
and if there is no "make" facility, then one would possibly recompile
everything.  (Does "true compilation" require a "make" facility?)  As well, 
the evoke (~) adverb in J allows avoiding this complete recompilation.

I am sure that YOUR compiler would address these issues.  Perhaps we can 
carry out further discussions offline.

-----------------------------------------------------------------
Roger Hui
Iverson Software Inc., 33 Major Street, Toronto, Ontario  M5S 2K9
(416) 925 6096

