User Tools

Site Tools


notes:sycl

This is an old revision of the document!


Sycl

Sycl is the Tcl implementation of the Syndicated Actor Model.

Sycl is comprised of the preserves and syndicate libraries.

Preserves

A Tcl interpreter extension1) implemented in Nim. Preserves2) is the data language used by Syndicate. Preserves can be written in text syntax, which the interpreter extension can parse automatically from Tcl strings. Preserves also has a binary syntax, which the Syndicate library uses for communicating over a network.

Preserves text syntax is a superset of JSON, so the library also acts as a JSON parser. The library can render to JSON as well, but some type conversions are made.

package require preserves
 
set pr [preserves parse {{foo: 0 bar: 1}}]
# {bar: 1 foo: 0}
 
preserves render $pr
# {bar: 1 foo: 0}
 
preserves render -json $pr
# {"bar":1,"foo":0}

Syndicate

The Syndicate library3) is almost pure Tcl and makes heavy use of namespaces.

The library supports a SAM facet4) tree using nested namespaces. The during proc (equivalent to When) executes its handle script in a new namespace on every match, and when the during statement expires the dataspaces are destroyed automatically.

Relaying

The library does not implement dataspaces. It can however communicate with external dataspaces provided by syndicate-server from the Rust implementation5).

package require syndicate
 
set route {<route [<tcp "localhost" 4567>]>}
 
syndicate::spawn exampleActor {
 
    connect $route remoteDataspace {
        setDefaultTarget $remoteDataspace
 
        assert [list hello world]
 
        during "[weather is @weather #?]" {
            puts "Weather at $::route is $weather."
        } 
    }
}
 
vwait ${exampleActor}::stopped

Patterns

Patterns for matching SAM assertions are written as strings. The pattern @z #([@x #? #_ @y #?]) would match against [foo baz bar] and could trigger a handler bindings equivalent to:

set x foo
set y bar
set z [list foo bar baz]

Availability

Sycl is only known to have been built with the Nix package manager, but Nix can work on practically any Linux distro. Sycl is compatible with Tcl 8 & 9.

Example programs

notes/sycl.1789474971.txt.gz · Last modified: by emery

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki