Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Oct 2017 14:54:47 -0700
From:      David Goldblatt <davidtgoldblatt@gmail.com>
To:        FreeBSD Current <freebsd-current@freebsd.org>
Subject:   Re: C++ in jemalloc
Message-ID:  <CAHD6eXdk4gn%2Bmq=wGBqqkMGGuoN3rwB2=KFG1PbFHTtkuJr9TA@mail.gmail.com>
In-Reply-To: <CAHD6eXdazBO4=R7m5odWLt0YyAoTsuZTKvYbEh4_U5ZUXzxt9g@mail.gmail.com>
References:  <CAHD6eXdazBO4=R7m5odWLt0YyAoTsuZTKvYbEh4_U5ZUXzxt9g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Re: the risk of dependencies on the C++ runtime.

(apologies Konstantin, your email got trapped in a spam filter; "It is in
violation of Google's recommended email sender guidelines", according to
GMail).

Avoiding C++ runtime dependencies is fairly straightforward in practice
(e.g. a program that doesn't use *use* thread-local objects with
destructors won't link against cxa_thread_atexit; similarly,
-fno-exceptions and -fno-rtti and their equivalents are widely available).
It's impossible of course to guarantee that FreeBSD won't ever want to
switch to a (not-yet-written, afaik) compiler + ABI combo that doesn't
admit a runtime-less C++, but that seems unlikely (and, if it were to
happen, it would take enough years of notice and effort that porting the
allocator back to C would be a small relative cost).

We also test bootstrapping behavior against the libcs that we care about,
so that we get some relatively good signal that everything will integrate
correctly on a per-jemalloc-commit basis (we don't try to test against
FreeBSD head, but I don't think that's necessarily a feasible strategy).

I'm sympathetic to the costs of the added compiler required for those
building libc, but weighing it against the ongoing maintenance drag on our
end, it seems like a no-brainer (especially when we already come with
dependencies outside of just the compiler and base build system).

- David

On Thu, Oct 5, 2017 at 11:59 AM, David Goldblatt <davidtgoldblatt@gmail.com>
wrote:

> Hi all,
>
> The jemalloc developers have wanted to start using C++ for a while, to
> enable some targeted refactorings of code we have trouble maintaining due
> to brittleness or complexity (e.g. moving thousand line macro definitions
> to templates, changing the build->extract symbols->rebuild mangling scheme
> for internal symbols to one using C++ namespaces). We'd been holding off
> because we thought that FreeBSD base all had to compile on GCC 4.2, in
> order to support some esoteric architectures[1].
>
> The other day though, I noticed that there is some C++ shipping with
> FreeBSD; /usr/bin/dtc and /sbin/devd (the former claiming in the HACKING
> document that C++11 is a minimum for FreeBSD 11). This, combined with the
> fact that ports now points to a modern gcc, makes me think we were
> incorrect, and can turn on C++ without breaking FreeBSD builds.
>
> Am I right? Will anything break if jemalloc needs a C++ compiler to build?
> We will of course not use exceptions, RTTI, global constructors, the C++
> stdlib, or anything else that might affect C source or link compatibility.
>
> Thanks,
> David (on behalf of the jemalloc developers
>
> [1] That being said, we don't compile or test on those architectures, and
> so probably don't work there in the first place if I'm being honest. But
> we'd also like to avoid making that a permanent state of affairs that can't
> be changed.
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAHD6eXdk4gn%2Bmq=wGBqqkMGGuoN3rwB2=KFG1PbFHTtkuJr9TA>