|
|
||
|---|---|---|
| docs | ||
| old-tests | ||
| retropikzel/r7rs-pffi/version | ||
| .gitignore | ||
| Dockerfile | ||
| Jenkinsfile | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| composition.scm | ||
| curl.dll | ||
| kawa.jar | ||
| mkdocs.yml | ||
| scheme_runner | ||
| test.scm | ||
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/.
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
Support tiers
Support is defined in tiers, each tier has short explanation about it after the title.
Currently the interface of the library is okay. Now work needs to be done to make tests and see that each implementation passes those tests. This will be done in tiered order starting from tier 1.
Tier 1
- Chicken
- Guile
- 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
- Sagittarius
- Racket
Tier 2
- Gambit
- Propably able to support everything but so annoying to deal with that it's currently in tier 2
- Still needs work
- STKlos
- No callback support
- Still needs work
- Cyclone
- No callback support
- Still needs work
Tier 3
- 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
Tier 4
Support needs to be investigated.
Tier 5
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
Tier 6
Not supported currently, and may never be.