Sujet : what happen to tcl C api ? De : aotto1968 (at) *nospam* t-online.de (aotto1968) Groupes :comp.lang.tcl Date : 19. Jan 2025, 10:47:36 Autres entêtes Organisation : A noiseless patient Spider Message-ID :<vmihnq$24c6l$1@dont-email.me> User-Agent : Mozilla Thunderbird
what happened to the tcl "C" api? i remember that about 20 years ago, when i wrote the tcl-c compiler, the language "tcl" was the language with one of the best "c" api support. back then, not only the "public" documented c api could be used but also the semi-public api where every tcl command was accessible with "tcl_?Cmd?ObjCmd" (e.g. Tcl_IncrObjCmd for "incr"). today almost the entire tcl api is "private" and therefore unusable for the extension writer. This means that a simple command like "incr" which already has a "C" API in Tcl can only be called via Tcl-EvalXX OR has to be laboriously reconstructed from the Tcl source code using "copy-past". The reason for the (make everything private mode) seems to be the "stubs" subsystem where every API function has to be exported using Tcl's internal "table") Here are some numbers 1) is a version of "incr" that works using the "limited public tcl-c-api "Tcl_ObjGetVar/SetVar" etc 2) is a version that works using "Tcl_Eval" => even WITHOUT the direct use of "Tcl_IncrObjCmd" the "handwritten" solution is better than the Tcl_Eval solution. I rate the NON-exported Tcl_IncrObjCmd solution as MUCH better than my "hand-written" solution. => and now the summary: Question: Why did the TCL community "throw away" TCL's massive technological lead just to become one of the slowest languages ever? # modification via PUBLIC tcl-api set start1 0 > 0 ::myooX::_IncrIndex1 start1 > 1 ::myooX::_IncrIndex1 start1 2 > 3 ::myooX::_IncrIndex1 start1 -1 > 2 set start1 > 2 # modification via tcl-eval-api set start2 0 > 0 ::myooX::_IncrIndex2 start2 > 1 ::myooX::_IncrIndex2 start2 2 > 3 ::myooX::_IncrIndex2 start2 -1 > 2 set start2 > 2 time { ::myooX::_IncrIndex1 start1 } 1000 > 0.84 microseconds per iteration time { ::myooX::_IncrIndex2 start2 } 1000 > 0.983 microseconds per iteration