Go to file
retropikzel efe419ca15 Updating readme 2025-01-25 13:15:28 +02:00
docs Updat documentation 2025-01-02 19:10:18 +02:00
old-tests Move to running tests with scheme_runner 2024-09-03 15:15:15 +03:00
retropikzel Updating readme 2025-01-25 13:09:37 +02:00
site Fixing file structure 2024-09-22 18:03:48 +03:00
.gitignore Make the struct members accessors and add tests 2025-01-18 10:23:53 +02:00
Dockerfile.jenkins Making the build work 2024-09-26 19:33:39 +03:00
HACKING.md Updated the support table. Added cond-expand to export side in .sld file. 2024-11-14 19:50:18 +02:00
IMPLEMENTATION_NOTES.md Added pffi-define support for Chibi 2024-11-09 10:28:56 +00:00
Jenkinsfile Lots of fixes 2024-10-04 15:48:19 +03:00
LICENSE Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
Makefile Updating readme 2025-01-25 12:46:58 +02:00
README.md Updating readme 2025-01-25 13:15:28 +02:00
composition.scm Move to running tests with scheme_runner 2024-09-03 15:15:15 +03:00
gerbil.pkg Added most of the support for mosh, some bugs remain and couple of unimplemented procedures. Got Gerbil to load files. 2024-11-07 16:34:22 +00:00
jenkins_entrypoint.sh Making the build work 2024-09-26 19:29:27 +03:00
kawa.jar Added most of Kawa support 2024-05-06 20:45:31 +03:00
libtest.c Improvements for Sagittarius 2025-01-24 21:59:21 +02:00
libtest.h Lots of improvements to Chibi. Started adding Chicken 6 support 2025-01-24 20:30:34 +02:00
mkdocs.yml Update readme, improve documentation 2024-08-25 16:39:05 +01:00
package.scm Add package.scm 2024-09-20 10:39:14 +03:00
test.scm Improvements for Kawa 2025-01-25 09:21:18 +02:00

README.md

Portable Foreign Function Interface for R7RS schemes

Foreign function interface that is supported on multiple R7RS Sceheme implementations.

Any help in form of constructive advice and bug reports are appreciated.

Issue trackers

Maling lists

Jenkins.

For documentation run mkdocs serve or see docs/.

Goals

  • Support only R7RS implementations
  • Same interface on all implementations
    • Some things that are procedures on one implementation are macros on other, but they must behave the same
  • Stability and being boring after 1.0.0 is reached

Non goals

  • To have every possible FFI feature
  • Compiling of used library C code at any point
    • That is no stubs, no C code generated by the library and so on
    • The pffi library itself may require compilation on installation

Status

Currently the interface of the library is in okay shape. It propably will not change much but no guarantees are being made just yet.

Due to supporting many different Scheme implementations, different parts of this software are in different stage. As a whole it is still in alpha stage. That said the interface should not be changing anymore and support for some implementations are in beta.

Implementation status

Alpha

Anything not in beta or done, not recommended to use.

Beta

Usage can be started but might still be quite buggy.

  • Guile
  • Sagittarius
  • Racket

Done

Usage recommended.

Implementation table

Chibi Chicken 5 Cyclone Gambit Gauche Gerbil Guile Kawa Larceny Mosh Racket Sagittarius Skint STklos tr7 Ypsilon
pffi-init X X X X X X X X X X X X X X
pffi-size-of X X X X X X X X X X
pffi-shared-object-auto-load X X X X X X X X X
pffi-shared-object-load X X X X X X X X X
pffi-pointer-null X X X X X X X X X
pffi-pointer-null? X X X X X X X X X
pffi-pointer-allocate X X X X X X X X X
pffi-pointer? X X X X X X X X X
pffi-pointer-free X X X X X X X X X
pffi-pointer-set! X X X X X X X X
pffi-pointer-get X X X X X X X X
pffi-string->pointer X X X X X X X X
pffi-pointer->string X X X X X X X X
pffi-struct-make X X X X X X X X X X X X X X X X
pffi-struct-size X X X X X X X X X X X X X X X X
pffi-struct-pointer X X X X X X X X X X X X X X X X
pffi-struct-offset-get X X X X X X X X X X X X X X X X
pffi-struct-get X X X X X X X X X X X X X X X X
pffi-struct-set! X X X X X X X X X X X X X X X X
pffi-define X X X X X X X X
pffi-define-callback X X X X X

Usage notes

  • Chibi
    • Install libffi-dev
    • Build with:
      • chibi-ffi retropikzel/r7rs-pffi/r7rs-pffi-chibi.stub
      • ${CC} -o retropikzel/r7rs-pffi/r7rs-pffi-chibi.so -fPIC -shared retropikzel/r7rs-pffi/r7rs-pffi-chibi.c -lchibi-scheme -lffi
  • Chicken 5
  • Kawa
    • Needs at least Java version 22
    • Needs jvm flags:
      • --add-exports java.base/jdk.internal.foreign.abi=ALL-UNNAMED
      • --add-exports java.base/jdk.internal.foreign.layout=ALL-UNNAMED
      • --add-exports java.base/jdk.internal.foreign=ALL-UNNAMED
      • --enable-native-access=ALL-UNNAMED
  • Larceny
    • Runs on 32 bit mode
  • Mosh
    • FFI only works on x86_64
  • Racket

Design/exploration/waiting for implementation features

  • LIPS
    • Will work on nodejs by using some C FFI library from npm
    • Javascript side needs design
  • Biwascheme
    • Will work on nodejs by using some C FFI library from npm
    • Javascript side needs design
  • MIT-Scheme
  • s7
  • Airship
  • Other gambit targets
    • Gambit compiles to different targets other than C too, for example Javascript. It would be cool and interesting to see if this FFI could also support some of those
    • When LIPS and Biwascheme Javascript side is done then Gambit should be done too
  • s48-r7rs
  • prescheme

Will/can not be supported

  • Loko
    • Desires no C interop, I can respect that