
FLI: A binary interface to let Scheme use Python, Lua, Ruby etc's Library - guenchi
https://github.com/guenchi/FLI
======
baldfat
Racket has this for C-based APIs. My mind is kind of wondering how this would
ever be stable/maintainable to use for Python, but Lua seems possible but I
would rather do my scripting in Racket then Lua and use the C APIs directly.

[https://docs.racket-lang.org/foreign/index.html](https://docs.racket-
lang.org/foreign/index.html)

Looking at Julia (Which has a no "boiler plate" philosophy when using C or
Fortan) the function is just called.

Interesting to look at for comparison

Julia ccall- [https://docs.julialang.org/en/v0.6.1/manual/calling-c-and-
fo...](https://docs.julialang.org/en/v0.6.1/manual/calling-c-and-fortran-
code/)

Racket FFI - [https://docs.racket-
lang.org/foreign/index.html](https://docs.racket-lang.org/foreign/index.html)

~~~
guenchi
I am researching julia's code.

[https://github.com/JuliaPy/PyCall.jl/blob/master/src/PyCall....](https://github.com/JuliaPy/PyCall.jl/blob/master/src/PyCall.jl)

I guess it is like this: Importing the pycall library is to turn on the python
interpreter thread and not interrupt it. Then you can call any python library
you want.

~~~
blattimwind
The GIL is mostly managed by CPython and the host application doesn't touch it
directly. Host extension modules may use PyEval_SaveThread et al. just like
regular extension modules to release the GIL during blocking operations _when
called by CPython_. There is a separate API for fondling the GIL when you're
in a host-created thread (not created by CPython) and want to call CPython.
Those are orthogonal (called by CPython vs. calling CPython).

------
DarkWiiPlayer
I'm pretty neutral to Scheme and the other Lisps, but at the very least this
seems like a cool project.

------
akavel
How does Chez Scheme compare vs. CHICKEN Scheme? For a layman, they both seem
to compile to binary; Chicken via C, Chez maybe not? Which one has a bigget
community?

Also, do you know of any static typing extension for Chez?

~~~
guenchi
Chez is compile direct to Native Code

Chicken has much more library and bigger community.

BUT...

Chez is the only commercial compiler (before open source) and very stable and
fast...

------
mark_l_watson
I just looked at the repo, haven't tried this yet. Could be very useful to me
if tensorflow, pytorch etc. are callable

~~~
mark_l_watson
BTW, guenchi thanks for writing this code! Much appreciated.

~~~
guenchi
I have been working hard to promote the construction of the （Chez）Scheme
community for a year. Being useful to you is the best gift for me.

By the way, we have a scheme binding of tensorflow. That calling direct by
tensorflow's C API.

FLI is in order to solve the problem of calling Numpy by Scheme which is lack
of C - api.

------
__Joker
Can anybody explain how this works ? Is it only works for interpreted
languages ?

~~~
guenchi
Every language with FFI has the same ABI. Because they use C Language's ABI to
port another language.

Looking at it from another perspective, any language can call another language
through this ABI.

So any language with FFI can call any compiled binary code. For interpreted
languages, you must embed the runtime (or interpreter).

------
fithisux
Could be very useful with Lua code.

~~~
phyrex
If that’s your use case you might want to check out [https://fennel-
lang.org](https://fennel-lang.org)

