Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] Schoca 0.0 - first release announcement
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Christoph Bauer <c_bauer@i...>
Subject: [Caml-list] Schoca 0.0 - first release announcement

Schoca is SCHeme for OCAml.

The initial release of schoca is available at

Please note that this is an early alpha release of Schoca.  Please
report bugs, typos, etc.


Schoca --- Scheme for OCaml

Schoca is an implementation of the Scheme language. The primary
purpose of Schoca is the use as an embedded extension language in
OCaml applications (e.g. the ibgsclient).

Why Scheme?

Scheme is an easy, small, widely known and well-documented
language. There exists some (over Scheme implementations) portable 
libraries. With applications like Gimp and GnuCash it has been proven
that Scheme is a very useful extension language. Other applications (like
Emacs or AutoCAD) use other lisp dialects (elisp, AutoLisp).

Why another implementation of Scheme?

OCaml and Scheme need both a garbage collector (GC). With an
implementation of Scheme in OCaml both parts of the application are
using the same GC. This avoids easily a lot of troubles.

The extension language and the application itself are sharing some
code, e.g. for the handling of hashtables. This results in a smaller
size of the application binary.

Furthermore this solution doesn't require type conversion functions.
Scheme types are simple variant or record types.

How does it work?

Register new functions with

Enviroment.set env "name" (ML_EagerProcedure (fun args -> ... ))

Look in

[This section will be rewritten in the next release.]

Status (Version 0.0)

Version 0.0 is a very early release. Expect not to much!

What works: look in r5rs-test.scm. 
What is missing:
   * proper tail recursion (planned for 0.1)
   * macros (planned for 0.2)
   * correct continuations (planned for 0.1)
   * recursive calls of "force" (cmp R5RS 6.4 and documentation about `Lazy.force')
      (does anybody need this?)
   * some library functions (planned for 0.2)
	[gcd, lcm, numerator, denominator, round, rationalize, atan, 
         make-rectangular, make-polar, magnitude, angle, char-alphabetic?,
   	 char-numeric?, char-whitespace?, char-upper-case?, char-lower-case?,
	 char-upcase, char-lowercase, string->list, list->string, vector-length,
	 vector->list, dynamic-wind, null-enviroment, interaction-enviroment, ...] 
   * most I/O Routines (planned for 0.1)
   * simple API for embeddeding (planned for 0.1)

There are no `immutable' string restrictions. (compare with R5RS
p. 30)

The license


Schoca is part of the IBGS project:

Please report bugs, send complains and suggestions, or donations ;-)

Author: Christoph Bauer <>

proc self {} {foreach c [split [info body self] ""] d {14 -7 0 0 4 -67 4 73 11
69 24 -83 -15 6 -4 -84 78 20 11 -78 -1 -1 79 19 -8 4} { binary scan $c c c
if {[catch {append r [format %c [expr $c+$d]]}]} {return $r};}};puts [self]

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: