From dbf7b6d23f11b2ca0b099e4034b8024c0a5ffdbf Mon Sep 17 00:00:00 2001 From: hoijui Date: Fri, 22 Mar 2019 22:06:26 +0100 Subject: [PATCH 01/18] latest as of 20 Apr 2019, hoijui/master, 00cea3b --- generate.sh | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100755 generate.sh diff --git a/generate.sh b/generate.sh new file mode 100755 index 0000000..73ccd83 --- /dev/null +++ b/generate.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# *nix script to generate the HTML handbook +# from the sources in "github.com/gocircuit/escher/src/handbook". + +escher -src "$GOPATH/src/github.com/gocircuit/escher/src/" "*handbook.main" + From 2d5d611baee147d05a4cda200da6115c733a3c60 Mon Sep 17 00:00:00 2001 From: hoijui Date: Sat, 20 Apr 2019 20:24:20 +0200 Subject: [PATCH 02/18] latest as of 20 Apr 2019, hoijui/master, c5324c3 --- basis-escher.html | 14 +++++++------- basis-flow.html | 4 ++-- basis-os.html | 4 ++-- cmd.html | 2 +- debug.html | 26 +++++++++++++------------- install.html | 2 +- program.html | 2 +- syntax.html | 11 ++++++----- 8 files changed, 33 insertions(+), 32 deletions(-) diff --git a/basis-escher.html b/basis-escher.html index 65f1e23..50cd124 100644 --- a/basis-escher.html +++ b/basis-escher.html @@ -20,20 +20,20 @@

Escher faculty

Index reflex

Every running Escher circuit program has been materialized relative to an index. -The index reflex, escher.Index, is a noun reflex that emits the index relative to which +The index reflex, e.Index, is a noun reflex that emits the index relative to which the current circuit has been materialized.

The following program, for instance, will print out the index used to materialize the invoking circuit program:

 {
-	*Show = *escher.Index
+	*Show = *e.Index
 }
 

Materialize reflex

-

The materialize reflex, named escher.Materialize, +

The materialize reflex, named e.Materialize, materializes a program circuit relative to an index of faculties.

The reflex requires that two valves, :View and :Residue, be connected. @@ -49,14 +49,14 @@

Materialize reflex

 {
-	m *escher.Materialize
-	f *Fork
+	m *e.Materialize
+	f *e.Fork
 
 	m:View = f:
 	f:Program = {
 		*Show = "Hello from the child circuit program."
 	}
-	f:Index = *escher.Index
+	f:Index = *e.Index
 	m:Residue = *Show
 }
 
@@ -70,7 +70,7 @@

Materialize reflex

using the same index that was used to materialize the parent program, as acquired from -the *escher.Index reflex in the parent program. +the *e.Index reflex in the parent program. diff --git a/basis-flow.html b/basis-flow.html index e887d30..6f1de1e 100644 --- a/basis-flow.html +++ b/basis-flow.html @@ -72,7 +72,7 @@

Split direction

 {
-	f *Fork
+	f *e.Fork
 	f: = {
 		x "Hello"
 		y "World"
@@ -102,7 +102,7 @@ 

Merge direction

 {
-	f *Fork
+	f *e.Fork
 	f: = *Show
 	f:x = "New"
 	f:y = "York"
diff --git a/basis-os.html b/basis-os.html
index 891f7b2..94ff147 100644
--- a/basis-os.html
+++ b/basis-os.html
@@ -80,14 +80,14 @@ 

Process execution reflex

Args { "/" } } - yio *Fork + yio *e.Fork proc:IO = yio: yio:Stdin = *Ignore yio:Stdout = *os.Stdout yio:Stderr = *os.Stderr - yexit *Fork + yexit *e.Fork proc:Exit = yexit: exit *os.Exit diff --git a/cmd.html b/cmd.html index 7c64953..1d711f4 100644 --- a/cmd.html +++ b/cmd.html @@ -48,7 +48,7 @@

Command-line and runtime

The following command, for instance, will generate the contents of this handbook and place it in the current working directory where it is invoked:

-escher -src github.com/gocircuit/escher/src *handbook.main
+escher -src "$GOPATH/src/github.com/gocircuit/escher/src/" "*handbook.main"
 

The -src can be omitted in favor of setting the ESCHER environment variable. diff --git a/debug.html b/debug.html index ff7d9df..c78f68a 100644 --- a/debug.html +++ b/debug.html @@ -40,11 +40,11 @@

Panic traces

{ *Show = "Parent circuit" - m *escher.QuickMaterialize + m *e.QuickMaterialize m:Residue = *Ignore - m:Index = *escher.Index + m:Index = *e.Index m:Program = { - *escher.Breakpoint = 1 + *e.Breakpoint = 1 } }
@@ -56,36 +56,36 @@

Panic traces

 BASIS(:)
-DIRECTIVE(:) *escher.Breakpoint/*escher.Breakpoint
+DIRECTIVE(:) *e.Breakpoint/*e.Breakpoint
 CIRCUIT() {
-        0 *escher.Breakpoint
+        0 *e.Breakpoint
         1 1
         0: = 1:
 }
 MATERIALIZE() {
-        0 *escher.Breakpoint
+        0 *e.Breakpoint
         1 1
         0: = 1:
 }
 BASIS(:Residue :View)
-DIRECTIVE(:Residue :View) *escher.Materialize/*escher.Materialize
+DIRECTIVE(:Residue :View) *e.Materialize/*e.Materialize
 CIRCUIT(:Index :Program :Residue) {
-        x *escher.Materialize
-        y *Fork
+        x *e.Materialize
+        y *e.Fork
         :Residue = x:Residue
         :Index = y:Index
         :Program = y:Program
         x:View = y:
 }
-DIRECTIVE(:Index :Program :Residue) *escher.QuickMaterialize/*escher.QuickMaterialize
+DIRECTIVE(:Index :Program :Residue) *e.QuickMaterialize/*e.QuickMaterialize
 CIRCUIT() {
-        m *escher.QuickMaterialize
+        m *e.QuickMaterialize
         0 *Show
         1 "Parent circuit"
         2 *Ignore
-        3 *escher.Index
+        3 *e.Index
         4 {
-                0 *escher.Breakpoint
+                0 *e.Breakpoint
                 1 1
                 0: = 1:
         }
diff --git a/install.html b/install.html
index f723deb..0777061 100644
--- a/install.html
+++ b/install.html
@@ -24,7 +24,7 @@ 

Bulding and installing Escher

To check that installation succeeded, run

-	% ESCHER=github.com/gocircuit/escher/src escher test.All
+	% ESCHER=github.com/gocircuit/escher/src escher "*test.All"
 	+ Test basic.TestFork (ok)
 	+ Test basic.TestFunc (ok)
 	+ Test text.TestForm (ok)
diff --git a/program.html b/program.html
index 539a876..1336170 100644
--- a/program.html
+++ b/program.html
@@ -261,7 +261,7 @@ 

Materializing from Go

Materializing from Escher

One can recursively materialize circuits programs from within other -circuit programs. This is accomplished using the built-in reflex escher.Materialize +circuit programs. This is accomplished using the built-in reflex e.Materialize which is described in the materialization faculty section.

Materializing from POSIX

diff --git a/syntax.html b/syntax.html index fdf0ab9..e349ea0 100644 --- a/syntax.html +++ b/syntax.html @@ -96,26 +96,27 @@

Go interface

Using the Escher parser is very simple, in three steps:

    -
  • Import the parsing package "github.com/gocircuit/escher/see"
  • +
  • Import the parsing packages "github.com/gocircuit/escher/a" and "github.com/gocircuit/escher/see"
  • Create a parsing object for your source string
  • Repeatedly parse one circuit definition at a time
-

The following example illustrates this: +

The following Go example illustrates this:

 package main
 
 import (
 	"fmt"
+	"github.com/gocircuit/escher/a"
 	"github.com/gocircuit/escher/see"
 )
 
 func main() {
-	src = "alpha { a 123; b 3.14; a: = b:}\n beta { 1, 2, 3, \"abc\" }"
-	p := see.NewSrcString(src) // create a parsing object
+	src := "alpha { a 123; b 3.14; a: = b:}\n beta { 1, 2, 3, \"abc\" }"
+	p := a.NewSrcString(src) // create a parsing object
 	for {
-		n, v := see.See(p) // parse one circuit at a time
+		n, v := see.SeePeer(p) // parse one circuit at a time
 		if v == nil {
 			break
 		}

From a44a4d8b75d062c3b1054f782aae4e7b331a9f08 Mon Sep 17 00:00:00 2001
From: hoijui 
Date: Fri, 26 Apr 2019 22:05:23 +0200
Subject: [PATCH 03/18] generate.sh: also copy static resources from the
 handbook sources

---
 generate.sh | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/generate.sh b/generate.sh
index 73ccd83..2111c73 100755
--- a/generate.sh
+++ b/generate.sh
@@ -2,5 +2,13 @@
 # *nix script to generate the HTML handbook
 # from the sources in "github.com/gocircuit/escher/src/handbook".
 
-escher -src "$GOPATH/src/github.com/gocircuit/escher/src/" "*handbook.main"
+src_dir="$GOPATH/src/github.com/gocircuit/escher/src/"
+
+escher -src "$src_dir" "*handbook.main"
+
+cp -r "$src_dir/handbook/css" ./
+cp -r "$src_dir/handbook/img" ./
+cp -r "$src_dir/handbook/pdf" ./
+
+rm -f css/font/.gitignore
 

From b66aea6ec074d16ad97878068e58eaaae32646d3 Mon Sep 17 00:00:00 2001
From: hoijui 
Date: Fri, 26 Apr 2019 22:05:55 +0200
Subject: [PATCH 04/18] newer version of images

---
 img/expanded.png  | Bin 37638 -> 38001 bytes
 img/expanded.svg  |   2 +-
 img/flattened.png | Bin 38221 -> 38751 bytes
 img/flattened.svg |   2 +-
 img/telescope.png | Bin 38230 -> 38968 bytes
 img/telescope.svg |   2 +-
 6 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/img/expanded.png b/img/expanded.png
index 097c96f1b7f619d350b1f3d2499f1ff44887ad11..5da6806743d0fe01d2f50b0b028163d61ba3d162 100644
GIT binary patch
literal 38001
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
Rib1@Gl$g9|@oR&C{|7pxX{!JL

literal 37638
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

GRetcmOqPUXw)ZNP-kqxrnG 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 - + diff --git a/img/flattened.png b/img/flattened.png index 506f982ba0588fcd02470ae9a0b89987309116db..04796705b25a2b3a8df48326cdaadd2df39fd5b9 100644 GIT binary patch literal 38751 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 YJ1llvVwh@|ro=;&T)doHPKBrc4|L|F-2eap literal 38221 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

  • Iz$tz&FLGrHXbZtG)5jcKCFi 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 DdPuHQ diff --git a/img/flattened.svg b/img/flattened.svg index 8e0b5b6..c91c2e6 100644 --- a/img/flattened.svg +++ b/img/flattened.svg @@ -1,4 +1,4 @@ - + diff --git a/img/telescope.png b/img/telescope.png index 94c1d114ce0cbbc3a853ed2915644b61f9ad31ee..ee9f55d6b99cd1252e25c4c04bdee6347e3abf5e 100644 GIT binary patch literal 38968 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 BLKOf2 diff --git a/img/telescope.svg b/img/telescope.svg index 962aaf2..337ff71 100644 --- a/img/telescope.svg +++ b/img/telescope.svg @@ -1,4 +1,4 @@ - + From cc2f1eeb140abff25eb70b20fdaa8995741d2e18 Mon Sep 17 00:00:00 2001 From: hoijui Date: Sat, 27 Apr 2019 22:14:50 +0200 Subject: [PATCH 05/18] latest as of 27 April 2019, hoijui/master, 39e60be --- basis-escher.html | 6 +-- basis-flow.html | 37 ++++++++------ basis-os.html | 8 +-- basis.html | 35 ++++++++----- cmd.html | 8 +-- css/main.css | 4 ++ meaning.html | 24 ++++----- program.html | 127 ++++++++++++++++++++++++---------------------- reflex.html | 34 ++++++------- syntax.html | 105 ++++++++++++++++++++++++++++---------- 10 files changed, 232 insertions(+), 156 deletions(-) diff --git a/basis-escher.html b/basis-escher.html index 50cd124..ecdd393 100644 --- a/basis-escher.html +++ b/basis-escher.html @@ -25,7 +25,7 @@

    Index reflex

    The following program, for instance, will print out the index used to materialize the invoking circuit program: -

    +
     {
     	*Show = *e.Index
     }
    @@ -47,7 +47,7 @@ 

    Materialize reflex

    Consider the following example program: -

    +
     {
     	m *e.Materialize
     	f *e.Fork
    @@ -63,7 +63,7 @@ 

    Materialize reflex

    This program will materialize the child program -

    +
     {
     	*Show = "Hello from the child circuit program."
     }
    diff --git a/basis-flow.html b/basis-flow.html
    index 6f1de1e..6529a06 100644
    --- a/basis-flow.html
    +++ b/basis-flow.html
    @@ -23,6 +23,9 @@ 

    Information flow reflexes

    Star reflex

    +

    (The implementation can be found in +faculty/basic/star.go.) +

    The star is the simplest flow reflex. It accepts any number of connected valves and ignores their specific names. @@ -30,12 +33,12 @@

    Star reflex

    the star reflex forwards that value to all other connected valves.

    Every forwarded value is emitted (i.e. sent) to its respective -valve on a dedicated goroutine. Therefore the star reflex never +valve on a dedicated Go routine. Therefore, the star reflex never blocks.

    An example usage: -

    +
     {
     	star *Star
     	one 1
    @@ -54,23 +57,27 @@ 

    Star reflex

    Fork reflex

    +

    (The implementation can be found in +be/union.go.) +

    In our experience, the fork is the most commonly used synchronization primitive in Escher. It requires that the distinguished empty-string valve be connected, as well as one or more freely-named (string or integer) other valves. -

    Fork can be described as two entirely independent reflexes, let us call -them merge and split, embodied in one. +

    Fork can be described as two entirely independent reflexes. +Let us call them merge and split, embodied in one.

    Split direction

    -

    Whenever a value W is received on the empty string valve of a fork, -the reflex will process it using the split logic. The received value must be of type -circuit. For every valve whose name N is not the empty string, fork will -send the value of the gate named N from circuit W to that valve. +

    Whenever a value W (must be of type Circuit) +is received on the empty string valve of a fork, +the reflex will process it using the split logic. +For every valve whose name N is not the empty string, +fork will send the value of the gate named N from circuit W to that valve.

    Take for instance this program: -

    +
     {
     	f *e.Fork
     	f: = {
    @@ -84,8 +91,8 @@ 

    Split direction

    The values "Hello" and "World" will be sent -to and printed by the connected *Show reflexes. Whereas the value "Foo" -will be ignored. +to and printed by the connected *Show reflexes. +Whereas the value "Foo" will be ignored.

    Merge direction

    @@ -95,12 +102,12 @@

    Merge direction

    Note that in the merge direction fork reflexes act as powerful synchronization primitives. They effectively wait, blocking any other receptions on the non-empty-string valves, until -one value is available on each such valve. Subsequently these values are packed into a -single circuit and sent out. +one value is available on each such valve. +Subsequently, these values are packed into a single circuit and sent out.

    Consider the following program, for instance: -

    +
     {
     	f *e.Fork
     	f: = *Show
    @@ -112,7 +119,7 @@ 

    Merge direction

    Fork will wait until "New" and "York" are received on valves x and y, respectively. Then the value -

    +
     {
     	x "New"
     	y "York"
    diff --git a/basis-os.html b/basis-os.html
    index 94ff147..188d488 100644
    --- a/basis-os.html
    +++ b/basis-os.html
    @@ -36,7 +36,7 @@ 

    Process execution reflex

    An example of the command circuit value is as follows: -

    +
     {
     	Env {
     		"PATH=/abc:/bin"
    @@ -50,7 +50,7 @@ 

    Process execution reflex

    The returned IO circuit value is of the following form: -

    +
     {
     	Stdin (io.WriteCloser)
     	Stdout (io.ReadCloser)
    @@ -63,7 +63,7 @@ 

    Process execution reflex

    The exit circuit is of the form -

    +
     {
     	Exit (int)
     }
    @@ -72,7 +72,7 @@ 

    Process execution reflex

    The following example demonstrates invoking the /bin/ls command and forwarding its standard output and error to those of the Escher program itself. -

    +
     {
     	proc *os.Process
     	proc:Command = {
    diff --git a/basis.html b/basis.html
    index 8a8ad1b..c4ab712 100644
    --- a/basis.html
    +++ b/basis.html
    @@ -15,14 +15,21 @@
     
     

    Reflex basis and faculties

    +

    A faculty is a set of reflexes, similar to a package in Java, or a namespace in C++. +

    There are two kinds of reflexes in Escher:

      -
    • Those that are implemented in the underlying technology, the Go language, and linked into the runtime, which we call -basis reflexes. -
    • And those that are compositions of other reflexes, described by program circuits, which we call -derivative reflexes. +
    • Basis reflexes + are implemented in the underlying technology — + the Go language — and linked into the runtime +
    • Derivative reflexes + are compositions of other reflexes, + described by program circuits
    +

    We will now have a look at the equivalent of std in C++, +the Escher basis faculty. +

    Basis reflexes determine the basic arithmetic and data manipulation operations that Escher programs can ultimately perform, as well as external technologies that Escher programs might have access to. @@ -38,21 +45,25 @@

    Information flow

    We find that most Escher programs benefit from a few basic reflexes that control information flow. -We have included a few in the default runtime and they are described in the following -sections. These gates can be viewed as Escher's “synchronization” facilities. +We have included a few in the default runtime, +and they are described in a separate page. +These gates can be viewed as Escher's “synchronization” facilities.

    External technologies

    -

    Basis reflexes are also Escher's way of interacting with external technologies, +

    Basis reflexes are also Escher's way of interacting with external technologies such as input/output devices. The POSIX systems is a canonical example of an -external technology and Escher has a dedicated os faculty for it. +external technology, and Escher has a dedicated +os +faculty for it.

    Escher within Escher

    -

    The most powerful feature of Escher is its recursive nature: Circuit programs -can create program circuits and materialize them into other circuit programs. -This programming pattern is enabled by the escher faculty, -which among other things offers reflexes that materialize program circuits. +

    The most powerful feature of Escher is its recursive nature: +Circuit programs can create program circuits and materialize them into other circuit programs. +This programming pattern is enabled by the +escher +faculty, which among other things offers reflexes that materialize program circuits. diff --git a/cmd.html b/cmd.html index 1d711f4..d0c3734 100644 --- a/cmd.html +++ b/cmd.html @@ -18,7 +18,7 @@

    Command-line and runtime

    The Escher binary is intended to be a general-purpose execution environment for Escher programs. It is invoked with two parameters: -

    +
     escher -src SourceDirectory MainDirective
     
    @@ -33,10 +33,10 @@

    Command-line and runtime

    Circuits found therein are placed in the startup index, such that their location in the index is the same as the path of their source file relative to the source directory, followed by their circuit names. For instance, the source file a/b/c.escher, containing: -
    +	
     		CircuitName { … }
     	
    - Will be registered under the index address a.b.c.CircuitName. + Will be registered under the index directive a.b.c.CircuitName.
  • Files with other extensions will be converted into SourceFile reflex materializers, located in the index at the path of their source file relative to the source directory. SourceFile @@ -47,7 +47,7 @@

    Command-line and runtime

    The following command, for instance, will generate the contents of this handbook and place it in the current working directory where it is invoked: -

    +
     escher -src "$GOPATH/src/github.com/gocircuit/escher/src/" "*handbook.main"
     

    The -src can be omitted in favor of setting the ESCHER environment variable. diff --git a/css/main.css b/css/main.css index aff1125..f88df0a 100644 --- a/css/main.css +++ b/css/main.css @@ -9,6 +9,10 @@ /*letter-spacing: -0.05em;*/ } +.paddingBetweenRows td { + padding: 0 15px 0 15px; +} + body, div { padding: 0; margin: 0; diff --git a/meaning.html b/meaning.html index 98805ea..a45d6b4 100644 --- a/meaning.html +++ b/meaning.html @@ -20,7 +20,7 @@

    Interpretations of circuits

    dependent on context and/or content. A circuit interpretation will usually utilize a subset of the representational freedoms of a circuit, and will have an intuitive graphical representation. -

    Here we introduce four basic circuit interpretations—or specializations, if you will—that +

    Here we introduce four basic circuit interpretations — or specializations, if you will — that will also serve us as a vocabulary when discussing Escher in following chapters.

    Series

    @@ -31,7 +31,7 @@

    Series

    Gate names are slice indices; gate values are slice element values.

    For instance, the circuit -

    +
     Singer {
     	0 "Dolly"
     	1 "Rebecca"
    @@ -39,7 +39,7 @@ 

    Series

    }
    is analogous (in meaning) to the Go slice: -
    +
     var Singer = []interface{}{
     	"Dolly",
     	"Rebecca",
    @@ -51,7 +51,7 @@ 

    Series

    the syntax section, we have dedicated a shorthand syntax for series circuits that omits the gate names: -
    +
     Singer {
     	"Dolly"
     	"Rebecca"
    @@ -61,15 +61,15 @@ 

    Series

    Indices

    -

    More generally than series, when a circuit has no links we call it an index and -we view it as a map from integers and/or strings to anything else. In this respect an index +

    More generally than series, when a circuit has no links, we call it an index, and +we view it as a map from integers and/or strings to anything else. In this respect, an index is akin in purpose to structures, dictionaries, hash tables and maps in other languages.

    The gate values of index circuits are analogously called children and they can be of primitive types (integers, floats, etc.) as well as recursively they can be other circuits or indices. -

    +
     Tree {
     	Trunk {
     		Branches {
    @@ -94,7 +94,7 @@ 

    Indices

    For instance, the address of "Grandma" relative to the index Tree would be -

    +
     {
     	Root
     	Tentacles
    @@ -110,7 +110,7 @@ 

    Directives

    Directives are represented as a single circuit, wherein the empty-string gate holds the verb, while the number gates hold the components of the address. For instance, -
    +
     {
     	"" "*"
     	0 Root
    @@ -130,7 +130,7 @@ 

    Directives

    Due to the ubiquitous use of directives in circuit programs, directives can be written using the dedicated syntactic sugar: -

    +
     *Root.Tentacles.1
     
    @@ -143,7 +143,7 @@

    Programs

    The gates of program circuits ultimately represent independently executing services, which are interconnected according to the link pattern of the circuit. -

    Gate values designate the processing logic—i.e. they codify the service type—while +

    Gate values designate the processing logic — i.e. they codify the service type — while gate names are used solely as identifiers, needed in the description of the circuit links.

    Gate values can be of any kind: integer, float, complex, string @@ -164,7 +164,7 @@

    Programs

    Here is an example of a valid program circuit: -

    +
     {
     	tkr *time.Ticker
     	sum *math.Sum
    diff --git a/program.html b/program.html
    index 1336170..261e424 100644
    --- a/program.html
    +++ b/program.html
    @@ -45,7 +45,7 @@ 

    Circuit programming

    or between a defined gate and the super gate.

    Links connected to the super gate are endpoints whose eventual connection -to a reflex is defered to the enclosing circuit. +to a reflex is deferred to the enclosing circuit.

    Circuit programs that have no links to the super gate are called closed circuits, as they describe complete materializable systems on their own. @@ -56,18 +56,21 @@

    Circuit programming

    Gate value interpretation

    Circuit programs recognize the following types of gate values: -

      -
    • Integer, float, complex, string, or a non-directive circuit, or
    • +
        +
      1. Integer
      2. +
      3. Float
      4. +
      5. Complex
      6. +
      7. String
      8. +
      9. Circuit (non-directive)
      10. Directive circuit -
    +

    Noun reflexes

    -

    Gate values in the first group (integer, float, complex, string or a non-directive circuit) -will result in the materialization of a “noun” reflex, whose noun value is the -gate value. +

    Gate value types 1 to 5 will result in the materialization of a “noun” reflex, +whose noun value is the gate value. -

    A noun reflex is a generic built-in reflex type which, after materialization, +

    A noun reflex is a generic, built-in reflex type, which — after materialization — emits its corresponding gate value to each one of its connected valves. If no valves are connected, the noun reflex leaves the gate value as its residue. Otherwise, it leaves no residue. @@ -77,24 +80,24 @@

    Expanding directives

    When the gate value is a directive, materialization proceeds as follows: -

      -
    • First, the runtime looks up the “target” value, which resides in the index -at the address specified in the directive.
    • -
    • Second, -
        -
      • If the directive verb is @, the gate is materialized as a noun gate -emitting the target value.
      • -
      • If the directive verb is *, the target value is substituted as the gate value, -and the materialization process described in this section is repeated now with the target -value as the gate value. -
      +
        +
      1. The runtime looks up the “target” value, which resides in the index + at the address specified in the directive.
      2. +
      3. +
          +
        • If the directive verb is @, the gate is materialized as a noun gate + emitting the target value.
        • +
        • If the directive verb is *, the target value is substituted as the gate value, + and the materialization process described in this section is repeated now with the target + value as the gate value. +
      4. -
    +

    Circuit residue

    As pointed out in the section on reflexes, every reflex -can leave a residue value as a result of being materialized, or the Go value nil +can leave a residue value as a result of being materialized, or the Go value nil, which indicates leaving no residue.

    Circuit programs are no different than reflexes (in fact they describe higher-order reflexes themselves) @@ -102,7 +105,7 @@

    Circuit residue

    The residue of materializing a circuit program is the same circuit, wherein each gate value is replaced by the residue of materializing that gate. -Gate corresponding to reflexes that leave no residue are not present +Gates corresponding to reflexes that leave no residue are not present in the residue circuit.

    If no gates leave any residue, the circuit program itself leaves no residue. @@ -111,31 +114,31 @@

    Example with an illustration

    Consider, for instance, the following index: -

    +
     {
     	Database {
     		cache Cache
    -		left Shard
    -		right Shard
    +		shard1 Shard
    +		shard2 Shard
     		link Link
     
     		cache:Web = :Web
    -		left:Cache = cache:Left
    -		right:Cache = cache:Right
    -		left:Backup = link:Left
    -		right:Backup = link:Right
    +		shard1:Cache = cache:Left
    +		shard2:Cache = cache:Right
    +		shard1:Backup = link:Left
    +		shard2:Backup = link:Right
     		link: = :Backup
     	}
     	App {
     		web Web
    -		left Database
    -		right Database
    -		backup Backup
    -
    -		left:Web = web:Left
    -		right:Web = web:Right
    -		left:Backup = backup:Left
    -		right:Backup = backup:Right
    +		db1 Database
    +		db2 Database
    +		bkp Backup
    +
    +		db1:Web = web:Left
    +		db2:Web = web:Right
    +		db1:Backup = bkp:Left
    +		db2:Backup = bkp:Right
     	}
     	Web …
     	Cache …
    @@ -152,7 +155,7 @@ 

    Example with an illustration

    - +
    @@ -164,7 +167,7 @@

    Example with an illustration

    (i.e. directive addresses will resolve with respect to that index), we are going to get the following residue: -
    +
     {
     	web WebResidue
     	bkp BackupResidue
    @@ -188,27 +191,27 @@ 

    Example with an illustration

    link LinkResidue cache:Web = :Web - left:Cache = cache:Left - right:Cache = cache:Right - left:Backup = link:Left - right:Backup = link:Right + shard1:Cache = cache:Left + shard2:Cache = cache:Right + shard1:Backup = link:Left + shard2:Backup = link:Right link: = :Backup } - left:Web = web:Left - right:Web = web:Right - left:Backup = backup:Left - right:Backup = backup:Right + db1:Web = web:Left + db2:Web = web:Right + db1:Backup = bkp:Left + db2:Backup = bkp:Right }

    Where WebResidue, BackupResidue, Shard1Residue, etc. are -merely placeholders here for whatever the actual residue values of the respetive reflexes are. +merely placeholders here for whatever the actual residue values of the respective reflexes are. Visually the program residue could be represented as:

    - +
    @@ -222,7 +225,7 @@

    Example with an illustration

    - +
    @@ -235,20 +238,19 @@

    Example with an illustration

    Three ways to invoke materialization

    -

    One can materialize (i.e. execute) a program circuit given an index from three different places: -from Go, from another program circuit (i.e. from Escher) and from the POSIX shell. +

    One can materialize (i.e. execute) a program circuit given an index from three different places. -

    Materializing from Go

    +

    Materializing from Go

    Package be provides the materialization method: -

    +
     func MaterializeSystem(program interface{}, index, barrier Circuit) (residue interface{})
     
    -

    Argument program contains the program circuit, of Go type Circuit, +

    Argument program contains the program circuit — of Go type Circuit — that is to be materialized. Incidentally, the value of program can be any value -recognized as a gate value in a circuit program as described earlier. Often one will pass a directive +recognized as a gate value in a circuit program as described earlier. Often, one will pass a directive circuit as program.

    Argument index holds the materialization index, relative to which @@ -258,19 +260,22 @@

    Materializing from Go

    The function returns the residue of the materialization process. -

    Materializing from Escher

    +

    Materializing from within Escher

    One can recursively materialize circuits programs from within other circuit programs. This is accomplished using the built-in reflex e.Materialize which is described in the materialization faculty section. -

    Materializing from POSIX

    +

    Materializing from the command-line

    The Escher executable, which is explained in detail in the runtime section, -will materialize a directive from the command-line: +will materialize a directive from the command-line. +Given our index (project source root) is "/src/app/", +and in one of the "*.escher" files in that directory we have a gate named "Main", +we can materialize it from the command-line like this: -

    -% escher -src /src/app *app.Main
    +
    +escher -src /src/ "*app.Main"
     
    diff --git a/reflex.html b/reflex.html index a88ccc3..136f05b 100644 --- a/reflex.html +++ b/reflex.html @@ -18,7 +18,7 @@

    Implementing reflexes

    A key motivation for the design of Escher is the idea that software programs should be assembled as the interconnection of independently-executing computational devices of special-purpose logic. -In other words, computer programs—small or large—should be +In other words, computer programs — small or large — should be no different in their essential structure than cloud applications, which are no more and no less than an interconnection of independently running special-purpose services. @@ -27,7 +27,7 @@

    Implementing reflexes

    Reflexes can be implemented in the language underlying Escher (the Go language) or they can be composed out of other reflexes, using circuit programs from within Escher. -Here we describe how to implement relfexes in Go and link them +Here we describe how to implement reflexes in Go and link them into the Escher runtime.

    Reflexes and the runtime

    @@ -54,7 +54,7 @@

    Receiver type

    Every reflex is embodied by a user-defined Go receiver type. -

    +
     type Receiver struct {
     	…
     }
    @@ -68,7 +68,7 @@ 

    The spark

    Go receiver type and invokes a designated initialization method, called Spark. All receivers must implement that method. -
    +
     func (r *Receiver) Spark(eye *Eye, matter Circuit, aux ...interface{}) Value {
     	…
     }
    @@ -78,7 +78,7 @@ 

    Eye to the outside

    The first argument eye is an object with a singleton public method: -

    +
     func (eye *Eye) Show(valve Name, value interface{})
     
    @@ -106,10 +106,10 @@

    Materialization matter

    For instance, the names of the connected valves can be printed with this code: -

    +
     	view := matter.CircuitAt("View")
     	for _, valve := range view.SortedNames() {
    -		fmt.Printf("valve name = %v\n", vavle)
    +		fmt.Printf("valve name = %v\n", valve)
     	}
     
    @@ -119,7 +119,7 @@

    Auxiliary input

    information that can inform the Spark method to specialize this reflex one way or another. The auxiliary information is specified by the user when linking the reflex to the runtime, which is explained -furhter below. +further below.

    Return residue

    @@ -147,7 +147,7 @@

    Fixed valve names

    can be any string (including the empty string), that have the following signature: -
    +
     func (r *Receiver) CognizeVALVE(eye *be.Eye, value interface{}) {
     	…
     }
    @@ -158,18 +158,18 @@ 

    Fixed valve names

    to be connected (when the reflex is materialized as part of a circuit of reflexes).

    Furthermore, every event sent to this valve (of this reflex instance) -will result in an invokation of the method CognizeVALVE, wherein the event value +will result in an invocation of the method CognizeVALVE, wherein the event value is held by the argument value. The eye object, supplied for convenience, can be used to send out events to any of the reflex's connected valves. -

    We say that that the method CognizeVALVE captures the event. +

    We say that the method CognizeVALVE captures the event.

    Varying valve names

    The second kind are receiver methods with this exact signature: -

    +
     func (r *Receiver) OverCognize(eye *be.Eye, valve Name, value interface{}) {
     	…
     }
    @@ -192,7 +192,7 @@ 

    Linking user reflexes into the runtime

    Creating the Materializer is accomplished using the function NewMaterializer in package be: -

    +
     func NewMaterializer(receiver Material, aux ...interface{}) Materializer
     
    @@ -203,18 +203,18 @@

    Linking user reflexes into the runtime

    To add a materializer for a new reflex type to the Escher index, one uses the method Register in package faculty: -

    +
     func Register(v Materializer, addr ...Name)
     

    The first argument is the materializer for the reflex, obtained from NewMaterializer, and the second argument is the address within the index where the materializer will be placed. -

    Typically the user will implement a package with multiple topically-related reflex receivers, +

    Typically, the user will implement a package with multiple topically-related reflex receivers, and will register their respective materializers with the runtime as a side-effect of importing the package, using an init function: -

    +
     func init() {
     	faculty.Register(be.NewMaterializer(&Receiver{}), "example", "ReflexName")
     }
    @@ -238,7 +238,7 @@ 

    A one-way door example

    wherein each passing value is blocked until its transmission is allowed by a “strobe” value sent to Door. -
    +
     package example
     
     import (
    diff --git a/syntax.html b/syntax.html
    index e349ea0..53a7101 100644
    --- a/syntax.html
    +++ b/syntax.html
    @@ -38,12 +38,12 @@ 

    Symbolism

    the internal structure of the circuit, which consists of the gate names and links and excludes the gate values—the external structure. -

    To draw a circuit we start with a solid black oval, denoting the circuit's internal name space. -White ovals—contained inside the black one and mutually non-overlapping—denote gates. +

    To draw a circuit, we start with a solid black oval, denoting the circuit's internal name space. +White ovals — contained inside the black one and mutually non-overlapping — denote gates.

    Links are depicted as white lines that connect the outlines of gate ovals. Link endpoints connecting to the super gate are attached to -the outline of the surrounding black oval. +the outline of the surrounding black oval.

    Valve names are written in white within the black oval, next to their respective visual connection point. Connection points where valve names @@ -145,12 +145,20 @@

    Grammar

    Comments

    -

    Go-style end-of-line comments are allowed everywhere. +

    We use a trick: +We use syntactic sugared (empty string named), string valued gates, +and — purely to visually indicate a comment — +we use "//" in the beginning, or "/*" plus "*/" at the end.

    -alpha {            // circuit definition
    -	float 1.23 // gate named float with a floating-point value
    -	beta {}    // gate named beta with an empty circuit value
    +alpha {          `// circuit definition`
    +	float 1.23 ; `// gate named float with a floating-point value`
    +	beta {}    ; `// gate named beta with an empty circuit value`
    +	`/*
    +	  * We can also do this:
    +	  * A multi-line comment within a circuit definition.
    +	  * Outside the circuit though, no comments are possible.
    +	  */`
     }
     
    @@ -158,20 +166,36 @@

    Gates

    Gate statements begin on a new line with a gate name identifier, space, and a gate value expression. There are six value types that can be expressed: -

      -
    • Integers -
    • Floating-point numbers -
    • Complex numbers -
    • Strings -
    • Directives -
    • Circuits -
    - -

    The first four correspond to the Go types int, float64, complex128 -and string and are expressed using the same syntax. -Addresses have a dedicated Go type Address. They represent a sequence of names and are -written as dot-separated fully-qualified names. Finally, circuits—whose dedicated Go type is Circuit— -can be values of gates as well. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeRepresents
    Integernative Go type int
    Floating-point numbernative Go type float64
    Complex numbernative Go type complex128
    Stringnative Go type string
    DirectiveEscher internal Go type Address, representing a sequence of names, written as dot-separated, fully-qualified names
    CircuitEscher internal Go type Circuit

    For instance, @@ -205,8 +229,8 @@

    Gates

    Series

    Gate names can be omitted in circuit definitions, in which case gates are -assigned consequtive integral names, starting from zero. We call the resulting -circuits series. +assigned consecutive integral names, starting from zero. We call the resulting +circuits series.

     alpha {
    @@ -228,6 +252,28 @@ 

    Series

    }
    +which is equivalent to: + +
    +alpha {
    +	0 *fully.qualified.Name
    +	1 @fully.qualified.Name
    +	2 123
    +	3 3.14
    +	4 (1-3i)
    +	5 "abcd\n\tefgh"
    +	6 `
    +		<html>
    +			<div>abc</div>
    +		</html>
    +	`
    +	7 {
    +		A 1
    +		B "C"
    +	}
    +}
    +
    +

    Circuit links are semantically symmetric. A link is a pair of two @@ -236,10 +282,13 @@

    Vectors are written as the gate name, followed by : (the colon sign), followed by the valve name. Links are written as a vector, followed by optional whitespace, followed by = (the equals sign), followed by another optional whitespace and -the second vector. For instance, +the second vector. Valid examples:

     	and:XAndY = not:X
    +	and:XAndY= not:X
    +	and:XAndY =not:X
    +	and:XAndY=not:X
     

    A few idioms are commonly useful: @@ -252,7 +301,7 @@

    For instance, when materializing circuits, the links connected to the super gate are exposed to the higher-level “super” circuit.
  • Valve names can be the empty string. We call such valves default, as -they are commonly refered to hereinafter in various idioms. +they are commonly referred to hereinafter in various idioms.

    For instance, it is a common pattern to name the output valve of materializable circuits after the empty string. The default valve of the super gate, @@ -275,8 +324,8 @@

    Syntactic sugar

    -

    When circuits are used to represent programs—in other words, -executable code—it is common to include a gate and then link to its default valve. +

    When circuits are used to represent programs — in other words, +executable code — it is common to include a gate and then link to its default valve. To reduce verbosity in this case, link definitions support a piece of syntactic sugar.

    Either (or both) vectors in a link definition can be substituted for a gate value. @@ -294,7 +343,7 @@

    Syntactic sugar

    sum:Summand = 0:
  • -

    In another example both sides of the equation are sugared: +

    In this example, both sides of the equation are sugared:

     	*os.Scanln = *os.Println
    
    From 12c9efe04949f797b486db42236722dd2f0a2db6 Mon Sep 17 00:00:00 2001
    From: hoijui 
    Date: Tue, 30 Apr 2019 08:40:32 +0200
    Subject: [PATCH 06/18] latest as of 30 April 2019, generated from
     hoijui/master 0108b64
    
    ---
     basis-escher.html |   8 +-
     basis-flow.html   |  20 +--
     basis-os.html     |  12 +-
     cloud.html        | 371 ++++++++++++++++++++++++++--------------------
     cmd.html          |  22 +--
     debug.html        | 103 +++++++------
     index.html        |   6 +-
     install.html      |   2 +-
     meaning.html      |   2 +-
     syntax.html       |   2 +-
     10 files changed, 310 insertions(+), 238 deletions(-)
    
    diff --git a/basis-escher.html b/basis-escher.html
    index ecdd393..0320b26 100644
    --- a/basis-escher.html
    +++ b/basis-escher.html
    @@ -27,7 +27,7 @@ 

    Index reflex

     {
    -	*Show = *e.Index
    +	*e.Show = *e.Index
     }
     
    @@ -54,10 +54,10 @@

    Materialize reflex

    m:View = f: f:Program = { - *Show = "Hello from the child circuit program." + *e.Show = "Hello from the child circuit program." } f:Index = *e.Index - m:Residue = *Show + m:Residue = *e.Show }
    @@ -65,7 +65,7 @@

    Materialize reflex

     {
    -	*Show = "Hello from the child circuit program."
    +	*e.Show = "Hello from the child circuit program."
     }
     
    diff --git a/basis-flow.html b/basis-flow.html index 6529a06..216e238 100644 --- a/basis-flow.html +++ b/basis-flow.html @@ -40,20 +40,20 @@

    Star reflex

     {
    -	star *Star
    +	star *e.Star
     	one 1
     
     	star:X = one:
    -	star:Y = *Show
    -	star:Z = *Show
    -	star:W = *Show
    +	star:Y = *e.Show
    +	star:Z = *e.Show
    +	star:W = *e.Show
     }
     

    When this circuit is materialized, the constant 1 will be emitted from gate one to valve X of gate star. The star gate will then forward the value to each of the valves Y, Z and W in parallel. Consequently -it will be printed on the standard output three times by the receiving *Show reflexes. +it will be printed on the standard output three times by the receiving *e.Show reflexes.

    Fork reflex

    @@ -85,13 +85,13 @@

    Split direction

    y "World" z "Foo" } - f:x = *Show - f:y = *Show + f:x = *e.Show + f:y = *e.Show }

    The values "Hello" and "World" will be sent -to and printed by the connected *Show reflexes. +to and printed by the connected *e.Show reflexes. Whereas the value "Foo" will be ignored.

    Merge direction

    @@ -110,7 +110,7 @@

    Merge direction

     {
     	f *e.Fork
    -	f: = *Show
    +	f: = *e.Show
     	f:x = "New"
     	f:y = "York"
     }
    @@ -126,7 +126,7 @@ 

    Merge direction

    }
    -

    will be sent to and printed by the *Show reflex. +

    will be sent to and printed by the *e.Show reflex. diff --git a/basis-os.html b/basis-os.html index 188d488..b93efcd 100644 --- a/basis-os.html +++ b/basis-os.html @@ -83,21 +83,21 @@

    Process execution reflex

    yio *e.Fork proc:IO = yio: - yio:Stdin = *Ignore + yio:Stdin = *e.Ignore yio:Stdout = *os.Stdout yio:Stderr = *os.Stderr - yexit *e.Fork - proc:Exit = yexit: - + yExit *e.Fork + proc:Exit = yExit: + exit *os.Exit - yexit:Exit = exit: + yExit:Exit = exit: }

    The standard file descriptors of the child process must always be handled. In this example, standard output and error are forwarded while standard input is -“ignored”. The reflex *Ignore is a “smart” reflex which +“ignored”. The reflex *e.Ignore is a “smart” reflex which ignores primitive values (integers, floats, etc.), whereas it closes io.Closer objects and it drains io.Reader objects. diff --git a/cloud.html b/cloud.html index a0e3dcd..9402023 100644 --- a/cloud.html +++ b/cloud.html @@ -22,45 +22,48 @@

    Paradigm for building clouds with Circuit and Escher

    and understandable to users.

    We propose a syntactic abstraction, called Escher circuits, for representing the state of the cloud. -The abstraction enables modular compositing of large circuits from smaller components, facilitating +The abstraction enables modular composition of large circuits from smaller components, facilitating manual descriptions of cloud topologies. Further, it supports a circuit “difference” calculation to facilitate the representation of incremental system changes.

    The result is a system that provides a 3-step workflow for the Operations Engineer, which is captured in the following command-line operations: -

    +
     cloud sense > current_state.circuit
     cloud diff desired_state.circuit current_state.circuit > diff.circuit
     cloud materialize diff.circuit
     

    All .circuit files involved in the control of the cloud are simple text files -(that use Escher syntax) and as such all changes to the cloud +that use Escher syntax. Therefore, all changes to the cloud integrate cleanly with versioning systems like Git, -resulting in full hitorical accountability of cloud state changes. +which when used gives us full historical accountability of cloud state changes.

    Framework

    -

    Every well-defined system requires a clear specification of the objects -at play, their possible interrelations in any moment in time, as well as the allowable operations -that can be performed to its components. +

    Every well-defined system requires a clear specification of the objects at play, +their possible interrelations in any moment in time, +as well as the allowable operations that can be performed to its components. -

    The systems of interest here, which model cloud applications in the datacenter, have +

    The systems of interest here, which model cloud applications in the data-center, have three types of components: hosts, services and links. We will treat these objects cleanly in -a formal manner, but it should be clear that they will end up corresponding to well-known +a formal manner, but it should be clear that they will end up corresponding to well-known, real technologies utilized in specific manners.

    Our hosts will correspond to physical machines (or virtual machines, as the case might be). Our services will correspond to Docker containers, whose images are configured in a standard manner to expect a number of named incoming or outgoing TCP connections. -And each of our links will correspond to a pair of lightweiht DNS servers, one at each endpoint host, +And each of our links will correspond to a pair of lightweight DNS servers, one at each endpoint host, configured to point the respective Docker TCP connections at each other. -

    The exact details of the correspondence between hosts, services and links, and machines, Docker -containers and DNS servers, respectively, will be fleshed out in a later section. For now, suffice it to say -that this correspondence will be made simple and natural through the use of the gocircuit.org -tool for dynamic cloud orchestration (although with an appropriate driver a similar result can be accomplished -with any cloud provider like Google Compute Engine +

    The exact details of the correspondence between hosts, services and links on the one hand, +and machines, Docker containers and DNS servers on the other, +will be fleshed out in a later section. +For now, suffice it to say that this correspondence will be made simple and natural +through the use of the gocircuit.org tool +for dynamic cloud orchestration (although with an appropriate driver, +a similar result can be accomplished with any cloud provider like +Google Compute Engine or Amazon EC2, for instance).

    Getting back to the abstract system framework, the allowed relationships between hosts, services and links @@ -68,12 +71,15 @@

    Framework

    • Every host in the system is identified by a unique string identifier -
    • Every service “resides” on one host and every such service has a string identifier, unique only across the services residing -on the same host. -
    • Every service has a “type” denoted by a string (which will correspond to the Docker image name of its container). -
    • Every service can have zero or more named “valves” (where a valve will correspond to a TCP connection, client or server) -under the requirement that valve names are unique within one service. -
    • Every link “connects” one service-valve pair to another, so that no such pair is connected more than once. +
    • Every service “resides” on one host and every such service has a string identifier, + unique only across the services residing on the same host. +
    • Every service has a “type” denoted by a string + (which will correspond to the Docker image name of its container). +
    • Every service can have zero or more named “valves” + (where a valve will correspond to a TCP connection, client or server) + under the requirement that valve names are unique within one service. +
    • Every link “connects” one service-valve pair to another, + so that no such pair is connected more than once.

    Relationships between the components of a system can be represented visually using the same @@ -90,16 +96,16 @@

    Framework

    -

    In the illustration above there are two hosts named host1 and host2. -Two services, named cache and server, reside on host1. -One service, named database, resides on host2. Service cache +

    In the illustration above, there are two hosts named host1 and host2. +Two services — named cache and server — reside on host1. +One service — named database — resides on host2. Service cache is of type MemCache, service server is of type Http and service database is of type Redis. There are two links in the system: one connecting the service-valve pair (server, x) to (cache, y), and one connecting (cache, z) to (database, w). (Disregard the labels p and q for now.) -

    Thus far we have addressed the properties describing the state of a system in a singular moment in time. +

    Thus far, we have addressed the properties describing the state of a system in a singular moment in time. System state can change over time, or “dynamically”, according to the following additional postulates:

      @@ -110,11 +116,14 @@

      Framework

      In particular, hosts, services and links can appear independently of each other. -

      Some of these dynamic events (of emergence or disappearance) will be caused by external -factors (for instance a host might die due to bad hardware) and others will be caused by operations -that we perform with the system (for instance, we might start a service). No matter what the cause -for an event is, the important thing is that these are the only changes of state that can happen to -the system. +

      Some of these dynamic events (of emergence or disappearance) +will be caused by external factors +(for instance a host might die due to bad hardware) +and others will be caused by operations that we perform with the system +(for instance, we might start a service). +No matter what the cause for an event is, +the important thing is that these are the only changes of state +that can happen to the system.

      The resulting UI to the engineer

      @@ -129,14 +138,14 @@

      The resulting UI to the engineer

      1. Connect to the “cloud” and retrieve a consistent representation of the “current” cloud state. -
      2. Compute the difference between a representation of the “desired” state of the cloud and the -retrieved “current” state. -
      3. Send a minimal stream of “commands” to the cloud, aimed at modifying its state from -“current” to “desired”. +
      4. Compute the difference between a representation of the “desired” state of the cloud + and the retrieved “current” state. +
      5. Send a minimal stream of “commands” to the cloud, + aimed at modifying its state from “current” to “desired”.

      In the remainder of this document, we describe the design of a command-line tool -cloud which embodies the above three operations as— +cloud, which embodies the above three operations as:

      1. cloud sense > current.circuit @@ -152,14 +161,14 @@

        Representation

        The symbolic visual representation of system state, exemplified above, can very well be used as a formal representation, much like architectural blueprints are used as formal representations -of building design. However, this visual representation while natural for people is not easy to use +of building design. However, this visual representation, while natural for people, is not easy to use by machines.

        As we explain in the section on Escher syntax, this visual representation has an equivalent syntactic (i.e. written) form, which is well-suited for machine manipulations. In particular, the syntactic representation of the diagram above would be as follows: -

        +
         {
         	host1 {
         		cache MemCache
        @@ -175,21 +184,21 @@ 

        Representation

        }
        -

        In other words, every system state can be represented in the form of an Escher circuit. This gives -us a two-fold benefit. +

        In other words, every system state can be represented in the form of an Escher circuit. +This gives us a two-fold benefit.

        On the one hand, Escher circuits can be manipulated programmatically (both from Go and from Escher) simply as data structures. This allows flexible programmatic investigation of system state through familiar technologies.

        On the other hand, Escher's programming and materialization mechanism -allows for such circuits to be built out modularly from smaller component circuits. In other words, large -datacenter topologies can be composed out of smaller standard components, whereby even the components -circuits can span multiple machines and themselves be non-trivial subsystems. +allows for such circuits to be built out in a modular way from smaller component circuits. +In other words, large data-center topologies can be composed out of smaller standard components, +whereby even the components circuits can span multiple machines and themselves be non-trivial subsystems.

        For instance, our example system state could be generated out of smaller components in the following manner. Let the following circuit be an index (i.e. a library), consisting of two circuits designs: -

        +
         Index {
         	HttpHost {
         		cache MemCache
        @@ -204,9 +213,9 @@ 

        Representation

        }
        -

        Then, if we materialize the program +

        Then, if we materialize the program relative to Index, -

        +
         {
         	host1 HttpHost
         	host2 DbHost
        @@ -214,23 +223,29 @@ 

        Representation

        }
        -relative to Index, the resulting residue will be precisely the system state circuit that +the resulting residue will be precisely the system state circuit that we started with, i.e. the one illustrated in the drawing above.

        Dual representation

        -

        We call the circuit representation of system state, described thus far, a “primal” representation or simply a primal. -Every primal has an equivalent “dual” representation. Transitioning from primal to dual and vice-versa is a matter of +

        We call the circuit representation of system state, described thus far, +a “primal” representation or simply a primal. +Every primal has an equivalent “dual” representation. +Transitioning from primal to dual and vice-versa is a matter of a simple transformation, as we shall see. -

        The dual representation of system state is useful to us, as it is more convenient to carry out certain manipulations -within this representation. In particular, it will be easier to compute the difference between two states in the dual. -As well as it will be easier to “materialize” a dual system state description into an actual running datacenter topology. +

        The dual representation of system state is useful to us, +as it is more convenient to carry out certain manipulations within this representation. +In particular, it will be easier to compute the difference between two states in the dual. +As well as it will be easier to “materialize” a dual system state description +into an actual running data-center topology. -

        The dual representation of a system state primal consists of two lists: a list of services and a list of links. +

        The dual representation of a system state primal consists of two lists: +a list of services and a list of links. -

        The list of services simply enumerates all services found in the primal, each specified by its “full path” -in the primal, accompanied by its type. For our running example, the list of services would be +

        The list of services simply enumerates all services found in the primal, +each specified by its “full path” in the primal, accompanied by its type. +For our running example, the list of services would be

         (host1.cache, MemCache)
        @@ -250,7 +265,7 @@ 

        Dual representation

        It is not hard to see how the primal can be derived from the dual by reversing this process.

        Furthermore, it is self-evident that one can compute the “difference” between two systems, when -this makes sense, by simply computing the difference of their corresponding dual representations elementwise. +this makes sense, by simply computing the difference of their corresponding dual representations element-wise.

        Sensing and materializing

        @@ -276,33 +291,40 @@

        Preparing Docker service containers

        We have chosen to use executable Docker containers as embodiment for services. -

        Each service communicates with the outside—with other services—through a set +

        Each service communicates with the outside — with other services — through a set of zero or more named valves. A valve corresponds to a TCP client connection, a TCP server connection or both. -

        Service container images must be prepared in a standardized manner so that after the -execution of a container, our framework can (i) obtain the TCP server address corresponding -to each valve (if there is one), as well as (ii) supply the remote TCP server address if the -valve also corresponds to a TCP client connection. +

        Service container images must be prepared in a standardized manner, so that after the +execution of a container, our framework can +

          +
        • (i) obtain the TCP server address corresponding to each valve + (if there is one), as well as +
        • (ii) supply the remote TCP server address + if the valve also corresponds to a TCP client connection. +
        -

        There are various ways to prepare Docker containers to accomplish this and we do not +

        There are various ways to prepare Docker containers to accomplish this, and we do not mandate a specific one. Here, we merely suggest one way of doing it without going into unnecessary technical detail. -

        To accomplish (i), one can utilize the Docker -port mapping mechanism. In particular, the software inside the container can be hardwired to -listen to specific port numbers which, in lexicographic order, correspond to the valve names -of the service. Once the container is executed, the effective TCP server addresses—those visible to -other containers in the cloud network—can be automatically obtained using the docker port -command. They will be utilized by our system to “link” containers (i.e. service valves) in a manner described later. - -

        To accomplish (ii), we propose configuring each Docker service container to use a DNS +

        To accomplish (i), +one can utilize the +Docker port mapping mechanism. In particular, the software inside the container can be hardwired to +listen to specific port numbers, which — in lexicographic order — correspond to the valve names +of the service. Once the container is executed, the effective TCP server addresses — those visible to +other containers in the cloud network — can be automatically obtained using the docker port +command. They will be utilized by our system to “link” containers +(i.e. service valves) in a manner described later. + +

        To accomplish (ii), +we propose configuring each Docker service container to use a DNS server whose address is passed on it upon execution, using any one of the various mechanisms available for passing arguments to containers upon execution, provided by Docker itself. Subsequently, the software executing inside the Docker container should simply be hardwired to obtain the IP address for any given valve name by simply looking up that valve name (perhaps prefixed by a standard domain name) through the DNS system. Our framework, described later, -which executes the Docker containers will arrange for a light-weight dedicated DNS server +which executes the Docker containers will arrange for a light-weight, dedicated DNS server for each container, whose sole job would be to resolve these queries appropriately.

        Materializing a dual form to the cloud

        @@ -327,131 +349,158 @@

        Materializing a dual form to the cloud

        1. Obtain a list of available and unused hosts in the cloud. -

          The Circuit API -presents all of its resources uniformly as a file system, where root level directories correspond to available hosts. -Unused hosts are precisely those root level directories that have no children (i.e. no services or other Circuit elements -are running on them). Such a list can be obtained through the API or through the command line using -circuit ls /.... Let us assume, for instance, that the list of available and unused hosts is -

          -/X65cc3c8e31817756
          -/Xe4abe0c286b0e0bc
          -/X9738a5e29e51338e
          -
          - -
        2. Group the elements of the list of services (from the dual) by host and assign a unique (available and unused) -Circuit host to each of the hosts from dual. For instance: -
          -(/X65cc3c8e31817756, host1)
          -(/Xe4abe0c286b0e0bc, host2)
          -
          - -
        3. Execute every service in the dual, as follows. Take, for instance, the service -
          -(host1.cache, MemCache)
          -
          - -
            -
          • Create a dedicated light-weight DNS server for this service, on the Circuit host assigned to this service in the previous step. -Using the Circuit, we spawn a DNS element and choose its name to follow this convention: -
            -/X65cc3c8e31817756/host1/cache/dns
            -
            -

            This is accomplished using the Circuit circuit mkdns command. The details of this are omitted for brevity. -Initially the DNS server will have no resource records, i.e. it will not resolve any lookups. Appropriate records will be added -to it later, when we materialize the list of links from the dual form. -

          • Execute the service's Docker container on that same host using a similar naming convention: -
            -/X65cc3c8e31817756/host1/cache/service
            -
            -

            This is accomplished using the Circuit's circuit mkdkr command, and recall that the service type, -MemCache in this case, is used as the name of the Docker image to be used. Furthermore, the IP address of the DNS server created in the previous step is passed to the Docker container on execution. -

          - -
        4. For each link in the list of links, add DNS resource records to the appropriate DNS servers. -Take for instance the link: -
          -(host1.cache:z, host2.database:w)
          -
          - -
            -
          • First, we inquire into the TCP server address for host1.cache:z, if one is available. -To do so, we access the Docker container -
            -/X65cc3c8e31817756/host1/cache/service
            -
            -and we query the TCP server address for valve named z, using the Docker port exporting -provisions set in place as described earlier. - -
          • Next, we access the Circuit DNS element -
            -/Xe4abe0c286b0e0bc/host2/database/dns
            -
            -and set the resource record for the domain name w to that TCP server address obtained in the previous step. -In addition to setting a DNS A record for the name w, we also set a -DNS TXT record for the same record with the value of host1.cache:z. -This TXT record will later facilitate recovering the dual form for this link directly from the DNS server itself. - -
          • Finally, we repeat the same process with the roles of host1.cache:z -and host2.database:w reversed. - -
          +

          The Circuit API + presents all of its resources uniformly as a *nix style file system, + where root level directories correspond to available hosts. + Unused hosts are precisely those root level directories, + that have no children + (i.e. no services or other Circuit elements are running on them). + Such a list can be obtained through the API, + or through the command line using circuit ls /.... + Let us assume, for instance, that the list of available and unused hosts is +

          +    /X65cc3c8e31817756
          +    /Xe4abe0c286b0e0bc
          +    /X9738a5e29e51338e
          +    
          + +
        5. Group the elements of the list of services (from the dual) by host, + and assign a unique (available and unused) Circuit host to each of the hosts from dual. + For instance: +
          +    (/X65cc3c8e31817756, host1)
          +    (/Xe4abe0c286b0e0bc, host2)
          +    
          + +
        6. Execute every service in the dual as follows. + Take, for instance, the service +
          +    (host1.cache, MemCache)
          +    
          + +
            +
          • Create a dedicated, light-weight DNS server for this service, + on the Circuit host assigned to this service in the previous step. + Using the Circuit, we spawn a DNS element and choose its name to follow this convention: +
            +        /X65cc3c8e31817756/host1/cache/dns
            +        
            +

            This is accomplished using the Circuit command circuit mkdns. + The details of this are omitted for brevity. + Initially, the DNS server will have no resource records, + i.e. it will not resolve any lookups. + Appropriate records will be added to it later, + when we materialize the list of links from the dual form. +

          • Execute the service's Docker container on that same host, + using a similar naming convention: +
            +        /X65cc3c8e31817756/host1/cache/service
            +        
            +

            This is accomplished using the Circuit command circuit mkdkr. + Recall that the service type — MemCache in this case — + is the name of the Docker image to be used. + Furthermore, the IP address of the DNS server created in the previous step + is passed to the Docker container on execution. +

          + +
        7. For each link in the list of links, + add DNS resource records to the appropriate DNS servers. + Take for instance the link: +
          +    (host1.cache:z, host2.database:w)
          +    
          + +
            +
          • First, we inquire into the TCP server address for host1.cache:z, + if one is available. + To do so, we access the Docker container +
            +        /X65cc3c8e31817756/host1/cache/service
            +        
            + and we query the TCP server address for the valve named z, + using the Docker port exporting provisions set in place as described earlier. + +
          • Next, we access the Circuit DNS element +
            +        /Xe4abe0c286b0e0bc/host2/database/dns
            +        
            + and set the resource record for the domain name w + to that TCP server address obtained in the previous step. + In addition to setting a DNS A record for the name w, + we also set a DNS TXT record for the same record with the value of host1.cache:z. + This TXT record will later facilitate recovering the dual form + for this link directly from the DNS server itself. + +
          • Finally, we repeat the same process with the roles + of host1.cache:z + and host2.database:w reversed. + +

        Sensing the cloud state into a dual form

        Reading the current state of the cloud is fairly straightforward. -After listing the contents of the Circuit, using circuit ls /..., -there will only be paths ending in /service and paths -ending in /dns. We are going to read the list of services -from the former ones, and then the list of links from the latter one. +After listing the contents of the Circuit using circuit ls /..., +there will only be paths ending in /service, +and paths ending in /dns. +We are going to read the list of services from the former ones, +and then the list of links from the latter one.

        To read the list of services, we consider each path ending in /service. For instance, the path

         /X65cc3c8e31817756/host1/cache/service
         
        -will correspond to a service named host1.cache (simply drop the first and last path elements -and replace slashes with dots). -Then we query the configuration of the underlying Docker container, using the -circuit peek command. This gives us the Docker image name of the -container—which is the service type—and thus the service entry has been recovered. +will correspond to a service named host1.cache +(simply drop the first and last path elements, and replace slashes with dots). +Then we query the configuration of the underlying Docker container, +using the circuit peek command. +This gives us the Docker image name of the container — which is the service type — +and thus the service entry has been recovered.

        To read the list of links, we consider in turn each path ending in /dns -unless it has already been considered. For instance— +unless it has already been considered. +For instance:

         /X65cc3c8e31817756/host1/cache/dns
         
        -

        This path will be a link endpoint with a prefix host1.cache:, as follows -from the manner in which we materialized links in the previous section. +

        This path will be a link endpoint with a prefix host1.cache:, +as follows from the manner in which we materialized links in the previous section.

        We then list the DNS resource records at this path, using circuit peek, -and in the case of this example we will see resource records for the domain names -y and z. In other words, the names correspond to valve -names of the service. And so each name gives us one endpoint in a link. In this case— +and in the case of this example, +we will see resource records for the domain names y and z. +In other words, the names correspond to valve names of the service. +And so each name gives us one endpoint in a link. +In this case:

         (host1.cache:y, …)
         (host1.cache:z, …)
         
        -

        To recover the other endpoint in each of the links, it suffices to look at the DNS TXT -record accompanying each of the names, y and z. -These TXT records will contain, as per the materialization process, the other endpoint -of the respective link, thus allowing is to recover the whole links— +

        To recover the other endpoint in each of the links, +it suffices to look at the DNS TXT record accompanying each of the names, +y and z. +These TXT records will contain, as per the materialization process, +the other endpoint of the respective link, +thus allowing us to recover the whole links:

         (host1.cache:y, host1.server:x)
         (host1.cache:z, host2.database:w)
         
        -

        Before we add these links to the list of links, we also verify that the opposing service -is still alive. Otherwise by convention we treat the link as not present. +

        Before we add these links to the list of links, +we also verify that the opposing service is still alive. +Otherwise — by convention — we treat the link as not present. For instance, if we want to verify that the endpoint host2.database is alive, -we simply consider the Circuit path list, obtained with circuit ls /..., and -look for the glob pattern /*/host2/database/service. +we simply consider the Circuit path list, obtained with circuit ls /..., +and look for the glob pattern /*/host2/database/service. diff --git a/cmd.html b/cmd.html index d0c3734..2cf20b4 100644 --- a/cmd.html +++ b/cmd.html @@ -30,26 +30,30 @@

        Command-line and runtime

      2. The supplied source directory is traversed recursively:
        • Files with extension .escher are parsed as Escher source files. - Circuits found therein are placed in the startup index, such that their location in the index - is the same as the path of their source file relative to the source directory, followed by their circuit names. - For instance, the source file a/b/c.escher, containing: -
          -		CircuitName { … }
          -	
          - Will be registered under the index directive a.b.c.CircuitName. + Circuits found therein are placed in the startup index, such that their location in the index + is the same as the path of their source file relative to the source directory, followed by their circuit names. + For instance, the source file a/b/c.escher, containing: +
          +	CircuitName { … }
          +
          + Will be registered under the index directive a.b.c.CircuitName.
        • Files with other extensions will be converted into SourceFile reflex materializers, - located in the index at the path of their source file relative to the source directory. SourceFile - reflexes, when materialized, return an io.ReadCloser for the content of the source file. + located in the index at the path of their source file relative to the source directory. SourceFile + reflexes, when materialized, return an io.ReadCloser for the content of the source file. +
      3. Finally, the main directive is materialized.
      +

      The following command, for instance, will generate the contents of this handbook and place it in the current working directory where it is invoked: +

       escher -src "$GOPATH/src/github.com/gocircuit/escher/src/" "*handbook.main"
       
      +

      The -src can be omitted in favor of setting the ESCHER environment variable. diff --git a/debug.html b/debug.html index c78f68a..3d83fda 100644 --- a/debug.html +++ b/debug.html @@ -15,33 +15,36 @@

      Debugging and panics

      -

      Similarly to other languages like Go, Escher has two mechanisms for -debugging programs: panic traces and user-controlled code instrumentation. +

      Similarly to other languages, like Go, +Escher has two mechanisms for debugging programs. -

      Panic traces

      +

      1. Panic traces

      There are two ways in which a running Escher program can panic: -

        +
        1. While a reflex is processing an incoming event in a Cognize method, or
        2. During materialization of a program circuit which is invalid.
        3. -
      +

      In both cases, two types of “traces” will be printed out automatically before the process exits. -One of these traces is the standard Go stack trace. This is useful to pin-point the location in the -Go implementation of a reflex where the panic occurs, in the event of panics occuring in Cognize -methods. The Go stack trace, however, will not reflect the materialization path that lead to the -creation of the problematic reflex. This is reflected by the second type of trace, which we demonstrate -by example. +One of these traces is the standard Go stack trace. +This is useful to pin-point the location in the Go implementation of a reflex where the panic occurs, +in the event of panics occurring in Cognize methods. +The Go stack trace, however, will not reflect the materialization path +that lead to the creation of the problematic reflex. +This is reflected by the second type of trace, +which we demonstrate by example. -

      Consider the following toy Escher program: +

      Consider +the following toy Escher program: -

      -{
      -	*Show = "Parent circuit"
      +
      +Debug {
      +	*e.Show = "Parent circuit"
       
       	m *e.QuickMaterialize
      -	m:Residue = *Ignore
      +	m:Residue = *e.Ignore
       	m:Index = *e.Index
       	m:Program = {
       		*e.Breakpoint = 1
      @@ -49,9 +52,20 @@ 

      Panic traces

      }
      -

      This program will first materialize the inner program, which in turn will send the constant 1 -to the breakpoint reflex, causing it to panic. In other words, an outer circuit materializes an inner circuit -and subsequnetly a panic occurs in the inner circuit. The goal of the Escher trace is to reflect that. +

      This program will first materialize the inner program, +which in turn will send the constant 1 to the breakpoint reflex, +causing it to panic. +In other words, an outer circuit materializes an inner circuit, +and subsequently a panic occurs in the inner circuit. +The goal of the Escher trace is to reflect that. + +

      When run with: + +

      +src_dir="$GOPATH/src/github.com/gocircuit/escher/src/"
      +escher -src "$src_dir" "*tutorial.Debug"
      +
      + The following Escher trace will be printed:
      @@ -80,9 +94,9 @@ 

      Panic traces

      DIRECTIVE(:Index :Program :Residue) *e.QuickMaterialize/*e.QuickMaterialize CIRCUIT() { m *e.QuickMaterialize - 0 *Show + 0 *e.Show 1 "Parent circuit" - 2 *Ignore + 2 *e.Ignore 3 *e.Index 4 { 0 *e.Breakpoint @@ -99,37 +113,42 @@

      Panic traces

      MAIN()
      -

      Escher traces consist of frames, indicated by capital letters. Frames correspond to -reflexes (basis or derivative) or directives. They are listed in most-specific to least-specific -order: The first frame corresponds to the problematic reflex, whereas the last one corresponds -to the main circuit being materialized. +

      Escher traces consist of frames, indicated by capital letters. +Frames correspond to reflexes (basis or derivative) or directives. +They are listed in most-specific to least-specific order: +The first frame corresponds to the problematic reflex, +whereas the last one corresponds to the main circuit being materialized. -

      Since every frame corresponds to a reflex that is materialized, a list of valves connected -to this reflex is given in brackets next to the frame name. Following the brackets is a frame -argument whose meaning depends on the type of frame: +

      Since every frame corresponds to a reflex that is materialized, +a list of valves connected to this reflex is given in brackets next to the frame name. +Following the brackets is a frame argument whose meaning depends on the type of frame:

      • MAIN marks the start of the Escher runtime. -
      • MATERIALIZE frames mark the beginning of materialization. The argument of such frames -describe the program that is being materialized. +
      • MATERIALIZE frames mark the beginning of materialization. + The argument of such frames describe the program that is being materialized.
      • DIRECTIVE frames indicate that a directive gate value is being resolved. -The argument equals the source of the directive, followed by the computed fully-qualified -source of directive (in case the directive uses local addressing). -
      • CIRCUIT frames indicate that a program circuit is being materialized. Their -argument equals the circuit source. + The argument equals the source of the directive, + followed by the computed, fully-qualified source of directive + (in case the directive uses local addressing). +
      • CIRCUIT frames indicate that a program circuit is being materialized. + Their argument equals the circuit source.
      • BASIS frames indicate that a basis reflex is being materialized.
      • NOUN frames indicate that a noun reflex is being materialized.
      -

      Instrumentation reflexes

      +

      2. Instrumentation reflexes

      -

      In many lanuages the simplest instrumentation technique is the insertion of “printf” -statements. Escher has its own analog. Given a link in a circuit program, the idea is to print out -the values that flow through that link without otherwise affecting the execution of the program. +

      In many languages, the simplest instrumentation technique +is the insertion of “printf” statements. +Escher has its own analog. +Given a link in a circuit program, +the idea is to print out the values that flow through that link +without otherwise affecting the execution of the program. -

      This is accomplished with the use of a *Show reflex, which simply lets values -pass through it while printing them on standard error together with the name of the valve they -were received on. +

      This is accomplished with the use of a *e.Show reflex, +which simply lets values pass through it while printing them on standard error +together with the name of the valve they were received on.

      Suppose the following program is to be debugged: @@ -141,14 +160,14 @@

      Instrumentation reflexes

      }
      -

      We could then add a debug *Show reflex to “eavesdrop” on the link +

      We could then add a debug *e.Show reflex to “eavesdrop” on the link from source to sink, like so:

       {
       	source *Source
       	sink *Sink
      -	eve *Show
      +	eve *e.Show
       	source: = eve:Source
       	eve:Sink = sink:
       }
      diff --git a/index.html b/index.html
      index d87ebb5..d59ddff 100644
      --- a/index.html
      +++ b/index.html
      @@ -14,7 +14,7 @@
       	
       

      Escher language

      -

      Web pages and links form a graph. Datacenter computers and cables form a graph. +

      Web pages and links form a graph. Data-center computers and cables form a graph. Application processes and connections form a graph. Facebook users and friendships form a graph. Facebook groups and memberships form a graph. Neurons and synapses form a graph. Threads and shared data structures form a graph. @@ -22,7 +22,7 @@

      Escher language

      Not only are all of the above situations visually described by graphs, but also their essential behavior (as best as we understand it) is the same in all cases: -Independent processing units, pairwise-interlinked by sequential channels—both channels +Independent processing units, pairwise-interlinked by sequential channels — both channels and processors emerging and disappearing asynchronously.

      Three decades ago, before the above examples were within practical reach, @@ -33,7 +33,7 @@

      Escher language

      machines interacting with each other, animals interacting with animals, cells interacting with cells, proteins interacting with proteins, and so on. -

      He called this high-level behavioral model of the world (or discernable subsystems thereof) +

      He called this high-level behavioral model of the world (or discernible subsystems thereof) Communicating Sequential Processes. Hoare's model is nothing more and nothing less than a minimal abstraction of how we see and understand (and subsequently will to control) the world from an diff --git a/install.html b/install.html index 0777061..5b1ed7b 100644 --- a/install.html +++ b/install.html @@ -12,7 +12,7 @@

      -

      Bulding and installing Escher

      +

      Building and installing Escher

      Escher requires the Go language toolchain to be installed first. Fetching, building and installing Escher can then be accomplished with one command: diff --git a/meaning.html b/meaning.html index a45d6b4..017a01c 100644 --- a/meaning.html +++ b/meaning.html @@ -174,7 +174,7 @@

      Programs

      tkr: = sum:Sum sum:X = :Phase - sum:Y = *Show + sum:Y = *e.Show }
      diff --git a/syntax.html b/syntax.html index 53a7101..8e95863 100644 --- a/syntax.html +++ b/syntax.html @@ -207,7 +207,7 @@

      Gates

      floating 3.14 complex (1-3i) quoted "abcd\n\tefgh" - backquoted ` + backQuoted ` <html> <div>abc</div> </html> From 3c89c66fe7e044afc5f4fdeb03535d1449a14366 Mon Sep 17 00:00:00 2001 From: hoijui Date: Wed, 1 May 2019 11:05:57 +0200 Subject: [PATCH 07/18] generate.sh: allow to automatically commit and push the changes --- generate.sh | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/generate.sh b/generate.sh index 2111c73..c7e93a1 100755 --- a/generate.sh +++ b/generate.sh @@ -1,14 +1,40 @@ -#!/bin/sh +#!/bin/bash # *nix script to generate the HTML handbook # from the sources in "github.com/gocircuit/escher/src/handbook". -src_dir="$GOPATH/src/github.com/gocircuit/escher/src/" +commit="false" +if [ "$1" = "-c" ] +then + commit="true" +fi +escher_repo="$GOPATH/src/github.com/gocircuit/escher" +src_dir="$escher_repo/src" + +# Generate the static HTML pages escher -src "$src_dir" "*handbook.main" +# Copy over the resources cp -r "$src_dir/handbook/css" ./ cp -r "$src_dir/handbook/img" ./ cp -r "$src_dir/handbook/pdf" ./ - rm -f css/font/.gitignore +# Create a git commit, if requested, and if there are local changes +local_changes=$(git status --porcelain) +if [ "$commit" = "true" -a "$local_changes" != "" ] +then + echo "Committing ..." + git add --all + branch_name=$(cd "$escher_repo" ; git rev-parse --abbrev-ref HEAD) + remote_and_branch_name=$(cd "$escher_repo" ; git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)) + commit_description=$(cd "$escher_repo" ; git describe --tags --always) + #commit_date=$(cd "$escher_repo" ; git log -1 --format="%at" | xargs -I{} date -d @{} +"%d. %B %Y %H:%M:%S") + commit_date=$(cd "$escher_repo" ; git log -1 --format="%at" | xargs -I{} date -d @{} +"%d. %B %Y") + #commit_time=$(cd "$escher_repo" ; git log -1 --format="%at" | xargs -I{} date -d @{} +"%H:%M:%S") + git commit --quiet --message "latest as of $commit_date, generated from $remote_and_branch_name $commit_description" && \ + git push --quiet && \ + echo "Pushed!" || \ + echo "Failed!" +fi + From 86076e5aed56bec6ed92f892788a2c054982b65b Mon Sep 17 00:00:00 2001 From: hoijui Date: Wed, 1 May 2019 11:06:32 +0200 Subject: [PATCH 08/18] latest as of 01. May 2019, generated from hoijui/master b8d9c41 --- index.html | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/index.html b/index.html index d59ddff..b0acbd5 100644 --- a/index.html +++ b/index.html @@ -12,46 +12,57 @@
      -

      Escher language

      +

      Escher programming language

      -

      Web pages and links form a graph. Data-center computers and cables form a graph. -Application processes and connections form a graph. Facebook users and -friendships form a graph. Facebook groups and memberships form a graph. -Neurons and synapses form a graph. Threads and shared data structures form a graph. +

      Motivation

      + +

      Web pages and links form a graph. +Data-center computers and cables form a graph. +Application processes and connections form a graph. +Facebook users and friendships form a graph. +Facebook groups and memberships form a graph. +Neurons and synapses form a graph. +Threads and shared data structures form a graph. Processes and sockets form a graph.

      Not only are all of the above situations visually described by graphs, but also their essential behavior (as best as we understand it) is the same in all cases: -Independent processing units, pairwise-interlinked by sequential channels — both channels -and processors emerging and disappearing asynchronously. +They are comprised of independent processing units, +which are pairwise-interlinked by sequential channels, +while both channels and processors are emerging and disappearing asynchronously.

      Three decades ago, before the above examples were within practical reach, -a British gentleman—named Tony -Hoare—had noticed that this essential behavior was exhibited by virtually -all identifiable interacting physical (as well as man-made abstract) entities: People interacting with people, -people interacting with vending machines, components of vending -machines interacting with each other, animals interacting with animals, -cells interacting with cells, proteins interacting with proteins, and so on. +a British gentleman — named Tony +Hoare — had noticed that this essential behavior was exhibited by virtually +all identifiable interacting physical (as well as man-made abstract) entities: +People interacting with people, +people interacting with vending machines, +components of vending machines interacting with each other, +animals interacting with animals, +cells interacting with cells, +proteins interacting with proteins, +and so on.

      He called this high-level behavioral model of the world (or discernible subsystems thereof) Communicating Sequential Processes. Hoare's model is nothing more and nothing less than a minimal abstraction of how -we see and understand (and subsequently will to control) the world from an -observer—i.e. third person—point of view. +we see and understand (and subsequently will to control) the world +from an observer — i.e. third person — point of view. -

      I prefer to call such systems circuits both for brevity and for the fact that +

      I prefer to call such systems circuits, both for brevity and for the fact that electrical circuits were probably the first man-made manifestation of communicating sequential processes that was rich, flexible and not present in untouched nature.

      Today's connected Internet services and devices are no different than electrical components on a circuit: They are independent processing units communicating via sequential streams of data, as opposed to sequential streams of changes in electrical voltage. The difference -between circuits analog and digital is entirely linguistic: It is the difference between a +between analog and digital circuits is entirely linguistic: It is the difference between a floating-point number (the voltage) and a data structure (a digital message).

      If it is indeed the case that most things that we program or that we program about are circuits at the end of the day, then it is only appropriate to complement Hoare's -model of everything with an appropriate programming language. This is the goal of Escher. +model of everything with an appropriate programming language. +This is the goal of Escher.

      Sources

      From ae9ddfdf3f1b352865b480a75fce8e879968cbe8 Mon Sep 17 00:00:00 2001 From: hoijui Date: Wed, 29 May 2019 10:06:02 +0200 Subject: [PATCH 09/18] latest as of 29. May 2019, generated from hoijui/master 7c3bb6f --- basis.html | 8 +- cloud.html | 180 ++++++++++++------------ css/main.css | 17 ++- debug.html | 64 ++++----- definitions.html | 86 ++++++++++++ glossary.html | 356 +++++++++++++++++++++++++++++++++++++++++++++++ index.html | 2 +- install.html | 29 ++-- m.html | 2 +- meaning.html | 79 ++++++++--- program.html | 16 +-- syntax.html | 67 ++++++++- 12 files changed, 734 insertions(+), 172 deletions(-) create mode 100644 definitions.html create mode 100644 glossary.html diff --git a/basis.html b/basis.html index c4ab712..705c293 100644 --- a/basis.html +++ b/basis.html @@ -20,11 +20,11 @@

      Reflex basis and faculties

      There are two kinds of reflexes in Escher:

      • Basis reflexes - are implemented in the underlying technology — - the Go language — and linked into the runtime + are implemented in the underlying technology — + the Go language — and linked into the runtime
      • Derivative reflexes - are compositions of other reflexes, - described by program circuits + are compositions of other reflexes, + described by program circuits

      We will now have a look at the equivalent of std in C++, diff --git a/cloud.html b/cloud.html index 9402023..3e7d039 100644 --- a/cloud.html +++ b/cloud.html @@ -72,14 +72,14 @@

      Framework

      • Every host in the system is identified by a unique string identifier
      • Every service “resides” on one host and every such service has a string identifier, - unique only across the services residing on the same host. + unique only across the services residing on the same host.
      • Every service has a “type” denoted by a string - (which will correspond to the Docker image name of its container). + (which will correspond to the Docker image name of its container).
      • Every service can have zero or more named “valves” - (where a valve will correspond to a TCP connection, client or server) - under the requirement that valve names are unique within one service. + (where a valve will correspond to a TCP connection, client or server) + under the requirement that valve names are unique within one service.
      • Every link “connects” one service-valve pair to another, - so that no such pair is connected more than once. + so that no such pair is connected more than once.

      Relationships between the components of a system can be represented visually using the same @@ -139,9 +139,9 @@

      The resulting UI to the engineer

      1. Connect to the “cloud” and retrieve a consistent representation of the “current” cloud state.
      2. Compute the difference between a representation of the “desired” state of the cloud - and the retrieved “current” state. + and the retrieved “current” state.
      3. Send a minimal stream of “commands” to the cloud, - aimed at modifying its state from “current” to “desired”. + aimed at modifying its state from “current” to “desired”.

      In the remainder of this document, we describe the design of a command-line tool @@ -299,9 +299,9 @@

      Preparing Docker service containers

      execution of a container, our framework can
      • (i) obtain the TCP server address corresponding to each valve - (if there is one), as well as + (if there is one), as well as
      • (ii) supply the remote TCP server address - if the valve also corresponds to a TCP client connection. + if the valve also corresponds to a TCP client connection.

      There are various ways to prepare Docker containers to accomplish this, and we do not @@ -349,93 +349,93 @@

      Materializing a dual form to the cloud

      1. Obtain a list of available and unused hosts in the cloud. -

        The Circuit API - presents all of its resources uniformly as a *nix style file system, - where root level directories correspond to available hosts. - Unused hosts are precisely those root level directories, - that have no children - (i.e. no services or other Circuit elements are running on them). - Such a list can be obtained through the API, - or through the command line using circuit ls /.... - Let us assume, for instance, that the list of available and unused hosts is -

        -    /X65cc3c8e31817756
        -    /Xe4abe0c286b0e0bc
        -    /X9738a5e29e51338e
        -    
        +

        The Circuit API + presents all of its resources uniformly as a *nix style file system, + where root level directories correspond to available hosts. + Unused hosts are precisely those root level directories, + that have no children + (i.e. no services or other Circuit elements are running on them). + Such a list can be obtained through the API, + or through the command line using circuit ls /.... + Let us assume, for instance, that the list of available and unused hosts is +

        +	/X65cc3c8e31817756
        +	/Xe4abe0c286b0e0bc
        +	/X9738a5e29e51338e
        +	
      2. Group the elements of the list of services (from the dual) by host, - and assign a unique (available and unused) Circuit host to each of the hosts from dual. - For instance: -
        -    (/X65cc3c8e31817756, host1)
        -    (/Xe4abe0c286b0e0bc, host2)
        -    
        + and assign a unique (available and unused) Circuit host to each of the hosts from dual. + For instance: +
        +	(/X65cc3c8e31817756, host1)
        +	(/Xe4abe0c286b0e0bc, host2)
        +	
      3. Execute every service in the dual as follows. - Take, for instance, the service -
        -    (host1.cache, MemCache)
        -    
        - -
          -
        • Create a dedicated, light-weight DNS server for this service, - on the Circuit host assigned to this service in the previous step. - Using the Circuit, we spawn a DNS element and choose its name to follow this convention: -
          -        /X65cc3c8e31817756/host1/cache/dns
          -        
          -

          This is accomplished using the Circuit command circuit mkdns. - The details of this are omitted for brevity. - Initially, the DNS server will have no resource records, - i.e. it will not resolve any lookups. - Appropriate records will be added to it later, - when we materialize the list of links from the dual form. -

        • Execute the service's Docker container on that same host, - using a similar naming convention: -
          -        /X65cc3c8e31817756/host1/cache/service
          -        
          -

          This is accomplished using the Circuit command circuit mkdkr. - Recall that the service type — MemCache in this case — - is the name of the Docker image to be used. - Furthermore, the IP address of the DNS server created in the previous step - is passed to the Docker container on execution. -

        + Take, for instance, the service +
        +	(host1.cache, MemCache)
        +	
        + +
          +
        • Create a dedicated, light-weight DNS server for this service, + on the Circuit host assigned to this service in the previous step. + Using the Circuit, we spawn a DNS element and choose its name to follow this convention: +
          +		/X65cc3c8e31817756/host1/cache/dns
          +		
          +

          This is accomplished using the Circuit command circuit mkdns. + The details of this are omitted for brevity. + Initially, the DNS server will have no resource records, + i.e. it will not resolve any lookups. + Appropriate records will be added to it later, + when we materialize the list of links from the dual form. +

        • Execute the service's Docker container on that same host, + using a similar naming convention: +
          +		/X65cc3c8e31817756/host1/cache/service
          +		
          +

          This is accomplished using the Circuit command circuit mkdkr. + Recall that the service type — MemCache in this case — + is the name of the Docker image to be used. + Furthermore, the IP address of the DNS server created in the previous step + is passed to the Docker container on execution. +

      4. For each link in the list of links, - add DNS resource records to the appropriate DNS servers. - Take for instance the link: -
        -    (host1.cache:z, host2.database:w)
        -    
        - -
          -
        • First, we inquire into the TCP server address for host1.cache:z, - if one is available. - To do so, we access the Docker container -
          -        /X65cc3c8e31817756/host1/cache/service
          -        
          - and we query the TCP server address for the valve named z, - using the Docker port exporting provisions set in place as described earlier. - -
        • Next, we access the Circuit DNS element -
          -        /Xe4abe0c286b0e0bc/host2/database/dns
          -        
          - and set the resource record for the domain name w - to that TCP server address obtained in the previous step. - In addition to setting a DNS A record for the name w, - we also set a DNS TXT record for the same record with the value of host1.cache:z. - This TXT record will later facilitate recovering the dual form - for this link directly from the DNS server itself. - -
        • Finally, we repeat the same process with the roles - of host1.cache:z - and host2.database:w reversed. - -
        + add DNS resource records to the appropriate DNS servers. + Take for instance the link: +
        +	(host1.cache:z, host2.database:w)
        +	
        + +
          +
        • First, we inquire into the TCP server address for host1.cache:z, + if one is available. + To do so, we access the Docker container +
          +		/X65cc3c8e31817756/host1/cache/service
          +		
          + and we query the TCP server address for the valve named z, + using the Docker port exporting provisions set in place as described earlier. + +
        • Next, we access the Circuit DNS element +
          +		/Xe4abe0c286b0e0bc/host2/database/dns
          +		
          + and set the resource record for the domain name w + to that TCP server address obtained in the previous step. + In addition to setting a DNS A record for the name w, + we also set a DNS TXT record for the same record with the value of host1.cache:z. + This TXT record will later facilitate recovering the dual form + for this link directly from the DNS server itself. + +
        • Finally, we repeat the same process with the roles + of host1.cache:z + and host2.database:w reversed. + +
      diff --git a/css/main.css b/css/main.css index f88df0a..a670cca 100644 --- a/css/main.css +++ b/css/main.css @@ -1,4 +1,4 @@ -*, body, li, ul, table, td, ul, ol, dt, dd { +body, li, ul, table, ul, ol, dt, dd { /*background: rgb(240,255,255);*/ background: rgb(245,255,255); /*color: rgba(95,95,95, 0.8);*/ @@ -9,8 +9,19 @@ /*letter-spacing: -0.05em;*/ } +/* Highlights link targets: The tag with the id set to the part of the URL after the '#'. */ +*:target { + background: #FF4; + -webkit-transition: all 1s linear; +} + +/* This makes highlighted table rows be a single area, instead of being separated column-fields. */ +table { + border-collapse:collapse; +} + .paddingBetweenRows td { - padding: 0 15px 0 15px; + padding: 0 15px 0 15px; } body, div { @@ -68,7 +79,7 @@ pre { div.page { margin: auto auto; padding: 4em; - //width: 750px; + /*width: 750px;*/ } div.header { diff --git a/debug.html b/debug.html index 3d83fda..b8ffdf3 100644 --- a/debug.html +++ b/debug.html @@ -36,7 +36,7 @@

      1. Panic traces

      This is reflected by the second type of trace, which we demonstrate by example. -

      Consider +

      Consider the following toy Escher program:

      @@ -72,41 +72,41 @@ 

      1. Panic traces

      BASIS(:) DIRECTIVE(:) *e.Breakpoint/*e.Breakpoint CIRCUIT() { - 0 *e.Breakpoint - 1 1 - 0: = 1: + 0 *e.Breakpoint + 1 1 + 0: = 1: } MATERIALIZE() { - 0 *e.Breakpoint - 1 1 - 0: = 1: + 0 *e.Breakpoint + 1 1 + 0: = 1: } BASIS(:Residue :View) DIRECTIVE(:Residue :View) *e.Materialize/*e.Materialize CIRCUIT(:Index :Program :Residue) { - x *e.Materialize - y *e.Fork - :Residue = x:Residue - :Index = y:Index - :Program = y:Program - x:View = y: + x *e.Materialize + y *e.Fork + :Residue = x:Residue + :Index = y:Index + :Program = y:Program + x:View = y: } DIRECTIVE(:Index :Program :Residue) *e.QuickMaterialize/*e.QuickMaterialize CIRCUIT() { - m *e.QuickMaterialize - 0 *e.Show - 1 "Parent circuit" - 2 *e.Ignore - 3 *e.Index - 4 { - 0 *e.Breakpoint - 1 1 - 0: = 1: - } - 0: = 1: - m:Program = 4: - m:Residue = 2: - m:Index = 3: + m *e.QuickMaterialize + 0 *e.Show + 1 "Parent circuit" + 2 *e.Ignore + 3 *e.Index + 4 { + 0 *e.Breakpoint + 1 1 + 0: = 1: + } + 0: = 1: + m:Program = 4: + m:Residue = 2: + m:Index = 3: } DIRECTIVE() *tutorial.Debug/*tutorial.Debug MATERIALIZE() *tutorial.Debug @@ -126,13 +126,13 @@

      1. Panic traces

      • MAIN marks the start of the Escher runtime.
      • MATERIALIZE frames mark the beginning of materialization. - The argument of such frames describe the program that is being materialized. + The argument of such frames describe the program that is being materialized.
      • DIRECTIVE frames indicate that a directive gate value is being resolved. - The argument equals the source of the directive, - followed by the computed, fully-qualified source of directive - (in case the directive uses local addressing). + The argument equals the source of the directive, + followed by the computed, fully-qualified source of directive + (in case the directive uses local addressing).
      • CIRCUIT frames indicate that a program circuit is being materialized. - Their argument equals the circuit source. + Their argument equals the circuit source.
      • BASIS frames indicate that a basis reflex is being materialized.
      • NOUN frames indicate that a noun reflex is being materialized.
      diff --git a/definitions.html b/definitions.html new file mode 100644 index 0000000..c142714 --- /dev/null +++ b/definitions.html @@ -0,0 +1,86 @@ + + + + + Escher Definitions + + + +
      + Escher A language for connecting technologies using pure metaphors +
      + +
      + +

      Definitions

      + +

      As Escher is a so called Conceptual Programming Language, +it uses concepts that are very different then what you may know +from Object Oriented or Functional Programming, for example. +It therefore also uses very different concepts, parts, and names thereof. +This section tries to clarify those names. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Declarative unitJavaEscherC++
      Basic declaration unitclasscircuitclass
      Logical group of basic declaration unitspackagefacultynamespace
      Runtime instantiation of a basic declaration unitinstancegateinstance
      The runtime structure containing all the codeclass-pathindexLD_LIBRARY_PATH
      Unique string identifier of a declaration unitfully-qualified (class-)nameaddressfully-qualified (class-)name
      The underlying runtimeJVMEscher runtimethe OS
      The underlying technologyJVMGolangthe OS
      + + +

      + + + + + + \ No newline at end of file diff --git a/glossary.html b/glossary.html new file mode 100644 index 0000000..b90308f --- /dev/null +++ b/glossary.html @@ -0,0 +1,356 @@ + + + + + Escher - Explanation of important words + + + +
      + Escher A language for connecting technologies using pure metaphors +
      + +
      + + +

      Explanation of important words

      + +

      Gate statements begin on a new line with a gate name identifier, space, and a gate value expression. + There are six value types that can be expressed: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      WordAlternative WordsMeaningSyntaxExampleExplanation
      Flow + TODO (A synonym for Link?) see go code of the circuit struct + at circuit/circuit.go +
      Vectorvalve-ID?-- + gateX:valveNo3
      + :valveNo3
      + gateX:
      + : +
      + A qualified valve, consisting of a gate-name + and one of its valves names, separated with a ":".
      + If the gate is being omitted, the vector refers to the super gte.
      + If the valve is being omitted, the vector refers to the default valve. +
      Facultypackage?Faculty meaning-- + Eschers word for a namespace; a group of escher source files in a single directory, + respectively the circuits therein. +
      Circuit-Circuit meaningCircuit syntaxTODOTODO
      GateMembrane?
      Brane?
      -Gate syntaxTODOTODO
      Address---rootFaculty.parentFac.childFac.theGate
      + TODO or is it "topMostGate.lowerGate.lowestGate" ?
      + I think it is the first one, + but what is the second one, or is it an address too?
      + I guess it is practically simply never used/required +
      + The fully qualified path to a gate, relative to a certain Index. +
      Directive-Directive meaning- + materialize: + *fully.qualified.Name
      + recall: + @fully.qualified.Name +
      TODO
      Verbinstruction?-- + *
      or
      @ +
      + Can be either "*" (materialize) + or "@" (recall), + and is the first part of a Directive +
      materialize---TODOTODO
      recall---TODOTODO
      Index-Index meaning-TODOTODO
      SeriesSeries meaningSeries syntax + implicit series: +
      +alpha {
      +	*fully.qualified.Name
      +	@fully.qualified.Name
      +	123
      +	3.14
      +	(1-3i)
      +	"abcd\n\tefgh"
      +	
      +	{
      +		A 1
      +		B "C"
      +	}
      +}
      +			
      + + which is equivalent to this explicit series: + +
      +alpha {
      +	0 *fully.qualified.Name
      +	1 @fully.qualified.Name
      +	2 123
      +	3 3.14
      +	4 (1-3i)
      +	5 "abcd\n\tefgh"
      +	6 
      +	7 {
      +		A 1
      +		B "C"
      +	}
      +}
      +			
      +
      TODO
      Map-Map meaning- +
      +ImplicitIntMap {
      +	*fully.qualified.Name
      +	123
      +	3.14
      +}
      +
      +ExplicitIntMap {
      +	3   *fully.qualified.Name
      +	6   @fully.qualified.Name
      +	1   123
      +}
      +
      +StringMap {
      +	directive  *fully.qualified.Name
      +	integral   123
      +	floating   3.14
      +}
      +			
      +
      TODO
      Tree-Tree meaning- +
      +Tree {
      +	Trunk {
      +		Branches {
      +			"Johnny"
      +			"Katie"
      +		}
      +	}
      +	Root {
      +		Tentacles {
      +			"Grandpa"
      +			"Grandma"
      +		}
      +	}
      +}
      +			
      +
      TODO
      Programrunnable/executable circuit?Program meaning- + See any of the *Main circuits in the + Escher tutorials + TODO
      Valve----TODO
      Super Gatesuper-membrane
      super-brane
      -- + :valveNo3 (vector with valve valveNo3 on the super gate)
      + : (vector with default valve on the super gate) +
      TODO
      Default Valve + gateX: (vector on gate gateX with the default valve)
      + : (vector on the super gate with the default valve) +
      TODO
      Name---- + The name part of a gate. + Each gate is comprised of a name and a value. + A name can be any string without spaces, + but in practise you probably want to limit it more, + say to a common definition of a variable name as found in many other languages, + for example using the regex: [a-zA-Z0-9_]+ +
      Value--- +
      +SomeCircuit {
      +	directive1 *fully.qualified.Name
      +	directive2 @fully.qualified.Name
      +	integral   123
      +	floating   3.14
      +	complex	(1-3i)
      +	quoted	 "abcd\n\tefgh"
      +	backQuoted 
      +}
      +			
      +
      + The value part of a gate. + Each gate is comprised of a name and a value. + FIXME Some point of the documentation says, the value cna be any Go value, while an other part states, + that it cane be one of Integer, Float, complex-number, string, directive or circuit. Both can't be true. +
      + + + + +

      + + + + + + \ No newline at end of file diff --git a/index.html b/index.html index b0acbd5..79f2396 100644 --- a/index.html +++ b/index.html @@ -112,7 +112,7 @@

      Case studies

      - +

    -

    Indices

    -

    More generally than series, when a circuit has no links, we call it an index, and -we view it as a map from integers and/or strings to anything else. In this respect, an index -is akin in purpose to structures, dictionaries, hash tables and maps in other languages. +

    Maps

    + +

    +More generally than series, +when a circuit has no valves/links, +we call it a map (previously index), +and we view it as a mapping from integers and/or strings to anything else. +In this respect, a map is akin in purpose to structures, dictionaries, hash tables and maps in other languages. +

    + +
    +ImplicitIntMap {
    +	*fully.qualified.Name
    +	123
    +	3.14
    +}
    +
    +ExplicitIntMap {
    +	3   *fully.qualified.Name
    +	6   @fully.qualified.Name
    +	1   123
    +}
    +
    +StringMap {
    +	directive  *fully.qualified.Name
    +	integral   123
    +	floating   3.14
    +}
    +
    + -

    The gate values of index circuits are analogously called children and they can -be of primitive types (integers, floats, etc.) as well as recursively they can be other circuits -or indices. +

    Trees

    + +

    +The gate values of map circuit are analogously called children, +and they can be of primitive types (integers, floats, etc.) +as well as recursively, they can be other circuits or maps.

    -Tree {
    +TreeCircuit {
     	Trunk {
     		Branches {
     			"Johnny"
    @@ -85,13 +115,28 @@ 

    Indices

    } }
    +

    + +

    +Such recursive structures of maps, or just trees for short, +serve the same purpose as file-systems, namespaces, trees and others: +To organize their internal and leaf values in a hierarchical manner, +so that each node (internal or leaf) is identifiable by a unique path. +

    -

    Such recursive structures of indices, or just indices for short, serve the same purpose as -file-systems, namespaces, trees and others: To organize their internal and leaf values in a -hierarchical manner, so that each node (internal or leaf) is identifiable by a unique -path which we shall call address of a value relative to a given index. -

    For instance, the address of "Grandma" relative to the index +

    Indices

    + +

    +An Escher index is basically a tree circuit, +which we interpret as a an absolute (and in future releases also relative) +tree containing all circuits/gates. +This also associates a unique path to each gate, +which we shall call address of a value relative to a given index. +

    + +

    +For instance, the address of "Grandma" relative to the index Tree would be

    @@ -102,6 +147,8 @@ 

    Indices

    }
    (Note that addresses are represented by series circuits.) +

    +

    Directives

    @@ -154,9 +201,9 @@

    Programs

    defined within the circuit or the empty-string gate name.

    The empty-string gate name represents an implicit -“enclosing” or “parent” circuit. In particular, program -circuits are not allowed to define a gate with the empty-string -name. +“enclosing” or “parent” circuit we call super gate. +In particular, program circuits are not allowed to use a vector +with the empty-string name.

    Links whose endpoints are connected to the same gate name are allowed, as long as they connect into different diff --git a/program.html b/program.html index 261e424..eba2ec5 100644 --- a/program.html +++ b/program.html @@ -82,15 +82,15 @@

    Expanding directives

    1. The runtime looks up the “target” value, which resides in the index - at the address specified in the directive.
    2. + at the address specified in the directive.
    3. -
        -
      • If the directive verb is @, the gate is materialized as a noun gate - emitting the target value.
      • -
      • If the directive verb is *, the target value is substituted as the gate value, - and the materialization process described in this section is repeated now with the target - value as the gate value. -
      +
        +
      • If the directive verb is @, the gate is materialized as a noun gate + emitting the target value.
      • +
      • If the directive verb is *, the target value is substituted as the gate value, + and the materialization process described in this section is repeated now with the target + value as the gate value. +
    diff --git a/syntax.html b/syntax.html index 8e95863..71cc615 100644 --- a/syntax.html +++ b/syntax.html @@ -19,6 +19,65 @@

    Syntax and meaning

    XML as a syntax that represents labeled trees, then Escher would be a syntax that represents labeled graphs. +

    Syntax comparison with Java and C++

    + +

    As Escher is a so called Conceptual Programming Language, +it uses concepts that are very different then what you may know +from Object Oriented or Functional Programming, for example. +It therefore also uses very different concepts, parts, and names thereof. +This section tries to clarify those names. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Declarative unitJavaEscherC++
    Basic declaration unitclasscircuitclass
    Logical group of basic declaration unitspackagefacultynamespace
    Runtime instantiation of a basic declaration unitinstancegateinstance
    The runtime structure containing all the codeclass-pathindexLD_LIBRARY_PATH
    Unique string identifier of a declaration unitfully-qualified (class-)nameaddressfully-qualified (class-)name
    The underlying runtimeJVMEscher runtimethe OS
    The underlying technologyJVMGolangthe OS
    +

    Circuits

    A circuit consists of nodes, called gates, which have @@ -36,7 +95,7 @@

    Symbolism

    Circuits have a standard visual representation that fully captures the internal structure of the circuit, which consists of the -gate names and links and excludes the gate values—the external structure. +gate names and links and excludes the gate values — the external structure.

    To draw a circuit, we start with a solid black oval, denoting the circuit's internal name space. White ovals — contained inside the black one and mutually non-overlapping — denote gates. @@ -151,9 +210,9 @@

    Comments

    we use "//" in the beginning, or "/*" plus "*/" at the end.
    -alpha {          `// circuit definition`
    +alpha {		  `// circuit definition`
     	float 1.23 ; `// gate named float with a floating-point value`
    -	beta {}    ; `// gate named beta with an empty circuit value`
    +	beta {}	; `// gate named beta with an empty circuit value`
     	`/*
     	  * We can also do this:
     	  * A multi-line comment within a circuit definition.
    @@ -357,7 +416,7 @@ 

    Syntactic sugar

    0: = 1:
    - +