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.