Re: vectcl and tcl9

Liste des GroupesRevenir à cl tcl 
Sujet : Re: vectcl and tcl9
De : wortkarg3 (at) *nospam* yahoo.com (Harald Oehlmann)
Groupes : comp.lang.tcl
Date : 23. Jan 2025, 15:04:49
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vmtia1$1h979$1@dont-email.me>
References : 1 2 3 4 5 6 7 8 9
User-Agent : Mozilla Thunderbird
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
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

Date Sujet#  Auteur
20 Jan 25 * vectcl and tcl914Jacob
21 Jan 25 `* Re: vectcl and tcl913Harald Oehlmann
21 Jan 25  `* Re: vectcl and tcl912Jacob
22 Jan 25   `* Re: vectcl and tcl911Ralf Fassel
22 Jan 25    `* Re: vectcl and tcl910Harald Oehlmann
22 Jan 25     `* Re: vectcl and tcl99Paul Obermeier
22 Jan 25      `* Re: vectcl and tcl98Ralf Fassel
22 Jan 25       `* Re: vectcl and tcl97Ralf Fassel
22 Jan 25        `* Re: vectcl and tcl96Harald Oehlmann
23 Jan 25         `* Re: vectcl and tcl95Harald Oehlmann
23 Jan 25          `* Re: vectcl and tcl94Brian Griffin
23 Jan 25           `* Re: vectcl and tcl93Harald Oehlmann
24 Jan 25            `* Re: vectcl and tcl92Jacob
24 Jan 25             `- Re: vectcl and tcl91TorstenBerg

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal