Dear Community, After the release of Next Scripting Framework 2.0b3, we received several feedbacks from early adaptors (many thanks for the helpful an constructive comments). This discussion made us to revise some of the namings and conventions to achive better comprehension and orthogonality. Most of the changes happend on the scripting layer without the need to change the nsf C layer. In addition to the list of changes below, there are the following major differences: a) NX 2.0b3 used the following conventions to define methods for instances, object-specific methods and class-object specific methods: /cls/ method foo {args} {...} /obj/ method bar {args} {...} /cls/ class method baz {args} {...} Introspecition was (in the same order) /cls/ info methods /obj/ info methods /cls/ class info methods The problem with this convention is that e.g. "info methods" returns different things depending on wheter it is called on a class or on an object, and breaks the contract with the programmer. nx::Class is a specialization of the most general class nx::Object, the same means should be able to obtain e.g. object specific methods for classes and ordinary objects. Thefore, we changed to the following more orthogonal conventions to define methods for instances and object-specific methods /cls/ method foo {args} {...} /obj/ object method bar {args} {...} Introspecition: /cls/ info methods /obj/ info object methods Note that we can now use the same mechanis to define or query object specific methods on objects and classes. The same applies for aliases, forwards, mixins, and filters. The new convention is a little more to burden for the developer, but reduces the effort of a reader of a program to understand, what exactly $x method FOO {args} {...} means. For conveniance (and migration) we provide two packages "nx::plain-object-method" and "nx::class-method" to use the follow the old conventions (a verbose mode can report usages). b) Parameterization: NX 2.0b3 followed the XOTcl conventions, that parameters for configuring object creations are registering by default same-named setter methods. This setter methods can shadow potentially needed methods, which might lead to unexpected behaviors for beginners. NX 2.0b5 switched to the Tk/itcl/... conventions to support cget / configure. The accessor methods (public, protected, private) can be optionally automatically generated via flag "-accessor ..." for properties and variables. c) Further orthogonalized introspection interface ("info"). In order to streamline the interface further, we followed the idea to use "... info /plural word/" to obtain a set of handles, and then a separate call to obtain the details. Therefore, we use now /cls/ info methods /obj/ info object methods /cls/ info variables /obj/ info object variables /cls/ info slots /obj/ info object slots /cls/ info method parameters /methodName/ /obj/ info object method parameters /methodName/ /cls/ info configure parameters /obj/ info lookup configure parameters to return a list of handles (result list can be filtered in each case via a patter) and use later a separate call to obtain detail information /obj/ info method definition /methodHandle/ /obj/ info variable definition /varHandle/ /obj/ info parameter name /paramHandle/ These are just a few example. In NX 2.0b3 we had e.g. "... info parameter definitions ..." where it was for a beginner not clear, what parameters are exactly meant, and in which case one can use a plural word for detail information or not. Now, all detail definitions are singualar words We are pleased to announce the availability of the Next Scripting Framework 2.0b3 which can be obtained from http://next-scripting.org Best regards - Gustaf Neumann - Stefan Sobernig =============================================== Announcing NSF 2.0b5 ************************* Major changes relative to NSF 2.0b3 are (in addition of the items (a), (b), and (c) above) are: * Additional Features: - serializer: * added flag -objmap to Serializer method deepSerialize to make serialzer to provide mapping only for object names. This makes the serializer usable for object/class copying (-map is too coarse) * Serializer: "ignore" method made public * Due to the split between serializer and object system serializer, the "ignore" settings were lost - allow explicit unsetting of -per-object flag in 0-argument "-flag=value" notation (all built-in cmds accepting this flag) - better compatibility with XOTcl 1.*: - added "/obj/ info name" (as alternative to "namspace tail [self]") - test-suite: added summary with statistics - traits: added property/variable inheritance - MongoDB - added "nx::mongo::db drop collection /name/" - returning status from "nx::mongo::db remove" as success (0 or 1) - adjust to object interface - reduce verbosity - add error messages for slot lookup failures Updated MongoDB interface - upgraded to c-driver 0.7.1 - tested with MongoDB 2.4.4-pre - new commands: * mongo::run * mongo::cursor::find * mongo::cursor::next * mongo::cursor::close - adapted interface for c-driver 0.7.1 (e.g. new optional name for mongo::index) * Improved Code Quality: - some cleanup and code refactorings - fixed functional bugs: * copy did not copy aliases and ensemble methods * automatic object destroy for half-baked objects (when e.g. configure raises an exception) * handling of required configure parameters on later calls to "configure" * fixed potential inifinite loop in pattern matching for precedence lists * handling of full-qualified name patterns for private slots * invalidation of per-object parameter cache - on mixin changes and - on deletion/adding of per-object slots * handle cyclical superclassclass dependencies during object system finalize * Fixed a bad interaction between Tcl's apply (pushing lambda frames) and the variable resolvers. The variable resolver was not able to resolve variables, while the command resolver was still working correctly. * don't allow "method" to overwrite child objects - fixed potential crashes * on object destroy, when the same wrapperless aliases was registered on many objects * when "nsf::my" is called with a single argument outside an object context. * avoid crash in case NsfParameterGetCmd() is passed a plain value (without a parameter spec) * fix potential crash in method caching when cmds are renamed by tcl (many thanks to Arthur Schreiber for reporting) - build system: * improved compatibility for windows compilations. NX can now be compiled under windows with the native window toolchain (and as well with MinGW) (Many thanks to Stephan Adelsberger) * Update to latest TEA. * Follow new naming convention for auto-tools (using configure.ac) * fix compilation when dtrace is activated (missing parthesis, many thanks to Victor Guerra for noticing) * added compile macro NSF_STACKCHECK to provide stack monitoring/debugging (especially useful for multi threaded programs, where stack is more limited) - fix compilation when compiled without threads (many thanks for r.zaumseil for noting this). * Improved documentation - fixed typos, improve wordings - updated tutorial and migration guide - use slashed in generated syntax to distinguish between constants and placeholders /obj/ info method definition /methodName/ - improved performance * rewrite of alias handling (alias reform) * improved branch prediction * significant speedup for handling large numbers of subclasses (subclass reform), avoid repetitious computations * significant speedup on mass-destroy (e.g. on thread exit) - provide better protection for deletion/overwriting of base classes - fixed potential duplicates on diamond inheritance - fixed unknown handling for "-local" and "-system" dispatches - follow Tcl convention on error messages (start always with lower case) - better handling of multiple errors in a single command. - return GMT dates in Httpd as RFCs require * Extended regression tests MORE INFO General and more detailed information about the Next Scripting Framework and its components can be found at http://next-scripting.org