,---.| | `---.|--- ,---.,---.,---.,---| || | ,---|| || | `---'`---'` `---^` '`---' "Strand" is an open-source implementation of the identically named parallel Prolog dialect as described in the book "Strand: New Concepts for Parallel Programming" by Ian Foster and Stephen Taylor. Strand represents a very elegant and concise notation for expressing concurrent and distributed algorithms using very few fundamental language constructs. This implementation of Strand is written in Forth and runs on Linux x86-64/ARM, Mac OS X x86-64 and OpenBSD amd64 systems, has no dependencies and is entirely self-contained. "Strand" is a trademark of Artificial Intelligence Ltd., which once offered a commercial implementation. Version: 3 Read the User's Manual
Get the code
Tools and examples
The latter archive contains an rc(1) script for simplifying Strand projects that use multiple nodes on one or more machines. The particular version of rc(1) used is this one: rc(1)
Release History: Version 1: Initial release Version 2: * Language changes: - Double-quoted strings can now be used as a more convenient syntax for lists of character codes. - "command_line/1" now includes the program name as the first element in the returned list. - Added primitive processes "get_global/2", "put_global/2" and "chdir/1". * Runtime system changes: - On x86_64, the Forth engine is now significantly faster due to inlining of the inner interpreter in the assembly language kernel. - Signal handling has been implemented for Darwin, and a bug in the Mach-O binary generation been fixed. Also, the interface to the "pipe(2)" system call is working now (Many thanks to Jorge Acereda Maciá!) * Library changes: - Added "list:append/2", "list:split/4", "list:trim/3", "list:trim_left/3" and "list:trim_right/3". - "proc:execute/3" accidentally left file-descriptors open in the parent process. - "proc:execute/3" now properly searches PATH for locating the program invoked in the subprocess. - Added "proc:capture/3". - Added the "~s" (char-list) format specifier in "fmt:format/*" - "io:read_byte_stream/2" and "io:read_char_stream/2" do not close the input stream at end of input. * Tool changes: - Fixed incorrect passing of debug-options to remote process-invocations using the "strand" tool in strand-utils.