<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
    
  </head>
  <body>
    <div class="markdown-here-wrapper">
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">Hi
        Lain,
        this is some interesting work. When looking at the
        documentation, and at the examples provided, it is not clear to
        me how some features of C++ are supported. E.g. it seems to me
        that the bindings you create (esp. downcall handles) are
        completely static. That is, if you have B extends A, and both A
        and B define a virtual method, you will add a downcall handle in
        both classes, one for A</p>
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">
        and the other for B</p>
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">.
        Then you kind of rely on <em>Java's</em> (not C++'s !!) dynamic
        dispatch to make things work -- e.g. when you call A</p>
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">
        on an instance of B, the JVM will call B</p>
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">
        -- which will result in the correct C++ method being invoked.
        While this works for simple examples -- I'm a bit skeptical
        about the generality of this approach. Of course, as long as
        there's no multiple inheritance, and as long as all the C++
        classes are created from the Java side of the fence, this might
        even work correctly.</p>
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">But
        if some C++ method returns some A* -- what Java wrapper will we
        create? The problem here is that the choice of the wrapper (A
        vs. B) determines which set of methods will be invoked on that
        instance (because we're effectively bypassing C++'s virtual
        dispatch).</p>
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">All
        things considered, this approach doesn't seem very different
        from the jextract PoC I shared -- in the sense that it models
        some C++ features <em>to some degree</em> without really
        providing full language interop support which, IMHO, is not
        possible w/o having a C++ compiler on your side (inline
        functions are another issue). But maybe, what you are trying to
        say is that, even with a simple PoC like the one I provided,
        it's possible to provide meaningful interop for at least <em>some</em>
        C++ libraries (like eigen) ?</p>
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">Cheers
        Maurizio</p>
      <p style="margin-block: 0px 19.2px; margin-bottom: 19.2px; margin-top: 0px;">On
        26/02/2025 02:13, Lain Lain wrote:</p>
      <blockquote type="cite" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(114, 159, 207) rgb(119, 119, 119); border-inline-start: 2px solid rgb(114, 159, 207); border-left: 2px solid rgb(114, 159, 207); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); caret-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); margin-block: 8px; margin-bottom: 8px; margin-inline: 0px; margin-left: 0px; margin-right: 0px; margin-top: 8px; outline-color: rgb(119, 119, 119); padding-block: 3.2px; padding-bottom: 3.2px; padding-inline: 8px; padding-left: 8px; padding-right: 8px; padding-top: 3.2px; quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">
        <div class="external-content" id="extcontent-0" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(119, 119, 119); border-left-color: rgb(119, 119, 119); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); caret-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); outline-color: rgb(119, 119, 119); quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">
          <div style="font-family: Verdana;font-size: 12.0px;">
            <div>Hi,</div>
            <div>We would like to present you ffmbindings project which
              helps to do manual bindings to C++ libraries from Java
              using FFM.</div>
            <div>Currently it contains bindings to eigen C++ library but
              we are going to publish few more this month.</div>
            <div> </div>
            <div>Source code: <a class="moz-txt-link-freetext" href="https://bitbucket.org/ffmbindings">https://bitbucket.org/ffmbindings</a><br>
              Documentation: <a class="moz-txt-link-freetext" href="https://ffmbindings.onrender.com">https://ffmbindings.onrender.com</a></div>
            <div> </div>
            <div>Any feedback are welcome.</div>
            <div> </div>
            <div>Thank you,</div>
          </div>
        </div>
      </blockquote>
      <div title="MDH:PHA+SGkgTGFpbiw8YnI+dGhpcyBpcyBzb21lIGludGVyZXN0aW5nIHdvcmsuIFdoZW4gbG9va2luZyBhdCB0aGUgZG9jdW1lbnRhdGlvbiwgYW5kIGF0IHRoZSBleGFtcGxlcyBwcm92aWRlZCwgaXQgaXMgbm90IGNsZWFyIHRvIG1lIGhvdyBzb21lIGZlYXR1cmVzIG9mIEMrKyBhcmUgc3VwcG9ydGVkLiBFLmcuIGl0IHNlZW1zIHRvIG1lIHRoYXQgdGhlIGJpbmRpbmdzIHlvdSBjcmVhdGUgKGVzcC4gZG93bmNhbGwgaGFuZGxlcykgYXJlIGNvbXBsZXRlbHkgc3RhdGljLiBUaGF0IGlzLCBpZiB5b3UgaGF2ZSBCIGV4dGVuZHMgQSwgYW5kIGJvdGggQSBhbmQgQiBkZWZpbmUgYSB2aXJ0dWFsIG1ldGhvZCwgeW91IHdpbGwgYWRkIGEgZG93bmNhbGwgaGFuZGxlIGluIGJvdGggY2xhc3Nlcywgb25lIGZvciBBOjptIGFuZCB0aGUgb3RoZXIgZm9yIEI6Om0uIFRoZW4geW91IGtpbmQgb2YgcmVseSBvbiBfSmF2YSdzXyAobm90IEMrKydzICEhKSBkeW5hbWljIGRpc3BhdGNoIHRvIG1ha2UgdGhpbmdzIHdvcmsgLS0gZS5nLiB3aGVuIHlvdSBjYWxsIEE6Om0gb24gYW4gaW5zdGFuY2Ugb2YgQiwgdGhlIEpWTSB3aWxsIGNhbGwgQjo6bSAtLSB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgY29ycmVjdCBDKysgbWV0aG9kIGJlaW5nIGludm9rZWQuIFdoaWxlIHRoaXMgd29ya3MgZm9yIHNpbXBsZSBleGFtcGxlcyAtLSBJJ20gYSBiaXQgc2tlcHRpY2FsIGFib3V0IHRoZSBnZW5lcmFsaXR5IG9mIHRoaXMgYXBwcm9hY2guIE9mIGNvdXJzZSwgYXMgbG9uZyBhcyB0aGVyZSdzIG5vIG11bHRpcGxlIGluaGVyaXRhbmNlLCBhbmQgYXMgbG9uZyBhcyBhbGwgdGhlIEMrKyBjbGFzc2VzIGFyZSBjcmVhdGVkIGZyb20gdGhlIEphdmEgc2lkZSBvZiB0aGUgZmVuY2UsIHRoaXMgbWlnaHQgZXZlbiB3b3JrIGNvcnJlY3RseS48L3A+PHA+QnV0IGlmIHNvbWUgQysrIG1ldGhvZCByZXR1cm5zIHNvbWUgQSogLS0gd2hhdCBKYXZhIHdyYXBwZXIgd2lsbCB3ZSBjcmVhdGU/IFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgY2hvaWNlIG9mIHRoZSB3cmFwcGVyIChBIHZzLiBCKSBkZXRlcm1pbmVzIHdoaWNoIHNldCBvZiBtZXRob2RzIHdpbGwgYmUgaW52b2tlZCBvbiB0aGF0IGluc3RhbmNlIChiZWNhdXNlIHdlJ3JlIGVmZmVjdGl2ZWx5IGJ5cGFzc2luZyBDKysncyB2aXJ0dWFsIGRpc3BhdGNoKS48L3A+PHA+QWxsIHRoaW5ncyBjb25zaWRlcmVkLCB0aGlzIGFwcHJvYWNoIGRvZXNuJ3Qgc2VlbSB2ZXJ5IGRpZmZlcmVudCBmcm9tIHRoZSBqZXh0cmFjdCBQb0MgSSBzaGFyZWQgLS0gaW4gdGhlIHNlbnNlIHRoYXQgaXQgbW9kZWxzIHNvbWUgQysrIGZlYXR1cmVzIF90byBzb21lIGRlZ3JlZV8gd2l0aG91dCByZWFsbHkgcHJvdmlkaW5nIGZ1bGwgbGFuZ3VhZ2UgaW50ZXJvcCBzdXBwb3J0IHdoaWNoLCBJTUhPLCBpcyBub3QgcG9zc2libGUgdy9vIGhhdmluZyBhIEMrKyBjb21waWxlciBvbiB5b3VyIHNpZGUgKGlubGluZSBmdW5jdGlvbnMgYXJlIGFub3RoZXIgaXNzdWUpLiBCdXQgbWF5YmUsIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gc2F5IGlzIHRoYXQsIGV2ZW4gd2l0aCBhIHNpbXBsZSBQb0MgbGlrZSB0aGUgb25lIEkgcHJvdmlkZWQsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSBtZWFuaW5nZnVsIGludGVyb3AgZm9yIGF0IGxlYXN0IF9zb21lXyBDKysgbGlicmFyaWVzIChsaWtlIGVpZ2VuKSA/PC9wPjxwPkNoZWVyczxicj5NYXVyaXppbzwvcD48ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDI2LzAyLzIwMjUgMDI6MTMsIExhaW4gTGFpbiB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOnRyaW5pdHktMWY2MmQ3MGEtMTVhYy00NWUyLWJlOGQtN2NmMTFkZWJhNTQ4LTE3NDA1MzU5ODQ5ODRAM2MtYXBwLW1haWxjb20tbHhhMDYiPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgIj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYTtmb250LXNpemU6IDEyLjBweDsiPjxkaXY+SGksPC9kaXY+Cgo8ZGl2PldlIHdvdWxkIGxpa2UgdG8gcHJlc2VudCB5b3UgZmZtYmluZGluZ3MgcHJvamVjdCB3aGljaCBoZWxwcyB0byBkbyBtYW51YWwgYmluZGluZ3MgdG8gQysrIGxpYnJhcmllcyBmcm9tIEphdmEgdXNpbmcgRkZNLjwvZGl2PgoKPGRpdj5DdXJyZW50bHkgaXQgY29udGFpbnMgYmluZGluZ3MgdG8gZWlnZW4gQysrIGxpYnJhcnkgYnV0IHdlIGFyZSBnb2luZyB0byBwdWJsaXNoIGZldyBtb3JlIHRoaXMgbW9udGguPC9kaXY+Cgo8ZGl2PiZuYnNwOzwvZGl2PgoKPGRpdj5Tb3VyY2UgY29kZTogaHR0cHM6Ly9iaXRidWNrZXQub3JnL2ZmbWJpbmRpbmdzPGJyPgpEb2N1bWVudGF0aW9uOiBodHRwczovL2ZmbWJpbmRpbmdzLm9ucmVuZGVyLmNvbTwvZGl2PgoKPGRpdj4mbmJzcDs8L2Rpdj4KCjxkaXY+QW55IGZlZWRiYWNrIGFyZSB3ZWxjb21lLjwvZGl2PgoKPGRpdj4mbmJzcDs8L2Rpdj4KCjxkaXY+VGhhbmsgeW91LDwvZGl2PjwvZGl2Pgo8L2Jsb2NrcXVvdGU+" aria-hidden="true" style="font-size: 0px; padding: 0px; margin: 0px; block-size: 0px; height: 0px; inline-size: 0px; max-block-size: 0px; max-height: 0px; max-inline-size: 0px; max-width: 0px; overflow-block: hidden; overflow-inline: hidden; overflow: hidden; width: 0px;" class="mdhr-raw">&#8203;</div>
    </div>
  </body>
</html>