notes on binding C++
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Tue Jan 30 09:33:31 UTC 2018
Hi Samuel,
I'm not aware of any concrete C++ effort right now; as I mentioned to
you the goal for now is to get native interop (C) up and running with a
stable API - once that's done we can build more on it (and that means
getting to C++).
Regarding your question of whether generating stubs is really going to
buy us much compared to just use JNI as JavaCPP is doing, I take your
point; if you generate an _opaque_ stub and then compile-it with the
target compiler, you end up in the same performance ballpark as JavaCPP,
I believe, as the invocation cannot be direct and the JIT can't probably
see through the stub call.
But I've seen other plans on how to generate those stubs, and such plans
include using JVM code snippets (for which there's a branch in the
panama repo):
http://mail.openjdk.java.net/pipermail/panama-dev/2016-August/000506.html
A machine code snippet is a piece of assembly (hence platform dependent
code) which can be packaged up and exposed to user as a method handle.
This means that the JIT can optimize it more or less in the same way as
it does for other method handles - meaning that it will now be able to
see through the stub call and optimize that, if possible/needed. There
are obviously a lot of 'ifs' in this story (the code snippet extension
is experimental), but I think it should be clear that, at least on
paper, it has the potential to be more efficient than simply generating
some C/C++ stub, compiling it, and then calling it opaquely.
You can find some examples of code snippets in this test:
http://hg.openjdk.java.net/panama/dev/file/8437963c6282/test/jdk/panama/snippets/MachineCodeSnippetSamples.java#l51
Maurizio
On 30/01/18 08:45, Samuel Audet wrote:
> On 01/30/2018 02:14 PM, Henry Jen wrote:
>>
>>> On Jan 29, 2018, at 8:37 PM, Samuel Audet <samuel.audet at gmail.com>
>>> wrote:
>>>
>>> BTW, if the C API of libclang exposes all the features we need, it
>>> is already possible to use it from Java:
>>> https://github.com/bytedeco/javacpp-presets/tree/master/llvm Is
>>> jextract in a good enough shape to offer us such an interface to
>>> work with and do some dogfooding? If so, it might also be a good
>>> place to start a testbed for jextract too. That is exactly what the
>>> JavaCPP Presets are: A testbed for JavaCPP. This is what makes
>>> JavaCPP actually work with (a few) C++ libraries out there in the
>>> wild--unlike SWIG, CppSharp, rust-bindgen, etc. Thoughts?
>>>
>>
>> We have achieved to run jextract on top of libclang binding generated
>> by jextract awhile back, probably need to bring up-to-date with
>> current updates.
>>
>> It’s the idea that after this bootstrapping process, we would like to
>> be able open up other capability provided by libclang, also this
>> dogfooding would server as a validation to our approach is working.
>>
>
> Ok, cool! Has anyone tried with the C++ API of Clang since then? Now
> that sounds like awesome dogfooding to me. And if we can get that
> wrapped, we're probably not going to have much of any issues with
> other C++ libraries out there, and I will happily retire JavaCPP. :)
>
> Samuel
More information about the panama-dev
mailing list