| Deutsch English Français Italiano |
|
<vl8fnc$3s88a$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
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 <aotto1968@t-online.de>
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: <vl8fnc$3s88a$1@dont-email.me>
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"