Index: TODO =================================================================== diff -u -r827f6d934f60d5ea0c02ea68d9e4cb8fc8a2f7ad -r5e494cf3cf01d01128b365f91ed3cd9716b1b11e --- TODO (.../TODO) (revision 827f6d934f60d5ea0c02ea68d9e4cb8fc8a2f7ad) +++ TODO (.../TODO) (revision 5e494cf3cf01d01128b365f91ed3cd9716b1b11e) @@ -4232,18 +4232,18 @@ - extended regression test nsf.c -- added functiality for "cget" to call parameter-methods +- added functionality for "cget" to call parameter-methods (e.g. "... cget -class"). The method cget calls either "/slot/ get ..." (when slot=... is provided in the parameter spec) or it assumes that the method without argument returns the value - added "::nsf::object::property /obj/ volatile" to query whether a object is volatile or not -- "/obj/ cget -volatile" returns now the volatial state of the object +- "/obj/ cget -volatile" returns now the volatile state of the object - factored out ParameterMethodDispatch() from OConfigureMethod() - extended regression test nx.tcl: -- change parameter name in "/cls/ info paramameter ... ?pattern?" +- change parameter name in "/cls/ info parameter ... ?pattern?" from "name" to "pattern" - changed name "/obj|cls/ slot info definition" to "/obj|cls/ slot info definition" since result is a set @@ -4255,7 +4255,7 @@ nsf.c: - factored out ParameterMethodForwardDispatch() to call a parameter method defined as a forwarder - the smae way from "configure" and "cget" + the same way from "configure" and "cget" - extended regression test nx.tcl: @@ -4272,73 +4272,423 @@ - handling of method names in error messages from nsfAPI.h. Make sure that error message is generated with the actual method name. -======================================================================== -TODO: -- flatten out interface asymmetry between methods and properties +Object-method Reform: +- changed interface to object specific commands by requiring an + ensemble named "object". The rational behind is essentially + to use always the same info command to retrieve object + specific methods, no matter whether these are defined + on a plain object or an a class object (does not break + the "contract" what e.g. "info method" returns). - methods: - query defined: "/obj|cls/ info methods ?pattern?" -> names - obtain definition: "/obj|cls/ info method definition /name|handle/" -> single definiton - query callable: "/obj|cls/ info lookup method /name/" -> handle (where is the method defined) - query callable: "/obj|cls/ info lookup methods ?pattern?" -> names (what methods can be called) + Now we define methods via: + + /cls/ method foo {args} {...body...} + /cls/ object method foo {args} {...body...} + /obj/ object method foo {args} {...body...} - properties|variables - query defined: "/obj|cls/ info slot names ?pattern?" -> names - obtain definition: "/obj|cls/ info slot definitions ?pattern?" -> list of definitions - query callable: "/obj|cls/ info lookup slots -source .. ?pattern?" -> slot objects (where are parameters defined) + Similarly, aliases, forwards and mixins are defined, e.g. - + more detail queries for "info method" and "info slot" + /cls/ mixin add ... + /cls/ object mixin add ... + /obj/ object mixin add ... + /obj/ require object method ... + /obj/ object property ... + /obj/ object variable ... - alternative: - - drop term "slot" from the public vocabulary, use property instead (also for variable cases) - - properties|variables: - query defined: "/obj|cls/ info properties ?pattern?" -> names - obtain definition: "/obj|cls/ info property definition /name|slotobj/"-> single definiton - query callable: "/obj|cls/ info lookup property /name/" -> slotobj - query callable: "/obj|cls/ info lookup properties ?pattern?" -> names (what properties are available) - we could certainly stick with slot/slots. + The same change propagated as well to the "info" method. + Now we have: - pro: same logic - contra: needs often 2 steps: find the handle|slotobj, get the detail info from there. + /cls/ info methods ... + /cls/ info object methods ... + /obj/ info object methods ... + Similar, the object parametererization uses + /cls/ create obj -object-mixin M + /cls/ create obj -object-filter f + /metacls/ create cls -mixin M1 -object-mixin M2 + /metacls/ create cls -filter f1 -object-filter f2 -- maybe rename nonpos arg "-config" of property/variable - to "-configurable"? (pro: more clearly, contra: longer) -- regression tests for "/obj/ info lookup parameter ...." -- handling of "required" in reconfigure (see - parameter-object-mixin-dependency in parameters.test) -- handling of recreate (see regression test for class-level properties) -- maybe "::nsf::object::property /obj/ volatile 0|1" to alter - volatile state. -- Property reform part 3: change defaultPropertyAccessor or nx to none -- update documentation with property reform +- as a consequence, + a) "/cls/ class method ..." + "/cls/ class alias ..." + "/cls/ class forward ..." + "/cls/ class filter ..." + "/cls/ class filterguard ..." + "/cls/ class mixin ..." + "/cls/ class mixinguard ..." + "/cls/ class info ..." + "/obj/ class method require method ..." + "/obj/ class method require public method ..." + "/obj/ class method require protected method ..." + "/obj/ class method require private method ..." + "/cls/ class property ..." + "/cls/ class variable ..." + "/cls/ class delete property ..." + "/cls/ class delete variable ..." + "/cls/ class delete method ..." + "/cls/ require class method ..." + "/cls/ require public class method ..." + "/cls/ require protected class method ..." + "/cls/ require private class method ..." -- do we need "config" as parameter property? + were dropped -- document "private property" + b) "/obj/ method ...." + "/obj/ alias ...." + "/obj/ forward ...." + "/obj/ filter ...." + "/obj/ mixin ...." + "/obj/ info method*" + "/cls/ create obj -mixin M" + "/cls/ create obj -filter f" + "/obj/ require method ..." + "/obj/ require public method ..." + "/obj/ require protected method ..." + "/obj/ require private method ..." + were dropped + +- added package nx::class-method to allow optionally the "class" notation + "/cls/ class method ..." (and friends, see (a)), and + "/cls/ class info ... -- document new setable object properties perobjectdispatch and keepcallerself +- added package nx::plain-object-method to allow optionally plain method + b) "/obj/ method ...." (and friends, see (b)) -- behavior on keepcallerself on ordinary dispatches with implicit/explicit - receiver (currently the flag is ignored, the code just commented out) +- added support to slots to use ensemble methods as setters +- added "/obj/ object variable" and "/obj/ object property" -- Aliases and forwards are not handled by NsfNSCopyCmdsCmd; object - cloning/copying remains incomplete; also, there might be object and - method properties not handled as well (as the "returns" method - property before the recent fix) +- bumped version number to 2.0b5 +- tested with NaviServer and OpenACS + (new version of nx needs as well a newest NaviServer, + since ns_cache implementation needs to be objectified; + newest NaviServer version works as well with older nx) -- Check the following todos such as "todo: don't hard-code registering - command name "method" / NSF_METHOD"; parts of the introspection - machinery in NSF rely on NX/script-level specifics ... how should we - handle this? For the system methods (create, ...), we can resolve - the situation; for the NX or XOTcl method delegates (method) of - ::nsf::method::create & friends, we do not have any - abstraction/handle right now ... should we script those info - subcmds (info method definition), against a performance penalty? +- moved "/obj/ info slot definition|..." to + "/obj/ info object slot definition|..." for consistency +- provided "parametersyntax()" for "object mixin" and "object filter" -- __WIN32__ builds/MinGW: It seems that the http.test cases for XOTcl2 - fail against Tcl 8.6b2. Check this ... +Method and configure parameter reform: +- unify handling / naming / parameterization of method parameters and + configure parameters + +- New Interface: + + /cls/ info configure parameters ?pattern? -> list of params + /cls/ info configure syntax -> syntax output + + /obj/ info method parameters /methodName/ ?/pattern/? -> list of params + /obj/ info method syntax -> syntax output + + /obj/ info lookup configure parameters ?/pattern/? -> list of params + /obj/ info lookup configure syntax -> syntax output + + /cls/ info parameter list|name|syntax /param/ -> value + + "... method syntax" and "... configure syntax" return the full method/configure call, + and not only the parameters as in previous versions. Therefore, providing a pattern + could lead to unexpected results, therefore the argument was dropped. + +- Replacements relative to 2.0b4: + + {/cls/ info parameter definitions} -> {/cls/ info configure parameters} + {/cls/ info parameter definitions x} -> {/cls/ info configure parameters x} + {/cls/ info parameter syntax ?pattern?} -> {/cls/ info configure syntax} + {/obj/ info lookup parameter definitions ?pattern?} -> {/obj/ info lookup configure parameters ?pattern?} + {/obj/ info lookup parameter syntax ?pattern?} -> {/obj/ info lookup configure syntax} + +- Dropped calls: + + /cls/ info parameter list ?/pattern/? + /cls/ info parameter names ?/pattern/? + + syntax of a single parameter via this interface + /cls/ info configure syntax ?/pattern/? + + /obj/ info lookup parameter names ?/pattern/? + /obj/ info lookup parameter list ?/pattern/? + + +Method and configure parameter reform, Part 2: +In order to streamline the interface further, we tried to follow the idea to use +"... info /plural word/" to obtain a set of handles, and then a separate call +to obtain the details. Therefore, we replaced + + /cls/ info slot objects + /cls/ info slot definitions + /cls/ info slot names + + /obj/ info object slot objects + /obj/ info object slot definitions + /obj/ info object slot names + + /obj/ info lookup slots + +by + + /cls/ info slots ?-type /type/? ?-closure? ?-source all|application|baseclasses? ?/pattern/? + /obj/ info object slots ?-type /type/? ?/pattern/? + /obj/ info lookup slots ?-type /type/? ?-source all|application|baseclasses? ?/pattern/? + +- nx.tcl: handle "incremental" in slot reconfigure +- nx.tcl: change defaultAccessor to "none" + +- dropped "/obj/ info slot definition /slotobj/" in favor of "/slotobj/ definition" + + + +Method and configure parameter reform, Part 3: +- added + + /obj/ info lookup variables -> list of handles + /obj/ info lookup object variables -> list of handles + /obj/ info variable definition|name|parameter /handle/ + +- nx.tcl: added forward compatible scripted implementation of "lmap" + +- nsf.c: handle names for private slots in pattern provided to AddSlotObjects(), + used e.g. in "info lookup slots /pattern/" +- added new regression test info-variables.test + +- nx-pp.tcl: fixed changed accessor handling, added cget to highlight words +- updated next-migration guide to reflect changes from the configure reform + +- "info method syntax" returns now "/cls/ ...." +- "info object method syntax" returns now "/obj/ ...." + +- hopefully the last changes for ?object? method|variable|property: + defined + * "/obj/ delete object method" + * "/obj/ delete object property" + * "/obj/ delete object variable" + +- extended parameter extractor: new functionality + ::nsf::parameter get default /parameter/ ?/varname/? + ::nsf::parameter get type /parameter/ + /obj/ info parameter get default /parameter/ ?/varname/? + /obj/ info parameter get type /parameter/ + +- nsf.c: handle full-qualified name for private slots (AddSlotObjects()) +- extended regression test + +- C-code Generator: added "-typeName" for enumeration types that + allows for disambiguation of enumerations with different argument + names. Before that, the argument name determined the c-type of the + enumeration. Therefore it was not possible to use argName "-type" + for two different functions with a different list of enumerators. + +- changed "-methodtype" to simply "-type" in + /obj/ info methods ... ?-type all|scripted|builtin|alias|forwarder|object|setter|nsfproc? ... + /obj/ info object methods ... ?-type all|scripted|builtin|alias|forwarder|object|setter|nsfproc? ... + /obj/ info lookup methods ... ?-type all|scripted|builtin|alias|forwarder|object|setter|nsfproc? ... + +- removed some TODOs from tests/parameters.test + +- parameter dispositions: + We differentiate now between "initcmd" and "cmd": an "initcmd" is only + evaluated once, but one can provide configure values for this parameter + later. a "cmd" is executed on every evaluation, it is only possible + to pass cmds to it. The trailing argument of the configure parameters + (used e.g. for scripted object/class definitions) is now of type "cmd". + Implementation not yet complete (object cases are not correct). + +- nsf.c: fix crash when "nsf::my" is called with a single + argument outside the object context. + +- fixed cases, where valuechangedcmd (and the other traces) did not + work with "configure" method. When slot traces are used, it cleans + other traces for the same operations. +- extended regression test + +- added implementation for slots with traces+types for classes +- exception for incorrect defaults are thrown during slot creation +- extended nsf::is, added parameter + * ?-configure? -- accept configure parameter options + * ?-name /name/? -- provide a parameter name for error message +- simplified nx.tcl by using new nsf::is +- extended regression test + +- changed ::nsf::parametersyntax(..) to ::nsf::parameter::syntax(..) +- xotcl2: adjusted manual parameter syntax entries to new conventions + +Cleanup of nsfAPI.decls +- remove unneeded enumeration types +- use "typeName" to shorten reported names of parameters +- use camel case for reported names + +Traits: +- changed from traits-as-objects to traits-as-classes. This + allows for higher orthogonality of traits and class definitions + and allows in principle traits for object-specific methods + (not fully implemented/tested) +- fixed property/variable inheritance in traits. + +nsf.c: +- changed enumeration values for "-source" in + "info lookup methods" + "info lookup slots" + "info methods" + "info slots" + of "all|application|baseclasses" + to "all|application|system" + for consistency with "nsf::my" and "nsf::dispatch" + which uses "-system" as well + +nx.tcl: +- removed "info is .." since it might raise more questions than it solves +- renamed initblock parameter from __initcmd to __initblock +- renamed nsf::configure parameter from "keepinitcmds" to "keepcmds" +- saving "keepcmds" in an associative array named "__cmd(/parameternName)" + to allow saving of multiple parmeters with less name clash danger + (when application stays away from variables stating with double + underscore) + +- completed coverage if plain-object-method.tcl +- provided warnings via plain-object-method.tcl via "nsf::log warn ..." + +nsf.c +- fixed potential infinite loop in pattern matching for precedence lists +- cget: make error message closer to tcl conventions +- extended regression test + +package nx::plain-object-method: +- made warnings configurable via + nx::configure plain-object-method-warning on|off +- completed coverage and test cases + +package nx::class-method: +- convenience package similar to nx::plain-object-method +- allow for usage "C class method ..." in addition to + "C object method". +- made warnings configurable via + nx::configure class-method-warning on|off +- completed coverage and test cases + +nx.tcl: +- replaced functionality of "/obj/ configure" by + "/obj/ info configure" to re-enable semantics + of the plain configure method, even when called without + arguments. "/obj/ info configure" is actually a + convenience method to allow to write + o1 info configure + instead of + o1 info lookup configure syntax + +- traits: added ability to turn on verbosity for traits + by using + nx::configure trait-verbosity on|off + +nx.tcl: +- renamed variable option "-config" to "-configurable" + to make its intention clearer + +- changed multiplicity of mixin, object-mixin, filter, object-filter + from 1..n to 0..n; rationale: when one has a list of eg. mixins, + which should be passed, one has to test for the length before + passing it, otherwise the empty list would generate an error. + Allowing 0..n makes the usage simpler and the program shorter. + + +Removed oboslete item. At least in this concrete form, the +warning does not show up. +- NSF_WITH_VALUE_WARNINGS: Right now, value warnings are also fired + for arg vectors with a delimiting "--"; right now, this gives a warning: + + Object create o { + :public object method foo {-np1 -np2 p1} { + return $p1 + } + } + + ? {o foo -np1 1 -np2 2 -- -X} "-X" + +nsf.c: +- when creation with an required configure parameter failed, + delete the half-baked object to avoid confusing states. + +- improved handling of required configure parameters + when classes are changed dynamically. + When configure parameter are defined required, checking + for the absence of required parameter was only performed + at creation time. When objects were re-classed or their + classes extended with required parameters, later + calls to configure did not trigger exceptions. Now + we check for the existence of the instance variable + which addresses most of these points, but in future + we might wish a more general solution (see comment + for futures releases) + +nx::test: +- deactivate calling overhead calculation, since this + is not reliable (sometimes larger than the call). + +- Old TODO maybe obsolete: + + handling of recreate (see regression test for class-level properties) + + Could not find refernces about this in the parameters + or properties tests. + +nsf.m4: +- nsf.m4 currently unused (SC_PATH_NSFCONFIG and SC_LOAD_NSFCONFIG) + We can delete it from the current version. + +nsf.c +- fixed a bug in "info methods returns" in cases, where + no returns info was available. +- we can "/obj/ copy" now objects/classes containing + * aliases + * setter + * ensemble methods + * method protections + Instead of handling cmd copying in NsfNSCopyCmdsCmd, + it is replaced now by introspection. +- extended regression test + +nsf.c +- fixed a potental crash on destroy for objects having a + wrapperless alias defined +- removed obsolete function AssertionAppendPrePost() +- removed obsolete function NsfNSCopyCmdsCmd() + and ::nsf::nscopycmd (handled now more general on + scripting level in the "copy" method) + +nx.tcl: +- "copy" method: fixed copying of class-level per-object methods +- extended regression tests + +serializer.tcl +- added flag -objmap to Serialzer.deepSerialize + to make serialzer usable for copying (-map is to coarse) +- extended regression test + +nsf.c: +- Eliminate all use of Tcl_GetStringFromObj() function. + +nx::test: +- use the standard configure interface for + configuring instead of own version +- changed from nx::Test to nx::test + (user never has to know that nx::Test is a class). +- change test cases to newer interface +- don't use "namespace import nx::*" in test cases + when not required + +nsf.c: +- reduce variable scopes +- fix a bug in SlotContainerCmdResolver() when NSF_MEM_COUNT + is activated +- fix a small memory leak for PER_OBJECT_PARAMETER_CACHING +- all cases detectable with --enable-memcount=yes are fixed + + +======================================================================== +TODO: + + - spellcheck / ChangeLog (to point out differences to 2.0b3) + +Stefan: doc itmes + - make rough comparison table with NX, XOTcl, tclOO, itcl, Ruby, Python Most general superclass Metaclass @@ -4363,81 +4713,25 @@ but wich are not ones (-1, "- a b c", ....) in detection when to throw unknown. - - naming of slot classes - * should we switch from "-class" to "-slotclass"? - - o1 property ?-class value? ?-incremental? ?-nocomplain? spec ?initblock? - o1 variable ?-accessor? ?-class value? ?-incremental? ?-initblock value? ?-nocomplain? spec ?value? - - * the introspection interface uses "-type", meaning "class or subclass" - - o1 info lookup slots ?-type value? ?-source value? ?pattern? - o1 info properties ?-type value? ?-closure? ?-source value? ?pattern? - o1 info slot definition ?-type value? ?-closure? ?-source value? ?pattern? - o1 info slot name ?-type value? ?-closure? ?-source value? ?pattern? - o1 info slot objects ?-type value? ?pattern? - - o1 info children ?-type class? ?pattern? - - interface of "variable" and "attribute": * add switch -array for "variable"? (Just setting is trivial, handling setters and incremental setter is more work) - - handle cases, where defaultmethods of the slot are altered. - The parameter handling in nx assumes on several places that - the defaultmethods are {get assign}. - -- Revise call-stack introspection/intercession, i.e., [current - activelevel] vs. [current callinglevel] vs. uplevel()/upvar(): - - Currently, there are some inconsistencies when comparing activelevel - and callinglevel: - - 1. Both skip INACTIVE frames: This has implications for the notion - of an "activelevel" introspection as such (especially when comparing - with their semantics in XOTcl 1.*); also, we cannot access INACTIVE - (mixin, filter) frames anymore using uplevel|upvar (whether this is - needed is another issue, but at least, this breaks XOTcl 1.* - semantics, as callinglevel resolved to such INACTIVE frame contexts). - 2. The uplevel()/upvar() methods default to uplevel+callinglevel - semantics, so they borrow their issues from 1) - 3. For now, we do not support call-stack transparent up-leveling into - non-NSF frames, such as Tcl namespace + proc (apply) frames. - - Approaches: - a) Revise the current [current] subcmd scheme: callinglevel - vs. activelevel vs. ...? - b) Provide a more generic, filter-based [current callinglevel] (?) - subcmd which allows for applying different bitmask filters - c) Provide the necessary call-stack info in [info frame] and make - replacements for [current activelevel] & [current callinglevel] - scriptable ... - d) support for out/inout argument parsing strategies (however, this - would rather replace [upvar], what about [uplevel] indirection?) - - extend mongo::gridfs::store_file with a switch -metadata to pass metadata together at gridfs file creation time - do we have to adjust the documentation in xotcl2 for object initialization? - maybe optional arg (true) to ::nsf::object::initialized to generalize -noinit -- nsf.m4 seems to be currently unused (SC_PATH_NSFCONFIG and SC_LOAD_NSFCONFIG) - Should we delete it? - - maybe: add a disposition=pipe -- MixinComputeOrderFullList() could receive a flag to store source classes in checkList +- MixinComputeOrderFullList() could receive a flag to store + source classes in checkList - if the check on eg. info-heritage-circular in test/info.method.tcl reports a warning on exit, if we get an exception. -- should be be concerned about message like - DEBUG obj 0x100227960 ::nx::Object activationcount 2 on stack 3; might be from non-stacked but active callstack content - in the regression test? - -- maybe change nx::Test to nx::test (user never has to know that nx::Test is a class). - - what to do with metadata analyzer? Still needed? Already replaced by new doctool? Does it have to run on make? Can doctool run on Make? @@ -4461,12 +4755,11 @@ - document value added replacements of Tcl functions -- object parameter type forward: +- configure parameter type forward: - regression test - get rid of eager tcd creation (optimization, can go to future releases) - slotmachinerie 2 - - naming "incremental", "reconfigure" - should we deactivate add/delete for non-multivalued cases? - allow noarg+default/initcmd ? - default/initcmd/subsdefault: can we simplify these? @@ -4475,33 +4768,13 @@ - Makefile/::nsf::config: Integrate git meta-data (commit hash, branch/tag labels) - doc: - - * info parametersyntax reports ?__initcmd? - - * I might have missed sth., but there is an Object->class - parameter again. I thought we had removed this one ... :$ - + * no-accessor properties/slots are still reported as methods: class * method parameters need indentation ... * method ensembles are reported as "Implementation details: alias", is this ok? - * Currently, in NX, specifying mandatory parameters may break - object construction as init won't receive any arguments (no - residual args). Similarly, a -returns might scream out. Shall we - package that by not "allowing" (actually advertising) an - argument spec block for init, e.g.: - - Class create C { - :constructor { - # ... - } - } - - ... alternative name: "initializer", or "initialize" ... which - translates into a "o method init {} {}" - * doc validator reports wierd info submethods: info definition, info names, info objects -> mean "info slot *" ... smells like generator garbage ... @@ -4515,9 +4788,6 @@ performed: See the case for "info properties" -> "info slot definition" - * naming: application vs. baseclasses -> applicationclasses - vs. baseclasses ... - * "info method": elaborate on the options, right now the doc is minimal ... @@ -4526,23 +4796,16 @@ * fix sub methods validation reporting -> mismatch? - * onerror? not used in the forward implementation ... why? earlybinding really gone? - * Ensemble methods: obj info & friends ... there is no parametersyntax reported; add something literal in the template: ? - * C method foo {} {}; # deletes "foo" without existing method, the - error message is somehow swallowed ... - * Object|Class mixin|filter guard -> how to document (and not reported by nxdoc as missing either, as their as slot-specific)? And link to Class class filterguard|mixinguard ... Why not defining the latter as ensembles "Class class filter|mixin guard"? - * Why is there no -order on "Class info filter methods"? - * Ensemble methods, i.e. intermediate ones, should not be filter by inheritance in the nxdoc output. For example, info() in Class shares many details of info in Object, but it does not visualize @@ -4571,83 +4834,26 @@ for nsf::proc * toplevel (object less) introspection -- ".... info methods -methodtype scripted ....." and "info lookup - method -methodtype ..." vs. "info method type ...."; spricht was - dagegen, anstelle von "methodtype" nur "type" zu verwenden? - - documentation * migration guide 3.8. Dispatch, Aliases, etc.: to be done or omitted - check performance implications of value checker -- nameing - - * namespace prefix - next scripting language: ::nx::* - next scripting framework: ::nsf::* - * distributed packages in namespace ::nx::*, some are still in ::xotcl::* - * names of subpackages nx::*, some packages are still xotcl::* - - * Now we have - package require nx - package require nx::test - namespace import ::nx::* - -- library + apps - - new directory structure DONE +- library + XOTcl apps - work on binary packages of xotcl (store + xml) - nicht gewartete/nicht getestete library aus distro entfernen? - migration von einzelnen paketen nach next? von welchen? -- new website - * graphisches design - * website-struktur - * org. tutorial (bzw teile davon) ala book - or wiki (features als kategorien|tags|sections|directories) - - - Ein paar Punkte im folgenden könnten obsolet sein: TODO "Kleinigkeiten" -- NSF_WITH_VALUE_WARNINGS: Right now, value warnings are also fired - for arg vectors with a delimiting "--"; right now, this gives a warning: - - Object create o { - :public method foo {-np1 -np2 p1} { - return $p1 - } - } - - ? {o foo -np1 1 -np2 2 -- -X} "-X" - - However, the warning-generating code in Nsf_ConvertToTclobj() does - not receive any word of a dashdash having been processed in the - overall argv ... the NSF_ARG_CHECK_NONPOS set on the parsed (and - cached) param is the only condition to must hold. - - should we continue to work on the problem of the interp-aliased class, exported from one ns, imported into another one? - constants in type converter (in and out) -- genau genommen sind folgende info-Methoden unnötig: - - obj info mixin - - obj info filter - - obj info class - * obj info is - - cl info mixin - - cl info filter - - cl info superclass -# SS: Sie spielen vermutlich auf die Redundanz der getter seite der - relation slots an. Mmmh. Die info-Sicht bietet in einigen der Fälle - ?pattern? an, das wäre als Unterschied zu nennen (das ließe sich - aber auch in die relation slots integrieren, etwa [obj mixin search - ]. Zudem ist es ein Fallback, wenn mixin|filter|class - überladen wären (ein sicherer hafen), aber ob das als argument - genügt, die info-varianten zu behalten?! #if 1 /* TODO: the following check operations is xotcl1 legacy and is not @@ -4665,6 +4871,64 @@ For future releases (after first alpha/beta release) + - cmd introspection: + nsf defines a commands (e.g. nsf::proc) and unregistered methods. + The interfaces of these commands can be queried via methods + + % nx::Object info method parameters ::nsf::proc + -ad:switch procName arguments body + % nx::Object info method syntax ::nsf::proc + /cls/ proc ?-ad? /procName/ /arguments/ /body/ + % nx::Object info method definition ::nsf::proc + Warning: Could not obtain alias definition for proc... + + which return only patially correct results (the first is correct, + the second one is misleading, the error message can be improved + for the third case. + + maybe + ::nsf::info command parameters|syntax /cmd/ + might make sense, but there might be more candidates + for nsf::info around. OTOH, we have already + nsf::object::exists, nsf::is, etc. + + * generalizing parameter-specific per-object info + Now we have + __initcmd(varname) for init-cmds of varitable traces + __cmd(varname) for the eval-ed cmds (mostly + for documentation purposes + to postprocess the init block + We could need + __required_satistfied(varname) to handle + required parameter aliases + As generalization, we could use a dict + __parameterstate(varname) + or even + __parameterstate + with a dict to collect the various aspects. + for performance reasons, we do not want to set this + variable too frequent, serialization and blueprint + aspects have to be considered. This would as well + address cases, where the parameter has a different name + than the associated varianle (e.g. private properties) + + * Currently, in NX, specifying mandatory parameters may break + object construction as init won't receive any arguments (no + residual args). We should provide a warning when a user + defines arguments for init (or provide some other syntactic sugar) + + * extend traits (object-specific traits, test cases, etc.) + + * add maybe "::nsf::object::property /obj/ volatile 0|1" to alter + volatile state. + + * Reduce / remove hard-code names. Right now, "method"/"alias"/ + "forward" is returend by "info definition" introspection. + This is not serious, since e.g. XOTcl handles this on the + script level by mapping these names to the XOTcl counterparts. + We could as well make this configurable via the object-system + parameters. + * Consider alternate method name/place for subcmds (and/or slots) on classes - currently, there are potential conflicts between slots and ensemble objects - provide a different place in the namesspaces could simplify this @@ -4696,6 +4960,12 @@ - Use parameter syntax in genTclAPI - better handling of "c1 cget -noinit" ? + * experimental features: + - document/extend/generalize/remove the experimental object properties + perobjectdispatch and keepcallerself + - behavior on keepcallerself on ordinary dispatches with implicit/explicit + receiver (currently the flag is ignored, the code just commented out) + * C-Code * Several of the tracing options in nsf.h could be replaced by DTrace * Rework implict namespace completion (NameInNamespaceObj(),