evanup
TypeScript icon, indicating that this package has built-in type declarations

0.1.3 • Public • Published

evan\up [wip]

Visit evanup.io to see it in action.

npm install evanup

build status NPM version

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's None).
    • The individual evaluation functions determine whether recursion into sub-values of sTyped objects happen.
  • 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

Readme

Keywords

none

Package Sidebar

Install

npm i evanup

Weekly Downloads

1

Version

0.1.3

License

MIT

Last publish

Collaborators

  • tetsuo