Why is tcl broken?

Marco Antoniotti marcoxa at copernico.parades.rm.cnr.it
Tue Jun 29 17:39:41 CEST 1999


> Delivery-Date: Tue, 29 Jun 1999 17:28:08 +0200
> Date: Tue, 29 Jun 1999 10:30:14 -0500 (CDT)
> From: Cameron Laird <claird at Starbase.NeoSoft.COM>
> Newsgroups: comp.lang.python,comp.lang.lisp,comp.lang.scheme
> Organization: NeoSoft, Inc. +1 713 968 5800
> content-length: 645
> 
> In article <lw67471fyi.fsf at copernico.parades.rm.cnr.it>,
> Marco Antoniotti  <marcoxa at copernico.parades.rm.cnr.it> wrote:
> 			.
> 			.
> 			.
> >spin. :) Finally, AFAIU, a Tcl "macro" must run as an interpreter of
> >the spec. A Common Lisp (Scheme) macro is compiled into regular code
> >by read-time expansion.
> 			.
> 			.
> 			.
> Are you making a semantic point, or arguing
> on the basis of implementation-specific per-
> formance?

It is (mostly) a semantic point.

> If the latter, please be aware
> that the Tcl community is actively investi-
> gating dramatic speedups of [eval].

I have no problems with that.  But the following example is pretty
hard to beat. :)

==============================================================================
* (defmacro zut (a) `(list ,a))
ZUT

* (defun zot (x) (zut x))
ZOT

* (compile 'zot)
ZOT

* (disassemble 'zot)
071B5790:       .ENTRY ZOT(x)                ; (FUNCTION (T) LIST)
     7A8:       ADD   -18, %CODE
     7AC:       ADD   %CFP, 32, %CSP

     7B0:       CMP   %NARGS, 4              ; %NARGS = #:G0
     7B4:       BNE   L0
     7B8:       NOP
     7BC:       MOVE  %A0, %A4               ; %A0 = #:G1
     7C0:       MOVE  %A4, %A0               ; No-arg-parsing entry point
     7C4:       ADD   4, %ALLOC
     7C8:       ANDN  %ALLOC, 7, %A3
     7CC:       OR    3, %A3
     7D0:       MOVE  %A3, %A1
     7D4:       ST    %A0, [%A1-3]
     7D8:       ST    %NULL, [%A1+1]
     7DC:       TADDCCTV 4, %ALLOC
     7E0:       MOVE  %A3, %A0
     7E4:       MOVE  %CFP, %CSP
     7E8:       MOVE  %OCFP, %CFP
     7EC:       J     %LRA+5

     7F0:       MOVE  %LRA, %CODE
     7F4:       UNIMP 0
     7F8: L0:   UNIMP 10                     ; Error trap
     7FC:       BYTE  #x04
     7FD:       BYTE  #x19                   ; INVALID-ARGUMENT-COUNT-ERROR
     7FE:       BYTE  #xFE, #xED, #x01       ; NARGS
     801:       .ALIGN 4
* 
==============================================================================

Of course I could have defined a much more intricated macro.

Cheers

-- 
Marco Antoniotti ===========================================
PARADES, Via San Pantaleo 66, I-00186 Rome, ITALY
tel. +39 - 06 68 10 03 17, fax. +39 - 06 68 80 79 26
http://www.parades.rm.cnr.it/~marcoxa




More information about the Python-list mailing list