Dear Community,
Since releasing the Next Scripting Framework (NSF) 2.0b5, we have received more feedback from early adopters. Many thanks for the helpful and the constructive comments!
Since the release of 2.0b5, there have been more than 450 commits to our code repository. The implementation is very stable and has been used for more than two years in production of our large-scale, multi-threaded web environment inside NaviServer. Most of the changes happened in NX and, therefore, on the NSF scripting level, without the need to modify the NSF C layer. The implementation of XOTcl 2 has changed very little. The Next Scripting Framework was tested with Tcl 8.5.17 and Tcl 8.6.2 on Linux, Mac OS X, and in Windows enviroments (MinGW, VC12).
Below are the most notable differences in NSF/NX 2.0 final relative to 2.0b5:
a) Pluralism reform:
Use plural names for structural features of objects and classes, whenever potentially multiple elements are provided or returned. This rule applies now consistently throughout NX. Here are examples from the introspection interface:
/cls/ info superclasses /cls/ info subclasses /cls/ info mixins /obj/ info object mixins /cls/ info filters /obj/ info object filters
Similarly, there the plural is used for configure options, e.g.:
nx:create create Foo -superclasses {C D}
Note that abbreviations are allowed as well:
nx:create create Foo -superclass {C D}
b) Dispatch by arity is gone in NX.
XOTcl and earlier versions of NX supported a dispatch-by-arity mechanism for relation slots:
o mixin; # arity 1: get value o mixin M1; # arity 2: set value o mixin add M1; # arity 3: use arg 2 for slot methods
The problem with this approach is that it is not straight forward to provide meaningful error messages. In addition, one might be irritated about the result of e.g. "o mixin add" (leaving out a class to be added). In the final release, we removed the entailed complexity by relying on a fixed arity of 3 (last form above) for the default slot methods:
add, clear, delete, get, guard, set
c) Support for querying computed parameters of methods.
Earlier versions of NX had several methods to query the parameters for configuring objects of different classes. The configure parameters are determined by the inheritance order in the class hierarchy and are relevant during object creation (e.g. methods "create" or "new").
Now, these configure parameter can be queried using the standard parameter introspection interface for e.g. "new", "create", or "configure", such as in:
nx::Object info lookup parameters create
The above command call returns the parameters which can be provided to an "nx::Object create ..." invocation. Furthermore, these computed parameters are returned in error messages.
d) Support abbreviations of non-positional parameter names (for plain methods, nsf::proc, or "... configure...").
To avoid surprises, especially for computed argument lists, the minimal number of optional trailing characters is set to 4.
e) Updated MongoDB interface:
The interface was extended in various ways and is now based on mongo-c-driver 1.0.2 and was tested with MongoDB 2.6.5. The driver can be used nicely with e.g. Naviserver by using the c-driver supported connection pool.
f) API changes:
nx::Object info lookup parameters create /cls/ mixins ... /obj/ object mixins ... /cls/ filters ... /obj/ object filters ...
Simplified info methods for interceptors:
/cls/ info mixin classes -> /cls/ info mixins /cls/ info filter methods -> /cls/ info filters /obj/ info object mixin classes -> /obj/ info object mixins
Dropped methods:
/cls/ info mixin guard /obj/ info object mixin guard /cls/ info filter guard /obj/ info object filter guard
Instead, use the "-guards" option of "... info ?object? mixins|filters ...".
Added methods:
/cls/ mixins classes /cls/ filters methods /obj/ object filters methods /obj/ object mixins classes
g) Added API documentation:
Using tcllib's doctools markup and dtplite, we now provide manpages for: nx::Object nx::Class nx::current nx::next nx::configure
The Next Scripting Framework 2.0.0 (containing NX and XOTcl 2.0.0) can be obtained from https://next-scripting.org/
The detailed ChangeLog can be downloaded from https://next-scripting.org/xowiki/download/file/ChangeLog-2.0b5-2.0.0
Best regards - Gustaf Neumann - Stefan Sobernig
Dear Community,
We are pleased to announce the availability of the Next Scripting Framework (NSF) 2.1.0 as a Christmas present to the community.
Over the last years, NSF is constantly being developed based on experience in largish projects. To document these changes we have decided it to bump the version numbers and make a new release.
Since the release of NSF 2.0.0, there have been more than 450 commits to our code repository. For this release NSF was tested in 192 build configurations with Tcl 8.5.19 and Tcl 8.6.6 on Linux and Mac OS X (both using recent gcc and clang). Common build configurations have been tested under Windows (Windows 2012 Server: VS15 & MSVC 19, MinGW).
Diff stats since 2.0.0: 186 files changed, 26475 insertions(+), 15671 deletions(-)
Major changes relative to 2.0.0 are:
- Improved debugging/tracing/profiling support (NSF) - Deprecated and debug modes for NSF procs and methods (NSF, NX, XOTcl2) - Script-level access to NSF parameter/argument parser (NSF). - Slot-trace reform (NX, XOTcl2) - Updated MongoDB interface to the newest mongo-c-driver (NSF, NX) - Improved scripted shells (e.g., nxsh, xotclsh)
Below is a summary of are the changes in more details. The detailed changelog is available at https://next-scripting.org/xowiki/download/file/ChangeLog-2.0.0-2.1.0.log
NSF 2.1.0 (containing NX 2.1.0 and XOTcl 2.1.0) can be obtained from https://next-scripting.org/. Please report issues and wishes by opening a ticket at https://sourceforge.net/p/next-scripting/tickets/.
Best regards - Gustaf Neumann - Stefan Sobernig
======================================================================== New Features
- NSF:
* Improved debugging/tracing/profiling support:
+ NSF procs and methods can be marked "deprecated" and/or "debug-enabled". For this, all NSF proc and method definitions in NX and XOTcl2 now accept the new flags "-debug" and "-deprecated". The low-level interface (nsf::method::property) enables introspection and selective enabling during runtime.
nsf::proc ... ?-debug? ?-deprecated? ... /name/ /argspec/ /body/ nsf::method::property /obj/ /method/ deprecated ?0|1? nsf::method::property /obj/ /method/ debug ?0|1?
A debug-enabled NSF proc or method will be reported on entering and exiting the proc and method (similar to a traced proc/ method incl. a time probe; see above):
% nsf::proc -debug foo {} {return 123} % foo Debug: call(1) - foo Debug: exit(1) - ::nsf::procs::foo 72 usec -> 123
The enter and exit messages can be tailored and redirected at the script level by redefining "::nsf::debug::call" and "::nsf::debug::exit", respectively.
To actively manage API evolution, NSF procs and methods can be marked "deprecated". Using deprecated procs/ methods will result in a warning:
% nsf::proc -deprecated foo {} {;} % foo Warning: *** proc foo is deprecated.
The warning message can be tailored and redirected at the script level by redefining the proc "::nsf::deprecated".
+ NSF procs and methods can be profiled (and optionally traced) when profiling support is configured during compilation
./configure --enable-profile (default: disabled)
This can be controlled via
nsf::__profile_trace -enable /bool/ ?-verbose /bool/? nsf::__profile_get nsf::__profile_clear
When profiling is enabled, the profiling data is kept in memory and can be obtained via "nsf::__profile_get" in form of a list structure containing the wall clock time since start of profiling, the aggregated ms and lists containing object times (what time was spent in which object/classes), method times (what time was spent in which methods) and proc data (what time was used in which procs) followed by trace data (showing calls and exits of methods/procs/cmds). When "nsf::__profile_trace" is called with the "-verbose" flag, the trace is printed via "nsf::log".
* Add script-level access to the NSF argument parser to conveniently process, e.g., non-positional parameters/arguments and value checkers. See https://next-scripting.org/xowiki/docs/nx/tutorial/index1#_parameters for the details.
The command
::nsf::parseargs /paramspec/ /arglist/
can be used to parse arglist based on the paramspec to set the parsed arguments in the local context. For example, the command
% nsf::parseargs {{-x:integer 1} y} {123} % set x 1 % set y 123
will define variables x holding "1" and y holding "123" for the current Tcl scope.
* Minor logging reform (NsfLog, interp): "nsf::configure debugLevel /severity/" will print error messages at a level equal or greater than the given severity (0, 1, 2, 3). For example, "nsf::configure debugLevel 0" will print any "nsf::log" message, and "nsf::configure debugLevel 3" will print just "nsf::log" level 3 (error) messages while omitting warnings etc. This does not entail changed logging semantics, but helped remove some confusion at the NSF/C level.
* Improved NSF/C code generator (gentclAPI.tcl): Allows for specifying and generating enum types.
* Misc:
+ New flag "-notrace" for "nsf::var::set" and "nsf::var::get" to implement ability to use these low-level commands for accessing variables without firing Tcl traces.
+ New cmd "nsf::method::forward::property" for reading for writing introspection of forwarders. This is important for the serializer to map the per-object forwarder when different target objects are specified.
+ New option for call-stack introspection: "nsf::current level". It returns the stack level of the currently executing NSF method (like "info level"), or an empty string outside of an NSF context.
- NX:
* NX method definitions ("alias", "forward", and "method") now accept the optional flags "-deprecated" and "-debug". See NSF section above for usage details.
/cls/ public alias ?-deprecated? ?-debug? /method/ ... /cls/ public forward ?-deprecated? ?-debug? /method/ ... /cls/ public method ?-deprecated? ?-debug? /method/ ... /obj/ public object alias ?-deprecated? ?-debug? /method/ ... /obj/ public object forward ?-deprecated? ?-debug? /method/ ... /obj/ public object method ?-deprecated? ?-debug? /method/ ...
* Improved object and method introspection: Newly added introspection subcommands complete the set of introspection commands and reflect the newly introduced method options.
/cls/ info method callprotection /cls/ info method debug /cls/ info method deprecated /obj/ info baseclass /obj/ info object method callprotection /obj/ info object method debug /obj/ info object method deprecated
* Reform of traces on slot-managed object variables: Revised the interface and semantics for the interaction of variable traces and slots. It is now possible to specify in the definition of a "property" or "variable" whether the slot-accessor methods ("value=get", "value=set") should be fired whenever a variable is read/written or when it is initialized to a default value for the first time ("value=default").
/obj/ object property|variable ?-trace set|get|default? ... /cls/ property|variable ?-trace set|get|default? ... See the nx::Object and nx::Class man pages for details. This supersedes the experimental interface available in XOTcl 1.* based on "initcmd", "valuecmd" and "valuechangedcmd".
* Documentation (API and examples):
+ Added
Rosetta implementations: Inheritance/ single, add object variable dynamically, tree traversal, and tokenizer. + Updated
Object.man: Added missing description on "info lookup parameters" and "info lookup syntax"; corrected description of "copy"; added "info baseclass"
{alias|forward|method}.man.inc: Added documentation of "-debug" and "-deprecated" switches.
current.man: Added description of 'level' option.
Rosetta implementations: Inheritance/multiple, polymorphic copy, multiple distinct objects
- XOTcl2:
* XOTcl2 method definitions ("proc", "instproc", "forward", and "instforward") now accept the optional flags "-deprecated" and "-debug". See NSF section above for usage details.
/cls/ instforward -deprecated|-debug /method/ ... /cls/ instproc -deprecated|-debug /method/ ...
/obj/ forward -deprecated|-debug /method/ ... /obj/ proc -deprecated|-debug /method/ ...
* New -return flag: XOTcl2 method definitions can now specify a return-value checker, similar to NX methods.
/cls/ instproc -returns /method/ ... /obj/ proc -returns /method/ ...
- Shells:
* There is now an improved and packaged shell implementation: nx::shell2. It is used by all four shell scripts. nx::shell2 builds on Tcl's event loop, rather than while + update. This avoids blocking the Tk main window (update). In addition, nx::shell2's behavior is more akin to Tcl's native shells (e.g., no extra lines on enter, catches EOF). The Tcl package can be conveniently sourced, e.g., in Tclkit main scripts.
* The new shells accept script input now via stdin or as provided via "-c" in the command line.
* They are more robust: Don't quit due to inner [return] calls, [exit] is handled gracefully.
* Added tests for the shells to the regression test suite (shells.test).
- Traits:
* The namespace "nx::traits::XXX" was renamed to "nx::trait::XXX" in order to improve naming orthogonality with the trait management package "nx::trait".
- MongoDB interface upgrade:
* Upgraded MongoDB and drivers to mongodb-c-driver 1.5.1, libbson 1.5.1 and MongoDB v3.4.0.
* The upstream mongodb-c-driver has deprecated the old OP_QUERY syntax with $-modifiers and old names like $orderby and $query, which will be removed from the driver. The new interface is more in the mongodb style, many former parameters (e.g. -limit, -skip, -project, -sort) went to the new "-opts" argument.
mongo::collection::query /collection/ /filter/ ?-opts /opts/? mongo::cursor::find /collection/ /filter/ ?-opts /opts/?
See the begin of nsf-mongo.test file for examples for queries with the old and new interface. The high-level interface for nx::Object is unchanged.
* Support for new binary type "decimal128"
- Maintenance & bug fixes:
* Tcl command resolvers and command literals:
Between Tcl 8.6.0 and (including) Tcl 8.6.6, there was a problem in the interaction between Tcl 8.6 and the command resolvers of NSF in certain corner cases and Tcl's command literals. The issue and patches were reported upstream to the Tcl core team, was recognized and will enter an upcoming patch release (8.6.7). Our regression test-suite was extended accordingly to track the issue.
See Tcl Fossil tickets d4e7780ca1 and 3418547.
* Finalizing NSF and NSF object systems:
In this release, the finalization procedures of NSF (on process exits, thread exits, and interp teardowns) has been revised. For example, NSF's ExitHandler is guaranteed to be called just once in the above scenarios (e.g., to avoid double frees of NSF structures).
* Fixed a long-standing and not easy reproducible bug when deleting classes in multiple nested diamond inheritance structures.
* UnsetTracedVars:
Provide for a two-pass deletion logic during object shutdown, to account for unset traces possibly reviving an object variable under deletion. This corresponds to a recent memory leak fix to Tcl itself. See also Tcl Fossil ticket 4dbdd9af144dbdd9af14.
* Serializer:
The combined NX and XOTcl2 serializer has been extended to cover newly added features (esp., NSF procs, method flags) and has been improved based on experiences from multi-threaded NSF/Tcl applications (NaviServer). Improvements and fixes relate to "info" methods and forwarders.
* Tcl 8.7:
Preliminary support for a future Tcl 8.7 (as of Dec 2, 2016; commit 71fa1f9c91). NSF compiles under 8.7a0 and its regression tests execute successfully.
* Misc (esp. NSF/C):
+ Refactoring: There is now a common infrastructure for hash-tables using function pointers as keys (as required for NSF/C command definitions and enumerations). + Removed all implicit type-conversions, signed/unsigned comparisons as flagged by the following gcc/clang flags (ensure cleanness on 64bit) -Wconversion -Wsign-conversion -Wfloat-conversion -Wsign-compare. + Reduced variable scopes. + Guarded against potential Tcl_Obj leaks, esp. when using "NsfMethodNamePath", as indicated by valgrind. + Refactored functions for topological sorting ("TopoSort") to avoid code redundancies. + Addressed more than 18 code-quality issues as indicated by Coverity Scan, incl. control-flow issues (risking NULL dereferencing), dead code branches, etc. + Removed uses of deprecated functions, e.g. "Tcl_AppendResult". + Based on the improve NSF/C code generator (see above), proper enum types are used in generated function signatures and the respective control structures (switch).
* Extended regression test suite: The test suite contains (for Tcl 8.6.6) now 5852 tests.
- Packaging & distribution:
* Updated TEA to 3.10 * Support for MSVC 1900 (VS 2015; win/makefile.vc) * Debian package: https://packages.qa.debian.org/n/nsf.html * MacPorts port: https://trac.macports.org/browser/trunk/dports/lang/nsf/Portfile * Part of the KitCreator battery: https://kitcreator.rkeene.org/fossil/ * Part of the kbskit battery: https://sourceforge.net/projects/kbskit/
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).
Dear Community,
We are pleased to announce the availability of the Next Scripting Framework (NSF) 2.2.0. The changes are mostly performance and robustness improvements, providing better error messages etc. See below for the details.
Diff stats since 2.1.0: 214 files changed, 54192 insertions(+), 44982 deletions(-)
Major changes relative to 2.1.0 are:
New Features
- NSF:
* Robustness improvements:
+ Use exactly the same six whitespace-delimiter characters in NSF as in plain Tcl to avoid surprises (internal API: NsfHasTclSpace())
+ Improved parameter parsing: Don't allow bytearrays as name of non-positional arguments, to avoid that bytearrays get unwanted string representations (and losing potentially the pure bytearray property). This could lead to problems with newer Tcl versions when passing binary data to NSF procs and methods.
* Performance improvements:
+ coloncmd reform: Dispatch performance of [:myMethod ...] is improved by up to 30% by caching the result of the method lookup in a Tcl_Obj
+ Lookup of (bytecode-compiled) object variables is now performed via a sorted lookup cache to avoid repeated linear searches for compiled locals (especially an improvement for unsuccessful searches).
+ Reduced number of string comparisons (strcmp()) via first-char comparison in method-parameter parsing and argument handling.
+ Reduced number of strlen() operations, especially in method-parameter parsing and argument handling.
+ Reduced memory consumption via better member aligning of structs, esp. on 64-bit machines.
* New, low-level helper command:
* "::nsf::definitionnamespace": Determines the default namespace for objects etc. as used internally in NSF
* "::nsf::cmd::info disassemble /methodName/", "/cls/ info method disassemble /methodName/", "/obj/ info method disassemble /methodName/": This is the pendant to ::tcl::unsupported::disassemble adding support for NSF methods and NSF procs (nsf::proc). See, e.g., https://wiki.tcl.tk/21445. The "info" methods are only available when NSF has been built using --enable-development.
- NX:
* Improvements to incremental property methods: Adding ("value=add") and deleting elements ("value=delete") now enforce any value checkers defined on their properties and behave correctly when conversion is used.
* Improvements to handling of parameter option "substdefault". NX provides now controls to the developer to select the kind of substitution at runtime when a default value is used.
+ the "substdefault" options can control via a single argument whether command/variable/backslash substitution is wanted. Examples: 0x111 substitute all 0x100 only command substitution 0x010 only variable substitution 0x001 only backslash substitution or any bit combination. Combinations can be used to define the equivalents of the flag "-nocommands" (0x011), "-novariables" (0x101), "-nobackslashes" (0x110), and their mixes, respectively, available to [subst].
+ make behavior of per-object and per-class substdefaults consistent, early check for complete substitution scripts.
* Improvements to ensemble methods: + Fixed bug when ensemble method was dispatched via colon dispatcher (problem with leading colon) + [current nextmethod] + [current isnextcall] return now proper ensemble methods when necessary
- MongoDB interface upgrade:
* Upgraded driver and utilities to mongodb-c-driver 1.12.0 and libbson 1.12.0. * Add regular expression queries to conditions in nx::mongo * Improved portability between platforms/ OS * Added auto-cleanup of resources (objects) for long-living execution environments (destroy_on_cleanup). * More robust serialization of object graphs, by preserving original classes in serialization/deserialization. * Fixed default-value handling under certain conditions
- nx::test:
* Provide support for expressing expected results in terms of error codes, rather than error messages. This is to prepare an upcoming reform on providing error codes from within NSF more extensively.
- nx::serializer:
* Fix potential problem in NaviServer ns_eval with blueprint updates on objects, which were not created by the blueprint. Such objects could lose their classes when these classes are cleaned up on blueprint evaluation.
- DTrace support (macOS): Adjusted NSF/DTrace integration for changes on recent macOS (incl. SIP). See dtrace/README for instructions.
- Documentation:
* NSF now has support for TIP #59 introspection via ::nsf::pkgconfig; see https://core.tcl.tk/tips/doc/trunk/tip/59.md * Added tutorials on NX properties: tutorial-properties.tcl * Improved spelling in documentation: next-migration.txt etc.
- Continued testing: NSF is now continuously built and tested under Linux, macOS, and Windows against different Tcl targets, using different tool chains (gcc, clang, MinGW, MSVC). For this purpose, there is now an official GitHub mirror at:
Build and test reports are available from:
https://travis-ci.com/nm-wu/nsf https://ci.appveyor.com/project/mrcalvin/nsf-2ylk0
- Maintenance & bug fixes:
* Execution namespace reform: As in earlier releases, NSF methods can execute in different namespaces such as their object's definition namespace. Starting with NSF 2.2, the execution namespace is maintained in a context structure and the namespace is just changed while the proc is executing. This fixes some counter-intuitive results using standard Tcl introspection on these commands.
* Migration to C type 'bool': replace legacy 0/1 integer bools by proper types when possible.
* Tcl 8.7:
Support for Tcl 8.7a1 and the upcoming, unreleased Tcl 8.7a2 (core.tcl.tk branch "core-8-branch"). NSF compiles and its regression tests execute successfully.
* Misc (esp. NSF/C):
+ Bug fix: Avoid preemptive frees on %proc substitution for forwarder methods. + Aliases: Avoid Tcl_obj re-creations + Guarded against potential Tcl_Obj leaks, esp. when using "NsfMethodNamePath", as indicated by valgrind. + Silenced warnings emitted by GCC 8.1+ on strncat() and strncpy(). + Addressed 5 code-quality issues as indicated by Coverity Scan, incl. control-flow issues (risking NULL dereferencing) and buffer overflows in string operations. + Silence warnings under MSVC 1914
* New configure option: "--enable-development=test" Enable computationally intensive runtime tests, having noticeable effects on runtime. A version of NSF configured with "--enable-development" can be used also for production environments.
* Extended regression test suite: The test suite contains now 6243 tests (for Tcl 8.6.8). This compares with 5852 tests in NSF 2.1.0 (for Tcl 8.6.6).
- Packaging & distribution:
* Initial support for the new nmake system of TEA (TIP 477) and MSVC 1914 (VS 2017; win/makefile.vc); various fixes to install target.
The detailed changelog is available at https://next-scripting.org/xowiki/download/file/ChangeLog-2.1.0-2.2.0.log
The Next Scripting Framework 2.2.0 (containing NX 2.2 and XOTcl 2.2) can be obtained from https://next-scripting.org/. Please report issues and wishes by opening a ticket at https://sourceforge.net/p/next-scripting/tickets/.
Best regards - Gustaf Neumann - Stefan Sobernig
_______________________________________________ Xotcl mailing list Xotcl@alice.wu-wien.ac.at http://alice.wu-wien.ac.at/mailman/listinfo/xotcl