Index: TODO =================================================================== diff -u -r745cfb76b7b0dd189c8b6d71263dd066d4331a11 -rde5093e2960746e5727c31f6ef370f6389dbb51a --- TODO (.../TODO) (revision 745cfb76b7b0dd189c8b6d71263dd066d4331a11) +++ TODO (.../TODO) (revision de5093e2960746e5727c31f6ef370f6389dbb51a) @@ -3721,6 +3721,11 @@ - adding method epoch incr to NsfAddObjectMethod() and NsfAddClassMethod() - added function CmdListAddSorted() to improve mixinof management +serializer.tcl: +- Use directdispatch to query existing traces without the need + of an extra method. By this change, the serializer works in + constant time independent on the number of existing objects. + ======================================================================== TODO: @@ -3967,9 +3972,16 @@ For future releases (after first alpha/beta release) * Consider alternate method name/place for subcmds (and/or slots) on classes - - currently, there are potentail conflicts between slots and ensemble objects + - currently, there are potential conflicts between slots and ensemble objects - provide a different place in the namesspaces could simplify this + * The speed of method definiton depends on the number of objects, + since every defined method might be a filter, so FilterInvalidateObjOrders() + is called on each filter. It would be useful to keep a list of currently + defined filter names to perform the invalidation only when a method is defined + with the same name as the currently registered filter (that should be always + a small number). + * Ensembles - It could be possible to reduce stack frames in ensembles. Just a top ensemble frame could be sufficient. Index: library/serialize/serializer.tcl =================================================================== diff -u -rc4997e0189bb712287aa53d12bb3e332acfb781d -rde5093e2960746e5727c31f6ef370f6389dbb51a --- library/serialize/serializer.tcl (.../serializer.tcl) (revision c4997e0189bb712287aa53d12bb3e332acfb781d) +++ library/serialize/serializer.tcl (.../serializer.tcl) (revision de5093e2960746e5727c31f6ef370f6389dbb51a) @@ -237,12 +237,6 @@ :public method serialize-objects {list all} { set :post_cmds "" - # register for introspection purposes "trace" under a different - # name for every object system - foreach oss [ObjectSystemSerializer info instances] { - $oss registerTrace 1 - } - :topoSort $list $all #foreach i [lsort [array names :level]] { :warn "$i: [set :level($i)]"} set result "" @@ -258,10 +252,6 @@ set namespace($e) 1 set namespace([namespace qualifiers $e]) 1 } - # remove "trace" from all object systems - foreach oss [ObjectSystemSerializer info instances] { - $oss registerTrace 0 - } # Handling of variable traces: traces might require a # different topological sort, which is hard to handle. @@ -510,14 +500,6 @@ return $cmd } - :public method registerTrace {on} { - if {$on} { - ::nsf::method::alias ${:rootClass} __trace__ -frame object ::trace - } else { - ::nsf::method::create ${:rootClass} __trace__ {} {} - } - } - # # Handle association between objects and responsible serializers # @@ -645,7 +627,10 @@ :method collect-var-traces {o s} { foreach v [$o info vars] { - set t [$o __trace__ info variable $v] + # Use directdispatch to query existing traces without the need + # of an extra method. + set t [::nsf::directdispatch $o -frame object ::trace info variable $v] + if {$t ne ""} { foreach ops $t { foreach {op cmd} $ops break