Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: aotto1968 Newsgroups: comp.lang.tcl Subject: Funny TCL and C api missing access to namespace variable. Date: Fri, 3 Jan 2025 11:55:38 +0100 Organization: A noiseless patient Spider Lines: 36 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 03 Jan 2025 11:55:40 +0100 (CET) Injection-Info: dont-email.me; posting-host="bfcf6e41a8af79f2f3416b784180c3ca"; logging-data="4071690"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+O4/LFkgatq1gz/cgCFK8zX2ec0DmMrjM=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:riCyeWdfcMV/jW21UwBqNi3Stfg= Content-Language: en-US Bytes: 2155 Tcl has a C api … good 1) for *namespace* -> man Tcl_CreateNamespace ... 2) for *set at variable* -> man Tcl_ObjSetVar2 ... but tcl has *no* C-Api to access a namespace variable :-) to access a namespace variable in "C" you have to construct the variable-name-string fist .. like: > Tcl_Obj* myO = Tcl_ObjPrintf("%s::%s", ns_cstr, var_cstr) > (by the way the "Tcl_ObjPrintf" missing format specifier for "Tcl_Obj*") and than use the *string* to access the variable; > Tcl_ObjSetVar2(interp,myO,?array-key or NULL?,newVal,flags) The funny thing is that the "TclObjLookupVar" always disassemble the "myO" string to figure out the namespace/array-key etc… To make it short, Tcl need a *better* Tcl_Set/GetVar??? api perhaps "3" with namespace,variable,arrayItem separated to speedup access. > Tcl_ObjSetVar3(interp,myNs,myVar,myKey,newObj,flags) and SKIP the parsing of "myVar" for either myNs or myKey. The problem is NOT the 1-time access of a variable because the variable is AFTER access cached, the problem is the *multiple* access with either *namespace* or *varname* is very dynamic. → just a "hint"