Table of Contents

The Syndicated Actor Model (SAM)

This information is provided by someone familiar with SAM but little knowledge of Folk. Some claims about Folk may be regrettably inaccurate.

The Syndicated Actor Model (SAM) is a system for working with software actors that is convergent with Folk.

SAM is not a single program or library but a data language and protocols with a set of implementations for different languages. There is a common set of features with each language as varying in how much of the feature set is supported. Implementations with a simple feature set use the Syndicate protocol to communicate with actors in other languages that provided missing functionality.

Similarities

Universe of knowledge

Folk has a database of statements and SAM dataspaces of asserted facts.

Tcl

Folk is primarily written in Tcl and SAM has a basic Tcl implementation.

Reactive paradigm

Both use a reactive programing paradigm:

# Folk
When $program has resolved geometry /geom/ {
    Claim $editor has resolved geometry $geom
}
# Syndicate for Tcl

## Folk style
during "[$program has resolved geometry @geom #?]" {
  assert [list $editor has resolved geometry $geom]
}

 
## Native style
during "<resolved-geometry $program @geom #?>" {
  assert [preserves::record resolved-geometry $editor $geom]
}

Differences

Composition

Folk is composed as a Tcl program. SAM is a composition of actors conversing using the Syndicate protocol.

Data

Folk uses statements built from tokens. SAM uses the Preserves data language and relies on compound values such as lists, records (<some-label some fields ...>), dictionaries, and sets.

Tokens

SAM has distinct text-string, byte-string, and symbol data types, which is a pain to deal with in Tcl. Folk uses Tcl values.

What Folk has got

What Syndicate has got

Dataspaces

Dataspaces3) are a special SAM entities that hold Syndicate assertions of facts for observation by other actors. A program may have any number of internal dataspaces for holding facts. SAM implementations like Sycl do not support local dataspaces but do access dataspaces hosted by other programs.

Folk databases use a trie whereas SAM dataspaces use what is described as a skeleton4).

Further reading