Nothing Special   »   [go: up one dir, main page]

Skip to content

A Lisp that leverages continuation-passing style 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 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