Skip to content

a Lisp that leverages continuation-passing style, dynamic stack frames, and tail call optimization to dramatically enhance JavaScript runtime performance. interpreter, runtime, and transpiler

Notifications You must be signed in to change notification settings

exbotanical/IDL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IDL - A Lisp-like syntax for functional programming

Table of Contents

Introduction

Packages

Features

  • Stack monitoring and garbage collection
  • CPS / Continuations (specifically, IDL control flow is recursively bound by continuation-passing)
  • Recursive Descent Parser
  • Concurrent Lexer for rendering ASTs
  • Compiles to JavaScript (cross-maps IDL ASTs into JavaScript syntax)

Documentation

Docs coming soon...

Abstractions

IDL Code Samples

IDL code samples have been relocated to this directory

Compiling to JavaScript (and optimizing)

IDL:

(resolver(){
    let (a = 2) {
      let (a = 3) {
        print(a);
      };
      print(a);
    };
  })();

JavaScript (pre-optimization):

(function ε_CC(ε_K1) { 
    STACK_GUARD(arguments, ε_CC); 
    (function ε_CC(ε_K2, a) { 
        STACK_GUARD(arguments, ε_CC); 
        (function ε_CC(ε_K3, a) { 
            STACK_GUARD(arguments, ε_CC); 
            print((function ε_CC(ε_R4) { 
                STACK_GUARD(arguments, ε_CC); 
                ε_K3(ε_R4) 
            }), a) 
        }) 
        ((function ε_CC(ε_R5) { 
            STACK_GUARD(arguments, ε_CC); 
            print((function ε_CC(ε_R6) { 
                STACK_GUARD(arguments, ε_CC); 
                ε_K2(ε_R6) 
            }), a) 
        }), 3) 
    })
    ((function ε_CC(ε_R7) { 
        STACK_GUARD(arguments, ε_CC); 
        ε_K1(ε_R7) 
    }), 2) 
})
((function ε_CC(ε_R8) {
     STACK_GUARD(arguments, ε_CC); 
     ε_R8 
    }))

Post-optimization:

(function (ε_K1) { 
    var a, ε_K3, ε_a$1;
    ((a=2), ((ε_K3 = (function (ε_R5) { 
        print(ε_K1, a) 
    })), ((ε_a$1=3), 
        print((function (ε_R4) { 
            ε_K3(ε_R4) 
        }), ε_a$1)))) })((function (ε_R8) { 
            ε_TOPLEVEL(ε_R8) 
        }));

About

a Lisp that leverages continuation-passing style, dynamic stack frames, and tail call optimization to dramatically enhance JavaScript runtime performance. interpreter, runtime, and transpiler

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published