Comments (4)
Hello @abhi18av,
note that JyNI is not yet another Java FFI, but actually emulates the existing CPython C-extension API.
This API is very involved and needs rather special treatment in terms of dynamic loading, memory management and various further aspects.
- it must bridge reference counting and mark-and-sweep gc
- it is especially challenging to get finalizers and weak references right in this context
- it must resolve GIL handling
- it needs to control RTLD flag, which isn't trivial via JNI
For details have a look at this paper.
E.g. with JavaCPP it is only possible to call into native code and to pass callbacks, while CPython extension API requires to export symbols (which is not supported by JavaCPP AFAICT).
Even if it would be feasible with JavaCPP, I would not see the benefit, because the JNI glue code is really the trivial part of JyNI and is already done.
Then, JavaCPP requires C/C++ compilation for each extension specifically, which is a major drawback compared to e.g. JNR ("interestingly" they ignore that aspect in their readme entirely and somehow describe JavaCPP as superior to e.g. JNR).
On the other hand, JavaCPP's main advantage - tight C++ integration - would not pay off for JyNI at all, because CPython is written in plain C.
Also, I doubt there is potential for performance gain, because JavaCPP boils down to JNI as well. In contrast to that, JNR is said to be slightly faster than plain JNI due to some smart use of assembler. Anyway, I would not explore any beyond-JNI optimization before project panama turns out, as that is by far the most promising advancement in terms of Java FFI performance (presumingly, JyNI 3 will make use of that one day).
from jyni.
After your wonderful explanation, I do have a better understanding of the scope of the project @Stewori . Thanks for taking out the time to be so thorough 👍
from jyni.
I do wish that Python3 transition would pick up speed in the Jython world :)
from jyni.
Hello, author of JavaCPP here. I agree, CPython doesn't need C++. :)
But I do hope that this is all going to get integrated one day...
from jyni.
Related Issues (20)
- Iterator support (TypeError: argument of type 'dict' is not iterable) HOT 10
- JyNI-C/src/Python/pythonrun.c:1956 isnt' know struct sigaction context ocontext HOT 5
- 'getset_descriptor' object is not callable at 1668:0 in defchararray.py HOT 3
- Patch: NumPy 13.2 broken for JyNI 2.7-alpha.5 HOT 1
- nltk download crashes HOT 15
- NumPy 1.14+ compatibility HOT 8
- Name JyNI.jar Mandatory HOT 15
- support for the BufferProtocol HOT 8
- SciPy HOT 1
- mmap: String access is truncated or causes NullPointerException HOT 11
- Add debug target to makefile. HOT 2
- PyExc_TypeError has ob_type == NULL HOT 25
- Under memory stress JVM builds an invalid native jobject, potentially causing segfault during GC
- When using numpy, we call np.split(x,2),np.hsplit(x,2),np.vsplit(x,2), x is a numpy array. But the command didn't output anything or report any mistakes HOT 1
- Setting JyNI to work with Processing HOT 5
- Jython 2.7.2, NumPy advice HOT 1
- Can't seem to load the co_stacksize extension
- How to correcty install and use JyNI with numpy support on Jython? HOT 2
- custom module imported but functions not exported HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jyni.