~retropikzel/r7rs-pffi

Add pffi-pointer-address shims for some implementations
Added pffi-pointer-address for sagittarius
Lots of fixes

clone

read-only
https://git.sr.ht/~retropikzel/r7rs-pffi
read/write
git@git.sr.ht:~retropikzel/r7rs-pffi

You can also use your local clone with git send-email.

#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 trackers

Maling lists

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

For status of what tests pass on which implementations see Jenkins.

#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

#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

#Known issues that are worked on

  • Passing struct does not work on Chicken
    • For example SDL2-ttf TTF_RenderUTF8_Solid wants the color to be passed as struct.
    • Not a problem on Guile, Sagittarius or Racket
    • Cyclone status unknown, assumed same as Chicken

#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.

#Usable

#Work in progress

  • Cyclone
    • No callbacks implemented yet
  • Kawa
    • No callbacks implemented yet
    • 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
  • Gambit
  • STKlos

#Design/exploration

  • 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
  • Chibi
    • FFI requires C code
  • MIT-Scheme
    • FFI requires C code
  • tr7
    • FFI requires C code
  • Gauche
    • FFI requires C code
  • s7
    • FFI requires C code
  • Gerbil
    • Should be possible as built on gambit, but makes sense to make gambit support first
  • Ypsilon
  • Larceny
  • Mosh
  • Skint
  • 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
  • s48-r7rs
  • prescheme

#Will/can not be supported

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