GithubHelp home page GithubHelp logo

robotlolita / furipota Goto Github PK

View Code? Open in Web Editor NEW
22.0 22.0 0.0 217 KB

(unmaintained) A discrete FRP DSL for describing better build pipelines.

License: MIT License

JavaScript 99.94% Shell 0.06%
build-automation functional-reactive-programming programming-language shell-scripting

furipota's Introduction

Hi, I'm Quil✨

I'm a programmer, artist, writer, and programming language designer.
I love cats, magical girls, pastels, and cute things.

Quil is pronounced as the English letter "Q".
Or /kjuː/ in IPA.

furipota's People

Contributors

robotlolita avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

furipota's Issues

MVP checklist

  • Plugins
  • Simple types (Text, Number, Boolean, Vector, Record)
  • Core library
    • Debugging (trace)
    • File System (files, remove, make-directory, write, read, copy)
    • Core (tap, sequence, from-vector, get, at)
  • Running definitions
  • Procedures
  • Listing available definitions when none is given
  • run should take an arbitrary expression

Future syntax changes

  • require @ for all option arguments (gets rid of the pesky record issues)
  • Remove {}, add Record.empty
  • support defining functions in records (less terrible match function)
  • spread (...) in vectors
  • open x in expr + conflict resolution

Simplify things by using a CFG-based IR for interpretation

The interpreter is now running the AST directly. This is alright except for the amount of work that is needed to do things when modifying any part of the AST. Moving to a separate IR fixes this as only the compilation passes need to be changed.

(This would also allow implementing tail calls and avoid using JavaScript's stack in the interpreter, so you get a bigger stack for function calls! And optimising the interpretation if necessary later -- it'd be easy to JIT to JavaScript --, though I'm not really worried about that).


A better move is to just wait for an implementation of CoreVM then compile to that.

Support mutually recursive local definitions (let rec)

Currently let introduces a new scope, so it's not possible to write mutually recursive definitions:

let x = y in
let y = 1 in
x

Will give you a y is not defined error, since y is not in x's scope. The solution for this is to introduce all definitions at the same time (we don't need a rec modifier since all bindings are lazily evaluated anyway):

let x = y
let y = 1
in x

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.