Deutsch   English   Français   Italiano  
<vmtn1o$1m5v8$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Brian Griffin <bgriffinfortytwo@gmail.com>
Newsgroups: comp.lang.tcl
Subject: Re: vectcl and tcl9
Date: Thu, 23 Jan 2025 07:25:44 -0800
Organization: A noiseless patient Spider
Lines: 128
Message-ID: <vmtn1o$1m5v8$1@dont-email.me>
References: <vmls4q$38g47$1@dont-email.me> <vmnhsp$3srvj$1@dont-email.me>
 <2af45bfa-e1ae-4a45-90c3-83af0678f820@clevelandgolf.com>
 <ygajzan4148.fsf@akutech.de> <vmqg9i$uqf1$1@dont-email.me>
 <vmqh3r$usa2$1@dont-email.me> <ygafrla5329.fsf@akutech.de>
 <ygaa5bi50en.fsf@akutech.de> <vmr8lo$13nsn$2@dont-email.me>
 <vmtia1$1h979$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Thu, 23 Jan 2025 16:25:45 +0100 (CET)
Injection-Info: dont-email.me; posting-host="d5408bf2ca92640a1cd3dd0c20d776ca";
	logging-data="1775592"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18NSPh9GZbOvWI3oKL+nGbBqW2HMwtbvYZNg+lAUsyyAw=="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:6b9gZpbX45bfhPqJk0hP6UfPJxk=
Content-Language: en-US
In-Reply-To: <vmtia1$1h979$1@dont-email.me>
Bytes: 5854

On 1/23/25 06:04, Harald Oehlmann wrote:
> Here is what Brian wrote by private E-Mail:
> 
> My fork of VecTCL using Abstract Lists is in github:
> 
> https://github.com/bgriffinfortytwo/VecTcl9
> 
> It has not been updated with the current state of Tcl 9. Nor has it been 
> updated with any potential changes in VecTCL since this original proof 
> of concept was created. It's on my todo list. :)
> 
> -Brian

I'll work on getting my VecTCL fork up-to-date with current Tcl 9.0, 
then figure out what's next after that.

I'm curious what the harm is in keeping the "int" obj type in Tcl?

-Brian

> 
> 
> Am 22.01.2025 um 18:08 schrieb Harald Oehlmann:
>> Am 22.01.2025 um 16:33 schrieb Ralf Fassel:
>>> * Ralf Fassel <ralfixx@gmx.de>
>>> | I recompiled vectcl 0.2.1 as provided by Paul against tcl 9.0 and 
>>> tcl 8.6.15.
>>> | 'make test' in vectcl fails in many cases with tcl9, where the same
>>> | tests succeed in 8.6.15.
>>>>
>>> |   package require vectcl
>>> |   => 0.2.1
>>> |
>>> |   numarray concat {{1.0 2.0} {3.0 4.0}} 5.0 0
>>> |   tcl 8 => {1.0 2.0} {3.0 4.0} {5.0 5.0}
>>> |   tcl 9 => error: expected integer but got "1.0 2.0"
>>>
>>> Ok, being curious...
>>>
>>> The deeper reason for those failures is that vectcl uses type info for
>>> TclObjs, and tcl9 no longer registers type 'int' (cf.
>>>
>>>      tclObj.c,
>>>          const Tcl_ObjType tclIntType = {
>>>                   "int",            /* name */
>>>                   ...
>>>          };
>>>        void TclInitObjSubsystem(void)
>>>
>>>        8.6.15
>>>             Tcl_RegisterObjType(&tclIntType);
>>>        9.0.0
>>>           ---
>>>
>>>
>>> Now vectcl does in two places:
>>>
>>>     const Tcl_ObjType * tclIntType = Tcl_GetObjType("int");
>>>
>>> and compares that in many places to the obj type
>>>
>>>     if (objPtr->typePtr == tclIntType)
>>>
>>> Since 'int' is not registered in 9.0, Tcl_GetObjType will return NULL
>>> there, thus the vectcl code treats a not-set obj-type as int, which
>>> explains the errors.
>>>
>>> Quick and dirty setting the vectcl lookup variables for
>>> Tcl_GetObjType("int") to 0xdeadbeef if they are NULL makes all tests
>>> succeed.
>>>
>>>
>>> --- vectcl-0.2.1/generic/vectcl.c~    2025-01-22 12:50:45.750839906 
>>> +0100
>>> +++ vectcl-0.2.1/generic/vectcl.c    2025-01-22 16:15:43.747690082 +0100
>>> @@ -2577,6 +2590,7 @@
>>>       tclListType =  (Tcl_ObjType *) Tcl_GetObjType("list");
>>>       tclDoubleType = Tcl_GetObjType("double");
>>>       tclIntType = Tcl_GetObjType("int");
>>> +    if (0 ==tclIntType) tclIntType = 0xdeadbeef;
>>>   #ifndef TCL_WIDE_INT_IS_LONG
>>>       tclWideIntType = Tcl_GetObjType("wideInt");
>>>   #endif
>>>
>>>
>>> --- vectcl-0.2.1/generic/nacomplex.c~    2015-07-08 
>>> 22:38:34.000000000 +0200
>>> +++ vectcl-0.2.1/generic/nacomplex.c    2025-01-22 16:18:04.682876166 
>>> +0100
>>> @@ -67,7 +67,7 @@
>>>       /* Maybe this should go into a static const array */
>>>       const Tcl_ObjType * tclDoubleType = Tcl_GetObjType("double");
>>> -    const Tcl_ObjType * tclIntType = Tcl_GetObjType("int");
>>> +    const Tcl_ObjType * tclIntType = Tcl_GetObjType("int") || 
>>> 0xdeadbeef;
>>>
>>>       if (objPtr -> typePtr == tclIntType) {
>>>           int value;
>>>
>>> % make test
>>> Tests ended at Wed Jan 22 16:18:11 CET 2025
>>> all.tcl:    Total    210    Passed    210    Skipped    0    Failed    0
>>>
>>> Of course this defeats the performance gains intended by the type
>>> lookup, but since I don't know why "int" is no longer registered as type
>>> in the tcl core, and what is to be used as substitution, I can not offer
>>> any better fix for vectcl.
>>>
>>> R'
>>
>> Ralf,
>> great that you found out, my appreciation !
>>
>> The same question was raised by TkInter and PerlTk and solved with a 
>> new function. I loosely remember, that Tcl_GetNumber should now be 
>> used for this purpose:
>> https://core.tcl-lang.org/tips/doc/trunk/tip/638.md
>>
>> This routine returns the integer type. I suppose, a test fir int is a 
>> result of "TCL_NUMBER_INT".
>>
>> Nevertheless, we still need Brian, as this "conversion" part was 
>> replaced by the new abstract layer.
>>
>> Thank you all,
>> Harald
>