Go to file
Yuichi Nishiwaki da2a71fe65 try using glossary directive 2014-06-15 02:46:02 +09:00
build add build dir 2014-03-02 12:58:56 +09:00
cmake drop libreadline dependency. Use libedit instead. 2014-05-26 12:01:08 +09:00
contrib shift/control broken 2014-05-19 20:35:31 +09:00
docs try using glossary directive 2014-06-15 02:46:02 +09:00
etc don't generate importable variable name 2014-05-21 00:29:13 +09:00
extlib primary symbol to object hashtable support (dictionary) 2014-06-14 22:17:57 +09:00
include primary symbol to object hashtable support (dictionary) 2014-06-14 22:17:57 +09:00
piclib some bug fixes 2014-05-29 03:58:04 +09:00
src dictionary-delete raises an error when no binding with given name is registered 2014-06-15 01:46:31 +09:00
t make `read-bytevector(!)` efficint, export `u8-ready?`. 2014-05-26 04:08:39 +09:00
tools Match the case of package name for find_package. 2014-06-05 22:08:07 +09:00
.gitignore initial sphinx doc support 2014-05-18 06:11:06 +09:00
.gitmodules split xvect module 2014-03-20 23:09:45 +09:00
.travis.yml update travis config 2014-05-19 09:09:35 +09:00
AUTHORS add @KeenS to AUTHORS 2014-05-29 01:27:02 +09:00
CMakeLists.txt fix #123. add another build option 'USE_C11_FEATURE' 2014-05-30 10:34:44 +09:00
LICENSE wrong years in LICENSE file 2014-05-18 21:38:41 +09:00
README.md add reference to botbot.me 2014-06-02 08:26:29 +09:00

README.md

Picrin Build Status

Picrin is a lightweight scheme implementation intended to comply with full R7RS specification. Its code is written in pure C99 and does not requires any special external libraries installed on the platform.

Features

  • R7RS compatibility (but partial support)
  • reentrant design (all VM states are stored in single global state object)
  • bytecode interpreter (based on stack VM)
  • direct threaded VM
  • internal representation by nan-boxing
  • conservative call/cc implementation (users can freely interleave native stack with VM stack)
  • exact GC (simple mark and sweep, partially reference count is used as well)
  • string representation by rope data structure
  • support full set hygienic macro transformers, including implicit renaming macros
  • extended library syntax
  • advanced REPL support (multi-line input, etc)
  • tiny & portable library (all functions will be in libpicrin.so)

Documentation

See http://picrin.readthedocs.org/

Homepage

Currently picrin is hosted on Github. You can freely send a bug report or pull-request, and fork the repository.

https://github.com/wasabiz/picrin

IRC

There is a chat room on chat.freenode.org, channel #picrin. IRC logs here: https://botbot.me/freenode/picrin/

How to use it

  • make Makefile

    Change directory to build then run ccmake to create Makefile. Once Makefile is generated you can run make command to build picrin.

      $ cd build
      $ ccmake ..
    

    Actually you don't necessarily need to move to build directory before running ccmake (in that case $ ccmake .), but I strongly recommend to follow above instruction.

  • build

    A built executable binary will be under bin/ directory and shared libraries under lib/.

      $ make
    

    If you are building picrin on other systems than x86_64, PIC_NAN_BOXING flag is automatically turned on (see include/picrin/config.h for detail).

  • install

    Just running make install, picrin library, headers, and runtime binary are install on your system, by default into /usr/local directory. You can change this value via ccmake.

      $ make install
    
  • run

    Before installing picrin, you can try picrin without breaking any of your system. Simply directly run the binary bin/picrin from terminal, or you can use make to execute it like this.

      $ make run
    
  • debug run

    If you execute cmake with debug flag -DCMAKE_BUILD_TYPE=Debug, it builds the binary with all debug flags enabled (PIC_GC_STRESS, VM_DEBUG, DEBUG).

      $ cmake -DCMAKE_BUILD_TYPE=Debug ..
    

Requirement

Picrin scheme depends on some external libraries to build the binary:

  • perl
  • lex (preferably, flex)
  • getopt
  • libedit (optional)
  • regex.h of POSIX.1 (optional)

Optional libraries are, if cmake detected them, automatically enabled. The compilation is tested only on Mac OSX and Ubuntu. I think (or hope) it'll be ok to compile and run on other operating systems such as Arch or Windows, but I don't guarantee :(

Authors

See AUTHORS