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:
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.
There are various ways to design and implement small sets of arithmetic basis reflexes that would render circuit programs Turing-complete. We leave the design of such bases to the users of Escher, whose imagination and use cases might inform choices that we cannot predict from scratch.
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 a separate page. These gates can be viewed as Escher's “synchronization” facilities.
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.
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.