[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
199.16
The v200-tagged code in CVS for MzScheme and MrEd is now version 199.16.
The main change is that mzc supports a subset of the Gambit-C
foreign-function interface. For example:
(define fmod (c-lambda (double double) double "fmod"))
creates a Scheme function that calls the standard fmod() C function.
The body part of the function can either be a C function name, as
above, or it can be C code that accesses ___arg1, etc. and sets
___result. (The three underscores underscore the Gambit heritage. :)
(define machine-string->float
(c-lambda (char-string) float
;; assume that the string is 4 bytes
"___result = *(float *)___arg1;"))
The `c-lambda' form can be used anywhere. There's also a `c-declare'
form (used for #includes, etc.) that must appear at the top-level or in
a module top-level.
When interpreted directly or compiled to byte code, `c-lambda' produces
a function that always raises `exn:user', and `c-declare' raises
`exn:user'. [Yes, it would be nice if those were syntax errors.]
The `c-lambda' and `c-declare' forms are defined by a new "cffi.ss"
module in the "compiler" collection. When compiling a file, mzc
automatically imports the cffi module into the top-level namespace.
See the mzc manual (now ported to v200) for more information, and see
plt/collects/mzscheme/examples for additional small examples.
[This subset of the Gambit-C FFI seems useful (compare the `fmod' line
above to the 25-line plain C example), and it was trivial to implement
for mzc. I don't know why I never thought of this before, but it might
be because I kept looking for FFIs that would work well with the
interpreter (without mzc).]
Other changes:
* Fixed `subprocess' for Windows [really, this time... hopefully].
* The self object is passed to `demand-callback' procedures.
Inside MzScheme:
* New scheme_c_pointer_type built-in type --- with scheme_make_cptr(),
SCHEME_CPTRP(), SCHEMECPTR_VAL(), and SCHEME_CPTR_TYPE() --- that
makes simple extensions easier to write. (Used by `c-lambda'.)
* schvers.h now defines MZSCHEME_VERSION, MZSCHEME_VERSION_MAJOR, and
MZSCHEME_VERSION_MINOR (instead of VERSION), and [e]scheme.h
includes schvers.h.
* The "Inside MzScheme" manual is up-to-date.
The MzScheme, MzLib, MrEd, mzc, and Inside MzScheme manuals have been
updated. Temporary PDF versions of the manuals are available at
http://www.cs.utah.edu/~mflatt/tmp/
Matthew
- Follow-Ups:
- Re: 199.16
- From: Alexey Mahotkin <alexm@jet.msk.su>