Go to file
retropikzel 3146a6933f Fix load path bug 2024-08-30 21:47:11 +03:00
build Renaming and moving to the new schubert format 2024-07-15 18:12:34 +03:00
doc Started adding documentation 2024-05-01 11:21:28 +03:00
dockerfiles/src Some more docker envs 2024-07-06 20:18:57 +03:00
docs Update documentation 2024-08-26 10:19:27 +03:00
retropikzel/r7rs-pffi/version Fix load path bug 2024-08-30 21:47:11 +03:00
schubert/retropikzel/r7rs-pffi/version Renaming and moving to the new schubert format 2024-07-15 18:12:34 +03:00
scripts Renaming and moving to the new schubert format 2024-07-15 18:12:34 +03:00
test Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
.gitignore Update readme, improve documentation 2024-08-25 16:39:05 +01:00
LICENSE Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
Makefile Renaming and moving to the new schubert format 2024-07-15 18:12:34 +03:00
README.md Update documentation 2024-08-26 10:19:27 +03:00
composition.scm Fix load path bug 2024-08-30 21:47:11 +03:00
curl.dll Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
documentation.md Added pffi-lambda 2024-05-15 19:48:36 +03:00
guix-chicken-init.sh - Added versions to auto-load 2024-05-24 08:30:24 +03:00
kawa.jar Added most of Kawa support 2024-05-06 20:45:31 +03:00
manifest.scm Make many implementations pass all tests, clean up repo 2024-05-18 16:40:39 +03:00
mkdocs.yml Update readme, improve documentation 2024-08-25 16:39:05 +01:00
test-chicken.sh Renaming and moving to the new schubert format 2024-07-15 18:12:34 +03:00
test-cyclone.sh Moving testrunning to external tool slowly 2024-07-08 19:03:07 +03:00
test-gamit.sh Moving testrunning to external tool slowly 2024-07-08 19:03:07 +03:00
test-gerbil.sh Moving testrunning to external tool slowly 2024-07-08 19:03:07 +03:00
test-guile-compile.sh Add more tests 2024-05-29 16:37:47 +03:00
test-guile.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-kawa.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-racket-wine Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
test-racket-wine.sh Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
test-racket.sh Moved tests to their own files 2024-05-18 11:20:28 +03:00
test-sagittarius-wine.sh Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
test-sagittarius.sh Started moving tests to their own files 2024-05-18 10:55:55 +03:00
test-stklos.sh Moving testrunning to external tool slowly 2024-07-08 19:03:07 +03:00
test.scm Started moving tests to their own files 2024-05-18 10:46:28 +03:00

README.md

Portable Foreign Function Interface for R7RS schemes

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

Note that this software is in alpha stage. That said the interface should not be changing anymore.

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

Documentation or run mkdocs serve or see docs/.

Issue tracker

Maling lists

For documentation see retropikzel.neocities.org/r7rs-pffi or run mkdocs serve or see or docs/ directory.

Goals

  • Support only R7RS implementations
    • Needs to have cond-expand and library support atleast (propably much more)
  • Same interface on all implementations
    • Some things that are procedures on one implementation are macros on other, but they must behave the same

Non goals

  • To support all R7RS implementations
  • To have every possible FFI feature
  • Compiling of C code at any point
    • That is no stubs, no C code generated by the library and so on

Supported implementations

Supported excepts callbacks

Callbacks not in FFI

These implementations do not have callback support on their FFI. If I'm wrong please let me know!

Callbacks not implemented yet

  • 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
    • Good support (otherwise), recommended

Support waiting for the implementation

  • LIPS
    • Waiting for implementation to have cond-expand and library support
    • Will only work on nodejs
  • Biwascheme
    • Waiting for implementation to have cond-expand and library support
    • Will only work on nodejs

Support needs to be investigated

Support maybe possible/dreaming about

  • 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

Not supported

  • Chibi
    • FFI requires C code
  • MIT-Scheme
    • FFI requires C code
  • tr7
    • FFI requires C code
  • Gauche
    • FFI requires C code
  • s7
    • No library support
    • Might have other things missing too
  • Loko
    • Desires no C interop, I can respect that

Hacking

  • You will need to have scheme_testrunner installed to run tests on large scale
    • You can also run them on your machine

Pull requests

Pull requests for bug fixes, additional implementation support and additional tests are appreciated. But please do not change the interface (library exports) and if you add support for implementation then all exported procedures of main.scm need to be implemented and tests must pass.