Go to file
retropikzel a116d415c8 Making the build work 2024-09-26 19:18:44 +03:00
docs Remove string type, tier 1 now passes all other than callback tests 2024-09-15 15:08:55 +03:00
old-tests Move to running tests with scheme_runner 2024-09-03 15:15:15 +03:00
retropikzel Bug fixes 2024-09-25 19:10:05 +03:00
site Fixing file structure 2024-09-22 18:03:48 +03:00
.gitignore Fixing file structure 2024-09-22 18:03:48 +03:00
Dockerfile Move scheme runner code here as it's the only repo that needs it 2024-09-05 11:27:07 +03:00
Dockerfile.jenkins Making the build work 2024-09-26 18:50:12 +03:00
Jenkinsfile Making the build work 2024-09-26 19:18:44 +03:00
LICENSE Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
Makefile Moving towards snow package format 2024-09-19 20:30:28 +03:00
README.md Making the build work 2024-09-26 18:50:12 +03:00
composition.scm Move to running tests with scheme_runner 2024-09-03 15:15:15 +03:00
curl.dll Fix tests, add pffi-os-name 2024-07-31 21:14:38 +03:00
kawa.jar Added most of Kawa support 2024-05-06 20:45:31 +03: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
scheme_runner Moving towards snow package format 2024-09-19 20:30:28 +03:00
test Fixing file structure 2024-09-22 18:03:48 +03:00
test.scm Bug fixes 2024-09-25 19:10:05 +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 (for now)
  • 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 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.

Untiered, support needs to be investigated:

Tier 1

Aiming to support these first

  • 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

Work in progress

  • Gambit
    • Propably able to support everything but so annoying to deal with that it's currently in tier 2
  • STKlos
    • No callback support
  • Cyclone
    • No callback support

Tier 3

In queue

  • LIPS
    • Will work on nodejs by using some Javascript FFI
    • Javascript side needs design
  • Biwascheme
    • Will work on nodejs by using some Javascript FFI
    • Javascript side needs design

Tier 4

Support needs investigation and serious design or making dynamic FFI for the implementation

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

Other.

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