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.
Folk has a database of statements and SAM dataspaces of asserted facts.
Folk is primarily written in Tcl and SAM has a basic Tcl implementation.
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] }
Folk is composed as a Tcl program. SAM is a composition of actors conversing using the Syndicate protocol.
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.
SAM has distinct text-string, byte-string, and symbol data types, which is a pain to deal with in Tcl. Folk uses Tcl values.
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).