Dynamic binding to the Mono runtime API
Jakub Szewczyk via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Sun Jun 4 01:18:36 PDT 2017
On Sunday, 4 June 2017 at 05:47:32 UTC, Adam Wilson wrote:
> On 6/3/17 10:30, Jakub Szewczyk wrote:
>> ...
>
> I work with C# professionally and this is some SERIOUSLY cool
> work. Thank you for this!
Thank you all!
>
> I've looked over the code a bit and I have a couple of
> questions.
> This appears to be an interface to the runtime itself, not a
> BCL interface correct?
> It looks like this could be used to could this be used to read
> into a Mono Class Libraries, and if so would so some sort of
> automated code generation tool be required? It looks to me like
> the binding will be non-trivial, with GC, exceptions, etc. that
> all need to be handled at the call-site.
> Can we get a static library version of this, or is there a
> dependency on dynamic libraries?
>
> I have to admit I am very impressed. I have spent a lot of time
> building code generators before and I have to admit that the
> idea of binding to arbitrary .NET libraries via code generation
> is extremely appealing to me. I am seriously tempted to take
> this and start building a binding generator...
>
> I seriously need more free time! Way too many cool and useful
> things happening in D for my limited free time. A D binding for
> XAML ... THAT would sight to behold!
This is an interface to the Mono libraries, D/CLI would require
quite a lot of compiler changes, both on the front-end and
back-end side, but thanks to metaprogramming a wrapper library
can get very close to such an interface.
I plan on making an automated D to Mono bridge, akin to LuaD, so
that it can be used as a scripting platform for e.g. games. I
haven't thought about doing it the other way around, but now it
seems like a very interesting idea! Unfortunately no XAML
(http://www.mono-project.com/docs/gui/wpf/), but many other
libraries, such as XWT (https://github.com/mono/xwt) could be
ported this way, I'll certainly look into it.
Mono actually supports some kind of GC bridging as far as I
understand, as there is a sgen-bridge.h header just for that, and
it has apparently been used in the C#-Java Xamarin interace on
Android. As for exceptions - D functions have to be wrapped in a
nothrow wrapper, but that can be completely automated with
templates. The other way around is also quite simple - when
invoking a Mono function a pointer can be given that will set an
exception reference if one is thrown from the .NET side, and a
wrapper can easily rethrow it back to D.
I can make a static library version, it's just some regex
substitutions done on the functions file actually, most probably
I'll publish it today. It will be a dub subconfiguration like it
is the case for GLFW3. Btw, I've manually ported the basic and
configuration headers, so that no mistakes are made, and then
used DStep and a modified DStep to generate the rest of the
headers - my modification was only to change the way function
declarations are generated, to make them in derelict form of
alias da_function = void function(...);, and the rest was done
with quite a lot of editor(VSCode) shortcuts.
More information about the Digitalmars-d-announce
mailing list