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"