120 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
# 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
 | 
						|
 | 
						|
## Supported implementations
 | 
						|
 | 
						|
- [Sagittarius](https://bitbucket.org/ktakashi/sagittarius-scheme/wiki/Home)
 | 
						|
    - Good support, recommended
 | 
						|
- [Guile](https://www.gnu.org/software/guile/)
 | 
						|
    - Good support, recommended
 | 
						|
- [Racket](https://racket-lang.org/)
 | 
						|
    - Good support, recommended
 | 
						|
- [Chicken](https://www.call-cc.org/)
 | 
						|
    - Still needs work
 | 
						|
- [Gambit](https://gambitscheme.org)
 | 
						|
    - Still needs work
 | 
						|
 | 
						|
## 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!
 | 
						|
 | 
						|
- [STKlos](https://stklos.net/)
 | 
						|
    - Still needs work
 | 
						|
- [Cyclone](https://justinethier.github.io/cyclone/)
 | 
						|
    - Still needs work
 | 
						|
 | 
						|
### Callbacks not implemented yet
 | 
						|
 | 
						|
- [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
 | 
						|
 | 
						|
## 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
 | 
						|
 | 
						|
## 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)
 | 
						|
 | 
						|
## 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
 | 
						|
 | 
						|
## Not supported
 | 
						|
 | 
						|
- [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
 | 
						|
 | 
						|
## Hacking
 | 
						|
 | 
						|
- You will need to have [scheme_testrunner](https://git.sr.ht/~retropikzel/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.
 | 
						|
 |