[Xotcl] Announcement: Next Scripting Framework 2.3.0 available

Gustaf Neumann neumann at wu.ac.at
Thu May 9 16:02:11 CEST 2019


Dear Community,

We are pleased to announce the availability of the Next Scripting
Framework (NSF) 2.3.0. The changes are mostly perfective improvements
in terms of bug fixes, API consistency, and backwards
compatibility. See below for the details. A detailed changelog is 
available at [1].

The Next Scripting Framework 2.3.0 (containing NX 2.3.0 and XOTcl
2.3.0) can be obtained from [2,3]. Please report
issues and wishes by opening a ticket at [4].

    [1] 
https://next-scripting.org/xowiki/download/file/ChangeLog-2.2.0-2.3.0.log
    [2] https://next-scripting.org/
    [3] https://sourceforge.net/projects/next-scripting/
    [4] https://sourceforge.net/p/next-scripting/tickets/

Many thanks to all who provided valuable feedback pointing to
potential and real issues!

Best regards
- Gustaf Neumann
- Stefan Sobernig



Diff stats since 2.2.0:
    189 files changed, 17743 insertions(+), 16889 deletions(-)
    (222 commits)

Major changes relative to 2.2.0 are:

New Features

- NSF:

   * Reform of "uplevel" and "upvar" methods:

     - The methods "uplevel" and "upvar" (well as the underlying
       commands [current callinglevel] and [self callinglevel]) behave
       now more consistently and more similar to the XOTcl 1
       semantics. This eases the migration of XOTcl 1 code. These
       methods are needed for "frame skipping", i.e. when methods using
       ":upvar" or ":uplevel" are overlaid with filters/mixin classes
       but should keep the uplevel semantics without these
       interceptors. Otherwise, adding a filter/mixin can easily break
       existing code.

     - The behavior of uplevel/upvar should be stable now with respect to
       Tcl's "namespace eval" and similar commands.

     - Error handling for providing potentially invalid level arguments
       was fixed.

   * Rename reform for "nsf::procs": NSF procs can now be safely renamed
     (or deleted) using the Tcl [rename] command. This was only partially
     supported before, and could also lead to crashes (when redefining
     a renamed NSF proc).

   * New object property "autonamed": NSF objects having been created
     using "new", rather than using "create", can now be tested for
     this condition using the object property "autonamed":

      % package req nx
      2.3
      % nsf::object::property [nx::Object new] autonamed
      1
      % nsf::object::property [nx::Object create o] autonamed
      0

     The property "autonamed" can be used to avoid having to rely on
     pattern matching of the command names. This is e.g. useful in the
     NaviServer/AOLserver blueprint management, where temporary objects
     should be omitted.

   * Extended object property "volatile": By setting or unsetting the
     object property "volatile", the volatility of a given NSF object
     changed dynamically. In previous releases, it was not possible
     to remove the volatility property of an object.

      % package req nx
      2.3
      % ::nx::Object create ::o -volatile
      ::o

      # query volatile property
      % nsf::object::property ::o volatile
      1

      # modify volatile property
      % nsf::object::property ::o volatile false
      0


- NX:

   * Properties and variables now provide "exists" as an additional
     accessor method, in addition to "get":

      % package req nx
      2.3
      % nx::Class create C {
	:property -accessor public {a 1}
      }
      ::C
      % ::C create ::c1
      ::c1
      % if {[::c1 a exists]} { ::c1 a get } else { ::c1 a set "1" }
		   ^^^^^^

     This is mainly to provide for symmetry in the property and variable
     API, which otherwise requires one to resort to low-level tests for
     existence, e.g.:

      if {[::c1 eval {info exists :a}]} ...

     This breaks the property/ variable abstraction, because one cannot
     move to a different value store other than object variables w/o
     rewriting client code.

   * Fixed method combination for ensemble methods: In previous
     releases, calling [next] at the end of a next chain in ensemble
     methods could fire unintentionally the unknown handler.

   * nx::zip rewrite: nx::zip now uses the built-in Tcl 8.6 encode and
     decode facilities, if available, rather than requiring the Trf
     package to be present.

- XOTcl:

   * Improved compatibility of XOTcl2 with XOTcl1 behavior
     for volatile objects (see "volatile reform" above).

   * Improved compatibility of XOTcl2 with XOTcl1 behavior for
     uplevel/upvar from within methods (see "uplevel/ upvar reform"
     above).


- nx::serializer:

   * Improved backward compatibility: Preserve overriding accessor/
     mutators methods (instprocs) for slots.


- MongoDB:

   * Added JSON serializer: The "find all" and "bson" methods now
     provide for JSON-formatted results, on request.

      ::nx::mongo::Class "find all" -asJSON
      ::nx::mongo::Object bson asJSON

     This is to facilitate implementing single-page JavaScript
     applications, among others.

   * Fixed test suite; tested the NSF MongoDB binding against latest
     stable releases of MongoDB (4.0.9) and MongoDB-C driver (1.14.0).


- Documentation:

   * Added documentation of uplevel and upvar methods.


- Maintenance & bug fixes:

   * VLA reform: Avoid the use of variable-length arrays (VLA) when
     building argument vectors of Tcl_Objs internally to NSF. Use
     fixed-sized ones (stack-allocated for a size known at compile time
     or dynamically allocated above) to prevent from potential
     overflows and to produce more time-efficient instructions.

   * Tcl 8.7:

     Support for Tcl 8.7a1 and the upcoming, unreleased Tcl 8.7a2
     (core.tcl-lang.org/tcl branch "core-8-branch"). NSF compiles and its
     regression tests execute successfully (including TCL_NO_DEPRECATE).

   * Misc (esp. NSF/C): Ran valgrind checks, plugged one source of
     potential leaks (NsfProcStubDeleteProc) and one invalid read on a
     dangling pointer (NsfCCreateMethod).

   * Test suite: Fix recursion tests on 8.5 (Windows-only,
     forward.test) for platform-specific error messages (CheckCStack),
     obsolete for 8.6 with NRE. Guarded test case on recursive
     forwards, to avoid preemptive crashes on stack-size limited
     systems.


- Build environments:

   * Microsoft C compilers: Turned off COMDAT folding (/opt:icf) under
     "nmake" builds which can lead to unusable, pointless
     function-pointer comparisons (Nsf_ConvertToSwitch vs.
     Nsf_ConvertToBoolean).

   * Improve robustness of configure/ make procedure in the absence of
     generated DTRACE artifacts so that they are truly conditional
     on the corresponding configure flags for DTRACE.

   * Improved robustness of Windows (nmake) installation routines by
     testing for the existence of the install directory.

   * Rendered inference of GIT commit in autotools setup more robust, in
     light of partial GIT checkouts (e.g., w/o tags).




More information about the Xotcl mailing list