Chunk order must be small to large

Richard Gaskin ambassador at fourthworld.com
Thu Mar 12 23:39:40 EDT 2009


Jim Bufalini wrote:
...
> And this is logical as, a. You can set itemDelimiter and lineDelimiter but
> not the word delimiter (smallest chunk, which word boundary has undergone a
> change recently in Rev 3.0), b. When parsing text, words are generally
> smaller chunks than phrases, which are usually delimited with commas, c. As
> has been pointed out, you can override this parsing order using parenthesis,
> and lastly d. All that's needed here is *item 1 of "aaa,bbb"* ;-)

And there's also e. you get a lot of raw speed by letting the parser 
safely make logical assumptions about chunk order.

I asked Dr. Raney about this once, and he said that the other 
interpreters waste a lot of clock cycles letting you shoot yourself in 
the foot.  He trimmed a number of syntax elements down, often removing 
support for non-intuitive or rare uses (like the mystery world in which 
a word is longer than a line) so that he could deliver blazing 
performance in return.

In addition to enforcing a logical order to chunk sizes, other examples 
of this sort of optimization include:


- You cannot use reserved tokens as variable names.

   Writing "put word 1 into word" makes code hard to read.  So hard,
   in his opinion that it wasn't worth the parsing cost.


- You cannot override built-in functions and commands.

   It may be tempting to want to implement some custom behavior for,
   say, the truncate function.  Raney felt that all that did is risk
   confusing anyone who calls that function while your handler is in
   the message path, so in his view it didn't merely expode the size
   of the token table, it polluted it.


I went to the mat with him over this one years ago when I was porting an 
HC project.  He said, "If you need a custom behavior, use a custom 
name."  I said, "But I *need* to override the built-in function!" and he 
asked simply, "'Need'? Why?"  I couldn't think of a truly necessary case.

He said if I could ever find a true need for this he'd reconsider.  I 
told most everyone I knew; we put a lot of time into trying to think of 
a case.  No luck.  In the end we came to appreciate his edict: "If you 
need a custom behavior use a custom name."  Keeps code readable, lets 
folks know what to expect when they call something.


For those coming into Rev fresh from HC these things go against 
long-standing habits, and will appear strange or even "wrong" at first.

And then you start really working with it, learning these differences 
and moving on, and the more you code with this new engine the more you 
find yourself saying, "Man, this thing is fast!".

It's no accident.

It's a very carefully pruned token table.

--
  Richard Gaskin
  Fourth World
  Revolution training and consulting: http://www.fourthworld.com
  Webzine for Rev developers: http://www.revjournal.com




More information about the use-livecode mailing list