# 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](https://retropikzel.neocities.org/r7rs-pffi/) or run mkdocs serve or see docs/. [Issue tracker](https://todo.sr.ht/~retropikzel/r7rs-pffi) [Maling lists](https://sr.ht/~retropikzel/r7rs-pffi/lists) For documentation see [retropikzel.neocities.org/r7rs-pffi](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 # Support tiers ## Tier 1 - [Chicken](https://www.call-cc.org/) - Still needs work - [Guile](https://www.gnu.org/software/guile/) - Good support, recommended - [Kawa](https://www.gnu.org/software/kawa/index.html) - 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 - [Sagittarius](https://bitbucket.org/ktakashi/sagittarius-scheme/wiki/Home) - Good support, recommended - [Racket](https://racket-lang.org/) - Good support, recommended - [Gambit](https://gambitscheme.org) - Still needs work ## Tier 2 These implementations do not have callback support on their FFI. If I'm wrong please let me know! - [STKlos](https://stklos.net/) - Still needs work - [Cyclone](https://justinethier.github.io/cyclone/) - Still needs work ## Tier 3 Support waiting for the implementation. - [LIPS](https://lips.js.org/) - Waiting for implementation to have cond-expand and library support - Will only work on nodejs - [Biwascheme](https://www.biwascheme.org/) - Waiting for implementation to have cond-expand and library support - Will only work on nodejs ## Tier 4 Support needs to be investigated. - [Gerbil](https://cons.io/) - [Ypsilon](http://www.littlewingpinball.com/doc/en/ypsilon/) - [Larceny](https://larcenists.org/) - [Mosh](https://mosh.monaos.org) - [Skint](https://github.com/false-schemers/skint) ## Tier 5 Support maybe possible/dreaming about. - [Airship](https://gitlab.com/mbabich/airship-scheme) - [Other gambit targets](https://gambitscheme.org/) - 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 ## Tier 6 Not supported currently, and may never be. - [Chibi](https://synthcode.com/scheme/chibi) - FFI requires C code - [MIT-Scheme](https://www.gnu.org/software/mit-scheme/) - FFI requires C code - [tr7](https://gitlab.com/jobol/tr7) - FFI requires C code - [Gauche](https://practical-scheme.net/gauche/) - FFI requires C code - [s7](https://scheme.fail://ccrma.stanford.edu/software/snd/snd/s7.html) - No library support - Might have other things missing too - [Loko](https://scheme.fail/) - Desires no C interop, I can respect that