[Xotcl] poll for opinions

Gustaf Neumann neumann@wu-wien.ac.at
Wed, 20 Feb 2002 16:28:53 +0100


 Dear XOTcl community,
 
 we are working currently on various issues which we
 think are important for our 1.0 release:
   
   - speedup through byte-code support
   - better components with introspection facilities
   - easy to use rel-db interface
   ...
 
 concerning the first item: i was performing some 
 experiments for providing extension-specific 
 byte-code support, e.g. to allow to register
 byte-code instructions for the most-used commands
 in XOTcl (such as [self], next, etc.). through
 these xotcl-specific bytre-codes we get
 nice improvements (e.g. [self] 
 is more than 10 times faster, some benchmarks 
 improve by 40%). This improvements require 
 a patch for tcl, which is therefore not acceptable
 for most people now. We talked to the Tcl 
 implementors to include such a patch, but currently
 some of them think about a substantial redesign 
 of the bytecode which has much more constraints once
 extension writers depend on the current design, so 
 i don't expect that a patch with this functionality
 will be intergrated in tcl in the new future.

 however, there is already some influence for XOTcl:
 In Tcl, compilation is command based: this means, 
 for every call of a command literally available in
 the the body of a proc, a bytecode sequence can 
 be provided by the command. This means that it 
 is possible to compile the body of method m1 in  
   Object o
   o proc m1 {} {
     o set x 123
   }
   o proc m2 {} {
     [self] set x 234
   }
 to something clever, but not the body of m2,
 since the command in the body of m2 depends on 
 the results of [self] which the compiler does not know. 
 Since m2 is the much
 better style, we should address this principal
 problem, since this will ease future improvements for xotcl. 
 An easy soultion is to provide a tcl-command
 selfInvoke, which can be byte-compiled. selfInvoke has
 the following sematics
   
  proc selfInvoke args { eval [self] $args } 

 and if implemented in C, it leads already to 
 some speedup (without bytecode support), since the call 
 of the tcl command "self" is replaced internally by a 
 call to a c-function.

 Another advantage is that the number of [self] in an
 xotcl script is reduced, an programs might become easier
 to type ()since less shilft/alt/.. keys have to be pressed)
 and hopefully less "cluttered" to read.

 yet another advantage is that this change makes in a program
 more visible when a delegation is used (call to a 
 different object) instead of the call of the current
 object.

 since "selfInvoke" is not something i would like to 
 type often either, and this is rather a language
 primitive, we are considering some syntactical 
 alternatives, and want some input from the 
 "community". Certainly, the explicit call of [self] or 
 to another object will be supported in the future as well.

 what do you think about the following variants:

   o proc m1 {} {
     [self] set x 123
   }
   o proc m2 {} {
     .. set x 123
   }
   o proc m3 {} {
     = set x 123
   }
   o proc m4 {} {
     => set x 123
   }
   o proc m5 {} {
     - set x 123
   }

 other ideas?

 note, that the used symbol cannot be used as an 
 (global) object name (same as with next, self, set, 
 and other global tcl commands)

 what do you think? 

 best regards
 -gustaf neumann