evanup
a vaguely lispy language in the context of javascript
Last updated 4 years ago by ogu .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install evanup 
SYNC missed versions from official npm registry.

evan\up [wip]

<todo-description>

Visit evanup.io to see it in action.

npm install evanup

build status NPM version

<todo-retro-80s-logo>

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.

<todo>

Usage

evan FILE OPTIONS

Options:

  --semantics    Print TypeScript semantics.
  -v, --version  Show meta-model version.
  -h, --help     Show this message.

License

mit

Current Tags

  • 0.1.3                                ...           latest (4 years ago)

4 Versions

  • 0.1.3                                ...           4 years ago
  • 0.1.2                                ...           4 years ago
  • 0.1.1                                ...           4 years ago
  • 0.1.0                                ...           4 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 1
Dependencies (4)
Dev Dependencies (60)
Dependents (0)
None

Copyright 2014 - 2017 © taobao.org |