GithubHelp home page GithubHelp logo

minijsc's Introduction

minijsc

minijsc is an unfinished effort to write a compiler runtime for a subset of JS. It followed the design of Lox and was hacked together during nights and weekends,

Lox : craftinginterpreters.com

minijsc is largely limited to variables, primitive values, basic control flow using if/else/for/while statements and functions.

This was mostly an exercice in writing an interpreter, runtime and compiler.

I've stopped working on this as the initial design was suffering from extra complexity and was essentially faulty:

  • The initial approach to representing values made writing a GC impenetrable
  • The AST representation used pointers and was very easy to break when given bad programs.
  • C++ has a few oddities that made debugging hard and very time consuming
  • When building the GC I used smart pointers and represented the heap as as a vector of smart pointers but this turned out to be a bad idea as erase and reset were very easy to get wrong and ended up with leaks.

All in all I learned a lot building this and now it goes into the graveyard.

Build

You don't have to build this since it has no use, better to just explore code.

If you do insist on building it you'll need CMake and clang 16.0.

$ mkdir build/
$ cd build
$ cmake ..
$ make all

Currently the only third party library part of minijsc is fmt, it uses fmt v9.1.0.

minijsc's People

Watchers

 avatar

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.