SkillAgentSearch skills...

JCLS

A (Common?)Lisp interpreter in JavaScript

Install / Use

/learn @mishoo/JCLS
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

                JCLS: Java-Common-Lisp-Script
                     (c) Mihai Bazon 2011
                 http://mihai.bazon.net/blog

    Any sufficiently complicated C or Fortran program contains an
    ad hoc, informally-specified, bug-ridden, slow implementation
    of half of Common Lisp.

                                         Greenspun's Tenth Rule

This is a toy Lisp interpreter in JavaScript. It follows the wisdom brought to us by prophets in SICP 4:1:7 to implement an analyze function that breaks the Lisp program into JavaScript closures. It's probably not usable for real programming, as the interpreter is recursive and could blow the stack quite easily.

Current features: (see tmp/test.lisp for some disorganized tests)

  • basic Lisp stuff: CONS, LIST, C[AD]+R, QUOTE, IF, LAMBDA etc.
  • CL-style packages (supports private symbols, etc.)
  • lexical and dynamic variables
  • FLET, LABELS, DEFUN, DEFMACRO, MACROEXPAND-1
  • CL-style lambda lists (&key, &optional, &body, DESTRUCTURING-BIND)
  • the quasiquote operator
  • CATCH, THROW, IGNORE-ERRORS, UNWIND-PROTECT
  • the ability to influence the reader (SET-MACRO-CHARACTER)

It's not remotely close to half of Common Lisp, as you can see, but maybe we can get closer. I'm planning to change the analyze function to continuation-passing style (as in SICP 4:3:3) and use a trampoline instead of doing tail calls, which should (if the resulting interpreter won't be unbearably slow) make it useful for real-world problems.


View on GitHub
GitHub Stars16
CategoryDevelopment
Updated2y ago
Forks2

Languages

JavaScript

Security Score

60/100

Audited on Sep 9, 2023

No findings