Index: TODO
===================================================================
diff -u -r264ccfcb835fd341d4fcb5e126d5305e073de0fc -r3d40cb4ba41cd488a5095695d7dcd8a6bd69efa9
--- TODO (.../TODO) (revision 264ccfcb835fd341d4fcb5e126d5305e073de0fc)
+++ TODO (.../TODO) (revision 3d40cb4ba41cd488a5095695d7dcd8a6bd69efa9)
@@ -1980,14 +1980,16 @@
{1} Class ::State
{2} Class ::State -parameter x
+- Converted migration guide to asciidoc
+- Overhaul of serveral sections in asciidoc
+- Developed styles for nx for migration guide (.css and source-highlight)
-
TODO:
- "-returns"
* handle "-returns" in serializer
-- change allowempty to "orempty" or "empty"
+- change allowempty to "empty"
- extend coro regression test
Index: doc/next-migration.html
===================================================================
diff -u -raeed267ba4a296c7ec7808ed0b574cc76aecd35f -r3d40cb4ba41cd488a5095695d7dcd8a6bd69efa9
--- doc/next-migration.html (.../next-migration.html) (revision aeed267ba4a296c7ec7808ed0b574cc76aecd35f)
+++ doc/next-migration.html (.../next-migration.html) (revision 3d40cb4ba41cd488a5095695d7dcd8a6bd69efa9)
@@ -1,1484 +1,3695 @@
-
-
-
-Migration Guide from XOTcl to the Next Scripting Language
-
-
-
-
-Migration Guide for the the Next Scripting Language
-
-... general text, maybe partly from slides/paper ....
-TODO: Maybe we should not refer to ::nsf here and import instead
-the "needed" commands into ::nx namespace.
-
In general, the Next Scripting Language differs from XOTcl in the following
-respects:
-
-
-
- - The Next Scripting Language favors a stronger form of
- encapsulation than XOTcl. Calling the own methods or accessing the
- own instance variables is typographically easier and computationally
- faster than these operations on other objects. This behavior is
- achieved via resolvers an makes the definition of methods necessary
- in XOTcl obsolete. On the other hand, XOTcl is complete symmetrical
- in this respect.
-
-
The encapsulation of Next Scripting is weak; a programmer can still
- access e.g. other variables via some idioms, but this makes these
- accesses implicit and is more typing effort. Through the weak
- encapsulation a programmer should be encouraged to implement
- methods to provide access to instance variables.
-
-
- The Next Scripting Language provides means of method
- protection.
-
-
- The Next Scripting Language provides scripted init blocks for
- objects and classes (replacement for the somewhat dangerous dash "-"
- mechanism in XOTcl that allows to set
- variables and invoke methods upon object creation).
-
-
- The Next Scripting Language provides much more orthogonal means
- to define and reuse scripted and C-implemented methods.
-
-
- The Next Scripting Language provides an orthogonal framework for
- parametrization of methods and objects.
-
-
- The Next Scripting Language has a much smaller
- interface (less predefined methods) than XOTcl:
-
- nx:
-
- # obj_methods: 20
-
- # class_methods: 7
-
- # obj_info_methods: 14
-
- # class_info_methods: 6
-
-
- XOTcl 2.0:
-
- - # obj_methods: 52
-
- # class_methods: 24
-
- # obj_info_methods: 25
-
- # class_info_methods: 24
-
-
-
-
-
-
-Below is a small, introductory example showing an implementation of
-a stack in nx and XOTcl.
-
-
-Class create Stack {
-
- :method init {} {
- set :things ""
- }
-
- :public method push {thing} {
- set :things [linsert ${:things} 0 $thing]
- return $thing
- }
-
- :public method pop {} {
- set top [lindex ${:things} 0]
- set :things [lrange ${:things} 1 end]
- return $top
- }
-}
-
-Figure 1: Stack example in the Next Scripting Language
-
-
-
-Class Stack
-
-Stack instproc init {} {
- my instvar things
- set things ""
-}
-
-Stack instproc push {thing} {
- my instvar things
- set things [linsert $things 0 $thing]
- return $thing
-}
-
-Stack instproc pop {} {
- my instvar things
- set top [lindex $things 0]
- set things [lrange $things 1 end]
- return $top
-}
-
-Figure 2: Stack example in XOTcl
-
-Using XOTcl 2.0 and the Next Scripting Language in the Next
-Scripting Framework in a Single Interpreter
-
- In general, the Next Scripting Framework supports multiple object
-systems concurrently. Effectively, every object system has different
-base classes for creating objects and classes. Therefore, these object
-systems can have different different interfaces and names of built-in
-methods. Currently, the Next Scripting Framework supports primarily
-XOTcl 2.0 (highly compatible with XOTcl 1.*) and the Next Scripting
-Language (XOTcl provides about twice as many predefined built-in
-methods compared to the Next Scripting Language).
-
- A single Tcl interpreter can host both, XOTcl and the Next
-Scripting Language at the same time. This makes migration
-from XOTcl to Next easier. The following example script shows to use
-in a single script XOTcl and Next:
-
-
-
- namespace eval mypackage {
-
- package require XOTcl 2.0
-
- # Import XOTcl into the current namespace
- namespace import -force ::xotcl::*
-
- # Define a class using XOTcl
- Class C1
- C1 instproc foo {} {puts "hello world"}
-
- # Import Next into the current namespace
- namespace import -force ::nx::*
-
- # Define a class using Next
- Class create C2 {
- :public method foo {} {puts "hello world"}
- }
- }
-
-
- "Switching" between XOTcl and Next effectively means the load some
-packages (if needed) and to import either the base classes
-(Object
and Class
) of XOTcl or Next
-into the current namespace.
-
-XOTcl Idioms in the Next Scripting Language
-
-Defining Objects and Classes
-
- XOTcl | Next Scripting Language |
-
- Class ClassName |
- Class create ClassName |
-
-
- Object ObjectName |
- Object create ObjectName |
-
-
- ::xotcl::Class ClassName |
- ::nx::Class create ClassName |
-
-
- ::xotcl::Object ObjectName |
- ::nx::Object create ObjectName |
-
-
-
-Defining Methods
-
-Scripted Methods Defined in the Init-block of a Class/Object or with
-Separate Calls
-
-
- XOTcl | Next Scripting Language |
-
- Class C
- C instproc foo args {...}
- C proc bar args {...}
- |
-
-
- Class create C {
- :method foo args {...}
- :class-object method bar args {...}
- }
-
- Class create C
- C method foo args {...}
- C class-object method bar args {...}
- |
-
-
- Object o
- o set x 1
- o proc foo args {...}
- |
-
-
- Object create o {
- set :x 1
- :method foo args {...}
- }
-
- Object create o
- o eval {set :x 1}
- o method foo args {...}
- |
-
-
-
- Define Different Kinds of Methods
-
- XOTcl | Next Scripting Language |
-
-
-
-
- |
-
-
- |
-
-
-
-
- Class C
- C instproc foo args {...}
- C proc bar args {...}
- Object o
- o proc baz args {...}
-
- |
-
-
- Class create C {
- :method foo args {...}
- :class-object method bar args {...}
- }
- Object create o {
- :method baz args {...}
- }
- |
-
-
-
-
- Class C
- C instforward f1 ...
- C forward f2 ...
- Object o
- o forward f3 ...
-
- |
-
-
- Class create C {
- :forward f1 ...
- :class-object forward f2 ...
- }
- Object create o {
- :forward f3 ...
- }
- |
-
-
-
-
- Class C
- C instparametercmd p1
- C parametercmd p2
- Object o
- o parametercmd p3
-
- |
-
-
- Class create C {
- :setter p1 ?value_constraint?
- :class-object setter p2 ?value_constraint?
- }
- Object create o {
- :setter p3 ?value_constraint?
- }
- |
-
-
-
-
-
- |
-
-
- Class create C {
- :alias a1 ...
- :class-object alias a2 ...
- }
- Object create o {
- :alias a3 ...
- }
- |
-
-
-
-
-
- Class C \ -parameter {
- x
- {y 1}
- }
-
- |
-
-
- Class create C {
- :attribute x
- :attribute {y 1}
- :class-object attribute oa1
- }
- Object create o {
- :attribute oa2
- }
-
- Class create C \ -attributes {
- x
- {y 1}
- }
- |
-
-
-
-Method Modifiers and Method Protection
-
-
- XOTcl | Next Scripting Language |
-
-
-
- |
-
-
- Class create C {
- :method-definiton-method ...
- :public method-definiton-method ...
- :protected method-definiton-method ...
- :class-object method-definiton-method ...
- :protected class-object method-definiton-method ...
- :public class-object method-definiton-method ...
- }
- |
-
-
-
-The next scripting language allows to configure the default call
-protection in various ways. The command ::nx::configure
-defaultMethodCallProtection true|false
can be used to set the
-default call protection for scripted methods, forwarder and aliases,
-while ::nx::configure defaultAttributeCallProtection
-true|false
can set the default for attributes and setters.
-
-
-
-Resolvers
-
-The Next Scripting Framework defines Tcl resolvers for method and
-variable names to refer to object specific behavior. Withing method
-bodies these resolver treat variable and function names starting with
-a colon ":" specially. In short, a colon-prefixed variable name refers
-to an instance variable, and a colon-prefixed function name refers to
-a method. The sub-sections below provide detailed examples.
-
-Note that the Next resolvers can be used in the XOTcl 2.* environment
-as well.
-
-
Invoking Methods
-
- XOTcl | Next Scripting Language |
-
- Class C
- C instproc foo args {...}
- C instproc bar args {
- my foo 1 2 3
- o baz
- }
- Object o
- o proc baz {} {...}
- |
- Class create C {
- :method foo args {...}
- :method bar args {
- :foo 1 2 3
- o baz
- }
- }
- Object create o {
- :method baz {} {...}
- }
- |
-
-
-
-
-Accessing Own Instance Variables from Method Bodies
-
-In general, the Next Scripting Language favors the access to an
-objects's own instance variables over variable accesses of other
-objects. On the contrary, in XOTcl, the variable access to own and
-other variables are completely symmetric.
-
-
In Next Scripting, access to local variables are performed via
-primarily via name resolvers, but using the standard tcl commands
-(like e.g. set
, incr
, append
,
-info exists
, etc.). In XOTcl, it is common to provide
-same-named methods registered on ::xotcl::Object
for such
-purposes. This is one of the reasons, why the Next Scripting Language
-has a much smaller interface (less predefined methods). It is possible
-for an application program to register XOTcl-like methods in the Next
-Scripting Language via the primitives of the Next Scripting Framework.
-
-
-
- XOTcl | Next Scripting Language |
-
- Class C
- C instproc foo args {
-
- set a 1
-
- my instvar b
- set b 2
-
- set ::c 3
- }
- |
- Class create C {
- :method foo args {...}
-
- set a 1
-
- set :b 2
-
- set ::c 3
- }
- }
- |
-
-
-
- ... instproc ... {
- my set varname value
- }
- |
-
-
-
- ... method ... {
- set :newVar value
- }
-
- |
-
-
-
- ... instproc ... {
- my instvar newVar
- set newVar value
- }
- |
-
-
-
- ... method ... {
- ::nx::var import [self] varname
- set varname value
- }
- |
-
-
-
-
-
- ... instproc ... {
- set newVar [my set otherVar]
- }
- |
-
-
-
- ... method ... {
- set newVar [set :otherVar]
- }
-
-
- ... method ... {
- set newVar ${:otherVar}
- }
-
- |
-
-
-
-
- ... instproc ... {
- my exists varname
- }
- |
-
-
-
- ... method ... {
- info :varname
- }
-
-
-
- ... method ... {
- ::nx::var exists [self] varname
- }
- |
-
-
-
-Accessing Instance Variables of other Objects
-
-
- XOTcl | Next Scripting Language |
-
- obj set varname value |
-
-
- obj eval [list set :varname value] |
-
-
- set newVar [obj set otherVar] |
-
-
- set newVar [obj eval {set :otherVar}]
- |
-
-
-
- ... instproc ... {
- obj instvar newVar
- set newVar value
- }
- |
-
-
-
- ... method ... {
- ::nx::var import obj newVar
- set newVar value
- }
- |
-
-
- obj exists varname |
-
-
- obj eval {info exists :varname}
-
- ::nx::var exists obj varname
- |
-
-
-
-
-Object Parameters/Attributes
-
-
- XOTcl | Next Scripting Language |
-
- Class Foo -parameter {a {b 1}}
-
- Foo f1 -a 0
-
-
- Class Foo -slots {
- Attribute a
- Attribute b -default 1
- }
-
-
- Foo f1 -a 0
-
-
- |
-
- Class create Foo -attributes {a {b 1}}
-
- Foo create f1 -a 0
-
-
- Class create Foo {
- :attribute a
- :attribute {b 1}
- }
-
- Foo create f1 -a 0
-
-
- |
-
-
-
-
- Class Person -slots {
- Attribute create sex -type "sex" {
- my proc type=sex {name value} {
- switch -glob $value {
- m* {return m}
- f* {return f}
- default {error "expected sex but got $value"}
- }
- }
- }
- }
-
- |
-
- Class create Person {
- :attribute sex {
- :type "sex"
- :method type=sex {name value} {
- switch -glob $value {
- m* {return m}
- f* {return f}
- default {error "expected sex but got $value"}
- }
- }
- }
- }
-
- |
-
-
-
-
-
- |
-
-
- Class create Foo -attributes {
- a:boolean
- {b:integer 1}
- }
-
- Class create Foo {
- :attribute a:boolean
- :attribute {b:integer 1}
- }
-
- |
-
-
-
-
- |
-
-
- Class create Foo -attributes {
- a:boolean,required
- {b:integer 1}
- }
-
- Class create Foo {
- :attribute a:boolean,required
- :attribute {b:integer 1}
- }
-
- |
-
-
-
-
- |
-
-
- Class create Foo -attributes {
- ...
- ints:integer,multivalued
- {objs:object,multivalued ""}
- }
-
- Class create Foo {
- ...
- :attribute ints:integer,multivalued
- :attribute {objs:object,multivalued ""}
- }
-
- |
-
-
-
-
-## allowempty
-
-Method Parameters
-
-Interceptors
-
-Register Mixin Classes and Mixin Guards
-
- XOTcl | Next Scripting Language |
-
- cls instmixin ...
- cls instmixinguard mixin condition
- |
-
-
- cls mixin ...
- cls mixin guard mixin condition
- |
-
-
-
- cls mixin ...
- cls mixin guard mixin condition
- |
-
-
- cls class-object mixin ...
- cls class-object mixin guard mixin condition
- |
-
-
-
- obj mixin ...
- obj mixinguard mixin condition
- |
-
-
- obj mixin ...
- obj mixin guard mixin condition
- |
-
-
-
-
-Register Filters and Filter Guards
-
- XOTcl | Next Scripting Language |
-
- cls instfilter ...
- cls instfilterguard filter condition
- |
-
-
- cls filter ...
- cls filter guard filter condition
- |
-
-
-
- cls filter ...
- cls filterguard ...
- |
-
-
- cls class-object filter ...
- cls class-object filter guard filter condition
- |
-
-
-
- obj filter ...
- obj filterguard filter condition
- |
-
-
- obj filter ...
- obj filter guard filter condition
- |
-
-
-
-
-
-Introspection
-
-List methods defined by objects
-
- XOTcl | Next Scripting Language |
-
- obj info commands ?pattern? |
- obj info methods ?pattern? |
-
-
- obj info parametercmd ?pattern? |
- obj info methods -methodtype setter ?pattern? |
-
-
- obj info procs ?pattern? |
- obj info methods -methodtype scripted ?pattern? |
-
-
- n.a. |
- obj info methods -methodtype alias ?pattern? |
-
-
- n.a. |
- obj info methods -methodtype forwarder ?pattern? |
-
-
- n.a. |
- obj info methods -methodtype object ?pattern? |
-
-
- n.a. |
- obj info methods -callprotection public|protected ... |
-
-
-List methods defined by classes
-
-
- cls info instcommands ?pattern? |
- cls info methods ?pattern? |
-
-
- cls info instparametercmd ?pattern? |
- cls info methods -methodtype setter ?pattern? |
-
-
- cls info instprocs ?pattern? |
- cls info methods -methodtype scripted ?pattern? |
-
-
- n.a. |
- cls info methods -methodtype alias ?pattern? |
-
-
- n.a. |
- cls info methods -methodtype forwarder ?pattern? |
-
-
- n.a. |
- cls info methods -methodtype object ?pattern? |
-
-
- n.a. |
- cls info methods -callprotection public|protected ... |
-
-
-
-List class object specific methods
-
-
- cls info commands ?pattern? |
- cls class-object info methods ?pattern? |
-
-
- cls info parametercmd ?pattern? |
- cls class-object info methods -methodtype setter ?pattern? |
-
-
- cls info procs ?pattern? |
- cls class-object info methods -methodtype scripted ?pattern? |
-
-
- n.a. |
- cls class-object info methods -methodtype alias ?pattern? |
-
-
- n.a. |
- cls class-object info methods -methodtype forwarder ?pattern? |
-
-
- n.a. |
- cls class-object info methods -methodtype object ?pattern? |
-
-
- n.a. |
- cls class-object info methods -callprotection public|protected ... |
-
-
-
-List callable methods
-
- XOTcl | Next Scripting Language |
-
- obj info methods ?pattern? |
- obj info lookup methods ... ?pattern?
-
- |
-
-
- n.a. |
-
- obj info lookup methods -source application ... ?pattern?
-
- |
-
-
-
-
- |
-
- |
-
-
-
- n.a. |
-
- obj info lookup slots
-
- |
-
-
-
-List object/class where some method is defined
-
-
- XOTcl | Next Scripting Language |
-
- obj procsearch methodName |
- obj info lookup method methodName
- |
-
-
- obj filtersearch methodName |
- obj info lookup filter methodName
- |
-
-
-
-List definition of scripted methods defined by classes
-
-
- XOTcl | Next Scripting Language |
-
- cls info instbody methodName |
- cls info method body methodName |
-
-
- cls info instargs methodName |
- cls info method args methodName |
-
-
- cls info instnonposargs methodName |
- cls info method parameter methodName |
-
-
- cls info instdefault methodName |
- cls info method parameter methodName |
-
-
- cls info instpre methodName |
- cls info method precondition methodName |
-
-
- cls info instpost methodName |
- cls info method postcondition methodName |
-
-
- n.a. |
- cls info method definition methodName |
-
-
-
-List definition of scripted object specific methods
-
-
- XOTcl | Next Scripting Language |
-
- obj info body methodName |
- obj info method body methodName |
-
-
- obj info args methodName |
- obj info method args methodName |
-
-
- obj info nonposargs methodName |
- obj info method parameter methodName |
-
-
- obj info default methodName |
- obj info method parameter methodName |
-
-
- obj info pre methodName |
- obj info method precondition methodName |
-
-
- obj info post methodName |
- obj info method postcondition methodName |
-
-
- n.a. |
- obj info method definition methodName |
-
-
-For definition of class object specific methods, use modifier
- object
as shown in examples above.
-
-
-List Filter or Mixins
-
- XOTcl | Next Scripting Language |
-
- obj info filter ?-guards? ?-order? ?pattern? |
-
- obj info filter methods ?-guards? ?-order? ?pattern? |
-
-
- obj info filterguard name |
- obj info filter guard name
- |
-
-
- cls info filter ?-guards? ?-order? ?pattern? |
- cls class-object info filter methods ?-guards? ?-order? ?pattern? |
-
-
-
- cls info filterguard name |
- cls class-object info filter guard name |
-
-
-
- cls info instfilter ?-guards? ?-order? ?pattern? |
- cls info filter methods ?-guards? ?-order? ?pattern? |
-
-
- cls info instfilterguard name |
- cls info filter guard name |
-
-
-
- obj info mixin ?-guards? ?-order? ?pattern? |
- obj info mixin classes ?-guards? ?-order? ?pattern? |
-
-
-
- obj info mixinguard name |
- obj info mixin guard name |
-
-
-
- cls info mixin ?-guards? ?-order? ?pattern? |
- cls class-object info mixin classes ?-guards? ?-order? ?pattern? |
-
-
-
- cls info mixinguard name |
- cls class-object info mixin guard name |
-
-
-
- cls info instmixin ?-guards? ?-order? ?pattern? |
- cls info mixin classes ?-guards? ?-order? ?pattern? |
-
-
-
- cls info instmixinguard name |
- cls info mixin guard name |
-
-
-
-List definition of methods defined by aliases, setters or forwarders
-
- XOTcl | Next Scripting Language |
-
- n.a. |
- obj info method definition methodName |
-
-
- n.a. |
- cls info method definition methodName |
-
-
-
-List fully qualified name of method
-
- XOTcl | Next Scripting Language |
-
- n.a. |
- obj info method handle methodName |
-
-
- n.a. |
- cls ?object? info method handle methodName |
-
-
-
-List type of a method
-
- XOTcl | Next Scripting Language |
-
- n.a. |
- obj info method type methodName |
-
-
- n.a. |
- cls ?object? info method type methodName |
-
-
-
-List the scope of mixin classes
-
- XOTcl | Next Scripting Language |
-
- cls info mixinof ?-closure? ?pattern? |
-
-
- cls info mixinof -scope object ?-closure?
- ?pattern?
- |
-
-
- cls info instmixinof ?-closure? ?pattern? |
-
-
- cls info mixinof -scope class ?-closure?
- ?pattern?
- |
-
-
- n.a. |
-
-
- cls info mixinof -scope all ?-closure?
- ?pattern?
-
- cls info mixinof ?-closure? ?pattern?
- |
-
-
-
-Check properties of object and classes
-
-
- XOTcl | Next Scripting Language |
-
- obj istype sometype |
-
- obj info has type sometype
- |
-
-
- obj ismixin cls |
-
- obj info has mixin cls
- |
-
-
- obj isclass ?cls? |
-
- obj info is class
- |
-
-
- obj ismetaclass cls |
-
- obj info is metaclass
- |
-
-
- n.a. |
-
- obj info is baseclass
- |
-
-
- obj isobject obj2 |
- ::nsf::isobject obj
- |
-
-
-
-Callstack Introspection
-
-
- XOTcl | Next Scripting Language |
-
- self |
- current
-
- current object
- |
-
-
- self class |
- current class |
-
-
- self proc |
- current method |
-
-
- self callingclass |
- current currentclass |
-
-
- self callingobject |
- current callingobject |
-
-
- self callingproc |
- current callingmethod |
-
-
- self calledclass |
- current calledclass |
-
-
- self calledproc |
- current calledmethod |
-
-
- self isnextcall |
- current isnextcall |
-
-
- self next |
-
- current next |
-
-
- self filterreg |
-
- current filterreg |
-
-
-
- self callinglevel |
- current callinglevel |
-
-
- self activelevel |
- current activelevel |
-
-
-
-
-Other Predefined Methods
-
-
-
- XOTcl | Next Scripting Language |
-
- obj requireNamespace |
- obj require namespace |
-
-
-
-
-
-Dispatch, Aliases, etc.
-Assertions
-
-
- XOTcl | Next Scripting Language |
-
- obj check checkoptions |
- ::nsf::assertion obj check checkptions |
-
-
- obj info check |
- ::nsf::assertion obj check |
-
-
-
- obj invar conditions |
- ::nsf::assertion obj object-invar conditions |
-
-
- obj info invar |
- ::nsf::assertion obj object-invar |
-
-
-
- cls instinvar conditions |
- ::nsf::assertion cls class-invar conditions |
-
-
- cls info instinvar |
- ::nsf::assertion cls class-invar |
-
-
-
- cls invar conditions |
- ::nsf::assertion cls object-invar conditions |
-
-
- cls info invar |
- ::nsf::assertion cls object-invar |
-
-
-
-Method Protection
-
-
-
-
-Resolvers
-
-The resolvers (variable resolvers, function resolvers) of the Next
-Scripting Framework are used as well within XOTcl 2.0. When variable names
-or method names starting with a single colon are used in XOTcl 1.* scripts, conflicts
-will arise with the resolver. These names must be replaced.
-
-Calling objects via method interface
-
-Since the next framework supports the so-called ensemble objects,
-which ease the definition of submethods substantially, objects
-registered as methods have different semantics. In XOTcl 1.*, it was
-possible to call e.g. a method foo
of the slot object
-Foo::slot::ints
via the following two interfaces the same way:
-
- Foo::slot::ints foo ...
- Foo slot ints foo ...
-
-Now, only the first form has the same semantic as before. In the second
-form (invocation of objects via method interface) has now the ensemble object
-semantics. This means that in the second case the current
-obect
of method foo
is now Foo
-instead of ints
.
-
-
-Slots
-
-All slot objects (also XOTcl slot objects) are now next-scripting
-objects of baseclass ::nx::Slot
. The name of the
-experimental default-setter initcmd
was changed to
-defaultcmd
. Code directly working on the slots objects
-has to be adapted.
-
-Obsolete commands
-
-Parameter-classes were rarely used and have been replaced by the more
-general object parameterization. Therefore, cl info
-parameterclass
has been removed.
-
-
Stronger Checking
-
-The Next Scripting Framework performs stronger checking than XOTcl
-1.*. For example, the requiredness of slots in XOTcl 1.* was just a
-comment, while XOTcl 2.* enforces it.
-
-Exit Handlers
-
-The exit hander interface changed from a method of
-::xotcl::Object
into the tcl command ::nsf::exithandler
:
-
- ::nsf::exithandler set|get|unset ?arg?
-
-
-
-
-
- Last modified: Fri Nov 26 18:45:03 CET 2010
-
-
+
+
+
+
+
+Migration Guide for the the Next Scripting Language
+
+
+
+
+
+
+
+
+
1. Differences Between XOTcl and NX
+
+
In general, the Next Scripting Language (NX) differs from XOTcl in
+the following respects:
+
+-
+
+The Next Scripting Language favors a stronger form of encapsulation
+ than XOTcl. Calling the own methods or accessing the
+ own instance variables is typographically easier and
+ computationally faster than these operations on other objects. This
+ behavior is achieved via resolvers an makes the definition of
+ methods necessary in XOTcl obsolete. On the other hand, XOTcl is
+ complete symmetrical in this respect.
+
+
+-
+
+The encapsulation of Next Scripting is still weak compared to
+ languages like C++; a developer can still access e.g. other
+ variables via some idioms, but this makes accesses to other
+ objects variables explicit and requires more typing
+ effort. Through the weak encapsulation a programmer should be
+ encouraged to implement methods to provide access to instance
+ variables.
+
+
+-
+
+The Next Scripting Language provides means of method protection.
+
+
+-
+
+The Next Scripting Language provides scripted init blocks for
+ objects and classes (replacement for the somewhat dangerous dash "-"
+ mechanism in XOTcl that allows to set variables and invoke methods
+ upon object creation).
+
+
+-
+
+The Next Scripting Language provides much more orthogonal means to
+ define, reuse and introspect scripted and C-implemented methods.
+
+
+-
+
+The Next Scripting Language provides an orthogonal framework for
+ parametrization of methods and objects. While XOTcl 1 provided only
+ value-checkers for non-positional arguments for methods, the Next Scripting
+ Framework provides the same value checkers for positional argument
+ of methods, as well as for object parameters (-parameter in XOTcl 1).
+
+
+-
+
+The Next Scripting Language has a much smaller interface (less
+ predefined methods) than XOTcl:
+
+
+-
+
+NX:
+
+
+
+
+Methods for Objects:
+
+ |
+
+
+20
+
+ |
+
+
+
+Methods for Classes:
+
+ |
+
+
+7
+
+ |
+
+
+
+Info methods for Objects:
+
+ |
+
+
+14
+
+ |
+
+
+
+Info method for Classes:
+
+ |
+
+
+6
+
+ |
+
+
+
+-
+
+XOTcl:
+
+
+
+
+Methods for Objects:
+
+ |
+
+
+52
+
+ |
+
+
+
+Methods for Classes:
+
+ |
+
+
+24
+
+ |
+
+
+
+Info methods for Objects:
+
+ |
+
+
+25
+
+ |
+
+
+
+Info method for Classes:
+
+ |
+
+
+24
+
+ |
+
+
+
+
+
+
+
Below is a small, introductory example showing an implementation of a stack in NX and XOTcl.
+
+
+
+
+
+
+Stack example in NX |
+Stack example in XOTcl |
+
+
+
+
+
+
+ Class create Stack {
+
+ #
+ # Stack of Things
+ #
+
+ :method init {} {
+ set :things ""
+ }
+
+ :public method push {thing} {
+ set :things [linsert ${:things} 0 $thing]
+ return $thing
+ }
+
+ :public method pop {} {
+ set top [lindex ${:things} 0]
+ set :things [lrange ${:things} 1 end]
+ return $top
+ }
+} |
+
+
+ #
+# Stack of Things
+#
+
+Class Stack
+
+Stack instproc init {} {
+ my instvar things
+ set things ""
+}
+
+Stack instproc push {thing} {
+ my instvar things
+ set things [linsert $things 0 $thing]
+ return $thing
+}
+
+Stack instproc pop {} {
+ my instvar things
+ set top [lindex $things 0]
+ set things [lrange $things 1 end] |