On Thu, 2021-04-15 at 17:31 -0400, David Malcolm via Gcc wrote:
> On Thu, 2021-04-15 at 21:48 +0200, Thomas Koenig wrote:
[...snip...]
> > > Perhaps a pronouncement like: "try to make everything be
> > consumable as
> > > libraries with APIs, as well as as standalone binaries" might
> > have
> > > helped (and still could; can we do that please?)
> >
> > That makes perfect sense, as LLVM shows, and is something that the
> > steering committee could decide for the project (or rather, it
> > could
> > issue a pronouncement that this will not be opposed if some
> > volunteer
> > does it).
> >
> > I think this could be as close to an unanimous decision as there
> > can
> > be among such a diverse community as the gcc developers. If the
> > FSF
> > takes umbrage at this, the ball is in their court.
>
> I deliberately added the weasel-words "try to", because these things
> are, of course, much easier said that done.
>
> I attempted to reduce gcc's use of global state back in 2013 with a
> view to making it a shared library, but eventually the sheer size of
> the task overwhelmed me. In libgccjit I hid everything behind a
> separate API, with a bug mutex guarding all of gcc's global state,
~~~
big, I meant to write.
> which feels like something of a cop-out.
libgccjit calls into as and ld, which shows up in the profile, so
another idea I dabbled in the whole "libraries rather than just
executables" area is to make as and ld buildable as shared libraries;
hence this 2015 experiment:
"[PATCH 00/16] RFC: Embedding as and ld inside gcc driver and into
libgccjit"
crossposted between gcc-patches and binutils here:
https://gcc.gnu.org/legacy-ml/gcc-patches/2015-06/msg00116.html
https://sourceware.org/legacy-ml/binutils/2015-06/msg00010.html
(admittedly my prototype had a barely-existent API, but it gave me a 5x
speedup on a synthetic benchmark, which was dominated by the overhead
of dynamically linking libbfd into as and ld on each invocation IIRC;
better to do it once when libgccjit is linked into the process).
>
> One idea I had would be to refactor out our diagnostics code into a
> libdiagnostics (or similar), so that all of the source-
> printing/underlining/fix-it logic etc could be used outside of gcc, and
> the use of diagnostic_context might help towards that. But even "just"
> that's decidedly non-trivial.
>
> Hope this is constructive
> Dave
>
>