Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

evanup

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

evanup

a vaguely lispy language in the context of javascript

  • 0.1.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

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

FAQs

Package last updated on 25 Feb 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc