(Oh My) Gentool 0.3.0 released
Gavin Ray
user at example.com
Mon May 10 13:34:49 UTC 2021
On Monday, 10 May 2021 at 07:11:26 UTC, evilrat wrote:
> Can't say I hate that idea, but it has same issues as SWIG,
> writing any non trivial rule becomes next to impossible as
> there is practically zero examples and very poor documentation,
> the whole process becomes trial and error marathon without
> chance to win, and it is basically write-only code that is as
> worse as C++ templates. But it is definitely better than SWIG
> in that regard as you can get type and functions information
> using dir() and help() and your trusty IDE with debugger.
Yeah, this is true. I actually ran into this issue already -- you
have extreme devspeed + flexibility with Python but you're
essentially "blind" as to the API and it's a lot of
trial-and-error if it's not a very trivial C++ library.
I think the end goal of being able to provide some way to easily
hook into the codegen pipeline so that users can make tweaks
easily & contribute them back, or customize it for personal use
is probably more important than the "how". This was just the best
"how" I could come up with at the time, hah.
> My current plan though is to provide predefined pre-generate
> and post-generate rules that is applied declaratively in
> project config,
> for example
> `ignoreDecls *::new[]`
> that will ignore all new operator overloads in any namespace,
> or one of any other existing rules that deals with specific
> patterns, and at some point later allow users to write their
> own rules like you described.
> After all this is binding/translator tool, not an universal
> one-for-all code generator.
What about adding `cling` for interpreted JIT C++ without
handicaps?
https://blog.llvm.org/posts/2021-03-25-cling-beyond-just-interpreting-cpp/
This would let both you and users rapidly develop/iterate-on the
codegen part without needing to recompile the entire solution.
The main application hosts the `cling` process, and you don't do
anything except bring the codegen bits in as JIT-interpreted
files. It's not like performance is critical here, you know?😅
The end result is that you (or anyone else) can modify the actual
codegen code, and re-run the compiled binary without needing to
do anything else. `cling` will take care of acting as the engine
to sort out `#include`'s, template instatiations, global context,
etc.
I dunno, I don't really know that much about this area at all. So
there's also a good chance this idea couldn't/wouldn't work, and
is not a good one -- but in my naive head it sounds good!
> No way, Docker is too heavy and not very user friendly or even
> CI friendly. It is ok to have builds optionally packed in
> container, but not as the only way to distribute. It might work
> for cppyy/cling because they rely on specific dynamic library
> properties or fork process on *NIX that is not there on Windows.
Yeah, so the issue there was that `cppyy` needs dynamic libs to
be able to work.
LibTooling hilariously enough can't even be compiled as a dynamic
lib on Windows, since there's a limit of ~65,000 exported visible
symbols and `LINK.exe` will error.
So between wanting the user to have a fairly recent,
self-compiled version of LLVM, and not working on Windows at all,
the easiest thing seemed to be to ask "Hey, just do `docker run`
and that'll run an Ubuntu image with LLVM 13 built with
LLVM_ENABLE_SHARED_LIBS and Python 3 and all of this set up for
you."
Not ideal but also I think maybe the only way to make the `cppyy`
thing work haha.
More information about the Digitalmars-d-announce
mailing list