evanup
v0.1.3
Published
a vaguely lispy language in the context of javascript
Downloads
4
Readme
evan\up [wip]
Visit evanup.io to see it in action.
npm install evanup
Evan
Evan's language constructs (aka semantics types, or sTypes for short) are structurally described in description.json file.
As an example, a binary operation
definition looks like this:
"binary operation": {
"properties": {
"operator": { "type": "string" },
"left": { "type": "any" },
"right": { "type": "any" }
}
}
and here is an excerpt from an Evan program that uses this definition:
"body": {
"$sType": "if-then-else",
"condition": {
"$sType": "binary operation",
"operator": "<",
"left": {
"$sType": "value reference",
"name": "n"
},
"right": 2
}
For Evan, JSON is chosen as the concrete syntax- because it is a very well-known and supported format, and it's true.
But, of course, writing a program in JSON is tedious, uncomfortable and unproductive: after all, we'd be writing ASTs in a verbose form.
evanup.io
Enter evanup.io!, evanup is a peer to peer, decentralized webrtc client / projectional editor for building evan programs with friends in real-time.
It's built on top of many amazing technologies, which one of them happens to be Evan evaluator itself.
Execution == Evaluation
Evan "works" by providing the evaluator with any JSON input, and optionally an object table (external-objects).
The evaluator then tree-transforms this JSON according to the following rules:
- Objects which have a string-valued property
$sType
are processed by their respective evaluation function.- This evaluation never throws but returns something sensible: either an issue object or
undefined
(which corresponds loosely to e.g. Scala'sNone
). - The individual evaluation functions determine whether recursion into sub-values of sTyped objects happen.
- This evaluation never throws but returns something sensible: either an issue object or
- All other values (so also objects which are not "sTyped") are returned as-is.
On type checking
- Evaluation does (some) type checking - which obviously happens at runtime.
- A separate type checker (once it exists) mimics the evaluator but computes and checks typing statically: this should help the developer beyond what's reasonable in terms of unit tests.
- Evan is not statically typed, but could at some point become optionally-typed.
external Objects
External Objects is Evan's way of interfacing with things outside any Evan program on its own. It's nothing more than a map/dictionary of names to objects, which expose functions. Using the semantics type object-function invocation
, you can interact with functions on these objects.
Development
To get started with development, clone this repository and run npm install
or yarn
.
Usage
evan FILE OPTIONS
Options:
--semantics Print TypeScript semantics.
-v, --version Show meta-model version.
-h, --help Show this message.
License
mit