I agree with your logic, but there is a problem, which I am encountering while working on something else.

[And also FYI, a considerable amount of processing is done when a definition is loaded, in jtpreparse(), which maps out all the control words]

I am working on an overhaul of symbol-table operations to (1) make references to local symbols much faster; (2) avoid the overhead of allocate/fill/free that currently occurs every time an explicit definition is executed.

My approach is to create a symbol table and let it hang around after execution, to be used next time the definition runs.

I wanted to create this table on first execution, just as you suggest, but my problem is, How do I point to it? It's not easy to create a new data structure in the JE, and the explicit definition seems to use all the fields except gs which I think needs to be kept at 0.

The hs field points to a 6-box array containing the results of preparse(). I can add my new symbol table there, but then I need to make sure its usecounts are the same as the rest of hs, because otherwise as the verb gets assigned or deleted I might lose the symbol table.

So, I have to create the symbol table at load time, the same time preparse() runs. There's just no way I can see to wait till the first execution. I don't think the overhead is material for the local symbol table. It might be a different story for preparsed parenthesized nouns.

Henry

On 6/21/2016 8:12 PM, bill lam wrote:
IMO only small portion of code (say 20%) of a non-trival program
will be actively used.  The extra time needed for loading
scripts that will seldom used is wasteful.  Perhaps you may
defer to pre-parse stage to the first execution of explicait
definition.  Timing benchmark is helpful here.

I worry the extra space allocated that will not freed, a promise
would be affect expressions that involving no nouns (other than
primitive nouns a. a:)

Since this is an implementation detail, not a language feature,
I think it should be turn on/off by a global parameter.

Пн, 20 июн 2016, Henry Rich написал(а):
It occurs to me that in explicit definitions, parenthesized expressions that
contain only primitives could be parsed at definition time and replaced with
a single word in the queue. This would save parsing time during execution.
The only downside I can see is that something like (<1000 1000 $ a:) would
tie up a lot of memory - maybe I would have to check for that.

Any other objections?

Henry
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to