dan31 / owl-lisp

A functional Lisp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Owl Lisp -- a purely functional scheme
Copyright (c) 2016 Aki Helin

OVERVIEW
~~~~~~~~

Owl Lisp is a functtional dialect of the Scheme programming language. It
is mainly based on applicative subset of the R7RS standard.


REQUIREMENTS
~~~~~~~~~~~~

You should have make and gcc or clang installed. 


INSTALLATION
~~~~~~~~~~~~

To install system-wide to /usr
   $ make
   $ sudo make install

Alternatively you can try it out with 
   $ make
   $ cp bin/ol /somewhere/convenient
   $ /somewhere/convenient/ol
   You see a prompt
   > 


FILES
~~~~~~

   bin/ol      - the owl interpreter/compiler
   c/ovm.c     - the virtual machine / shared owl lisp runtime
   owl/*.scm   - implementation of owl repl and compiler
   bench/*.scm - some benchmarks
   fasl/*.fasl - bytecode images for bin/vm used during boot
   bin/vm      - plain VM used during boot
   c/ol.c      - combined VM and REPL heap image


USAGE
~~~~~

Owl can be used either interactively, or to interpret code from files,
or compile programs to fasl-images or c-files. The difference between
an owl program and a plain script is that the program should just have
a function of one argument as the last value, which will be called with
the command line argument list when the program is executed.

In addition to being a regular interpreter, owl also tries to make it 
easy to compile programs for different platforms. Owl programs can be 
compiled with ol to C-files, which can be compiled to standalone binaries
without needing any owl-specific support files or libraries. The C files 
also work on 32- and 64-bit systems, and compile as such at least on 
Linux, OpenBSD, OSX and can be crosscompiled to Windows executables with 
MinGW.

For example, to build a hello world program:
  $ echo '(lambda (args) (print "Hello, world!"))' > hello.scm
  $ ol -o hello.c hello.scm
  $ gcc -o hello hello.c
  $ ./hello
  Hello, world!

Or simply:
  $ echo '(λ (args) (print "Hello, world!"))' \
     | ol -x c | gcc -x c -o hello - && ./hello

Parts of the compiled programs can be translated to C, instead of being 
simply fasl-encoded, to increase speed. Using the --native flag compiles 
most of the bytecode to C, and --usual-suspects compiles typically used 
functions. To make programs run faster, one can use for example:

  $ ol -O2 -o test.c test.scm && gcc -O2 -o test test.c


UPDATES AND DOCUMENTATION
~~~~~~~~~~~~~~~~~~~~~~~~~

For further documentation and updates, see:

  https://haltp.org/n/10

  https://github.com/aoh/owl-lisp


About

A functional Lisp

License:MIT License


Languages

Language:Scheme 89.1%Language:C 5.0%Language:Shell 2.0%Language:Common Lisp 1.8%Language:Web Ontology Language 1.7%Language:Makefile 0.3%