Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here

outlet

Outlet is a simple Lisp-like programming language

Subscribe to updates I use outlet


Statistics on outlet

Number of watchers on Github 146
Number of open issues 1
Average time to close an issue about 2 months
Main language JavaScript
Average time to merge a PR about 14 hours
Open pull requests 0+
Closed pull requests 0+
Last commit almost 7 years ago
Repo Created almost 8 years ago
Repo Last Updated over 1 year ago
Size 2.89 MB
Homepage http://jlongster....
Organization / Authorjlongster
Contributors2
Page Updated
Do you use outlet? Leave a review!
View outlet activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating outlet for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Outlet is a programming language. It is Lisp-like in nature and compiles to javascript (lua support is in the works).

See http://jlongster.com/2012/01/04/outlet-my-lisp-to-javascript-experiment.html.

Features

  • Object literals: {:one 1 :two 2}, [1 2 3 4 5]
  • A pretty printer: pp
  • Tail-recursive named lets:

::

 (let loop ()
   (if (eq? (read-input) 'quit)
     (loop)))
  • Expansion Passing Style and define-macro style macros
  • Javascript code generator
  • Several other things, it's hackable!

Current Status

Outlet is no longer being actively hacked on. It is used to test out new ideas here and there, but it is not actively maintained.

I plan on writing a post-mortem of my experience, though this isn't necessarily dead, just frozen. I'll most likely come back and hack on cool ideas. It's just not something you should use, unless you want to play with compilers.

Example

::

(define foo 5)

(define (bar x)
  (+ x 1))

(define (me)
    (+ x 1))

(define (buz x y)
  (let ((z 5))
    (+ x y z)))

(define (fib n)
  (if (= n 0)
      n
      (+ n (fib (- n 1)))))

(define obj {:foo 1 :bar 2})       ; maps
(define vec [1 2 3 4])             ; vectors

(define (baz one two . three)      ; rest parameters
  (pp three))

(baz "a" "b" "c" "d" "e" "f")

(pp (eval_outlet '(baz 1 2 3 4)))  ; eval

(define (print-n n)
  (cond
   ((> n 0) (display "positive"))
   ((< n 0) (display "negative"))
   ((= n 0) (display "0"))
   (else (display "wait, what?")))) ; cond

(define-macro (when cond . body)    ; macros
  `(if ,cond
       (begin
         ,@body)))

Notes

The compiler is stable and a full runtime is available (see runtime.ol). It is written 100% in Outlet.

I was working on a virtual machine to run Outlet code that is compiled to special assembly instructions. It works great, but it is slow. The project is outlet-machine: https://github.com/jlongster/outlet-machine.

Using

To get started:

::

# Download Outlet and add the `bin` directory to the path
git clone git@github.com:jlongster/outlet.git
export PATH="`pwd`/bin:$PATH"

# Compile a file (saves it to file.js, the original filename with a js ext)
ol file.ol

# Compile a file and print to stdout
ol -c file.ol

# Evalute an expression
ol -e '(define a 4)'

# Compile an expression and print to stdout ol -c -e '(define a 4)'

To use the javascript API:

::

var compiler = require('./compiler');
var js = require('./backends/js');
compiler.compile('(define foo 5)', js()); // returns javascript source

See the tests in tests for examples.

If you want to work on the compiler, Outlet comes with a Makefile. To compile your changes and run all tests:

::

make         # Compile the compiler with itself
make BOOT=1  # Compile the compiler with the last known working version
make test    # Run tests
outlet open issues Ask a question     (View All Issues)
  • over 5 years this great project is dead?
outlet questions on Stackoverflow (View All Questions)
  • Illegal Configuration: The Value outlet from the TableViewController3 to the UILabel is invalid. Outlets cannot be connected to repeating content
  • Could not insert new outlet connection: Could not find any information for the class named
  • UIImageView outlet of Custom TableViewCell nil
  • How do I pass specific bindings to ng-outlet components brought in by the component router in Angular 1.5?
  • Angular 2 - Error during instantiation of Router - (Router Outlet ->Router)
  • Angular 2 beta child component route-outlet doesnot work
  • "Exception: Error during instantiation of t! Primary outlet already registered." in cordova angular2 app
  • IOS 9 - UIButton on subview does not fire IBAction outlet
  • Routing to parent's router-outlet from a child component
  • Connect all UI Elements to one outlet at once, swift
  • Cannot make outlet in connected custom UITableViewCell class
  • UILabel changes font when modifying text using outlet
  • How to fix LLDB ? libc++abi.dylib: terminating with uncaught exception of type NSException ,it not a outlet mistake
  • angular2: adding router-outlet causes ngModel not to fire
  • Angular 2: multiple <router-outlet> for sub routes
  • Angular2 showing loader in router-outlet while the particular route component is being loaded
  • Could not insert new outlet connection error
  • The label outlet is invalid
  • Why can't I delete the 'view' outlet of a UITableViewController in the connection inspector in Xcode?
  • Cannot create outlet connections to subviews in Interface Builder (Xcode 5)
  • 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the GameView nib but the view outlet was not set
  • Loaded nib but the view outlet was not set - Swift edition
  • Ember: Passing variables through outlet
  • Error in Xcode 6 - view controller does not have an outlet named (subview)
  • Angular 2 how to pass variable from parent component to router outlet
  • Connecting Outlet to Constraint in Custom View Instantiated from xib File Results in Crash
  • Outlet failed error in NSWindowController
  • Disable NSMenuItem coupled to outlet with Xamarin.Mac
  • Container View - No Outlet Possible
  • Debugger say something wrong with outlet
outlet list of languages used
Other projects in JavaScript