[llvm-dev] Explicitly spelling out the lack of stability for the C++ API in the Developer Policy?
Chris Tetreault via llvm-dev
llvm-dev at lists.llvm.org
Mon Jul 27 12:45:24 PDT 2020
As the person behind a lot of the SVE work mentioned in Nicolai's response, I can say that the lack of a documented policy on this has been incredibly frustrating for me. I've been told by code reviewers to remove parts of patches aimed at maintaining stability. I've been told weeks after the fact to add such changes. I've had people put the breaks on my work because they did not read the RFC submitted to the mailing lists months prior. And through all of this I had no ground to stand on to push back on any of it. I'm fairly new to this project, so I have little personal clout with which to assert myself, and the policy is entirely oral tradition.
For the time being, I will not take a position whether or not "flag-day" changes are optional, encouraged, discouraged, required, or forbidden. I just ask that we please decide on something, and write it down. If the current practice is not acceptable, then that should be raised in a separate RFC, but we should still write the current practice down.
Thank you,
Christopher Tetreault
-----Original Message-----
From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of Nicolai Hähnle via llvm-dev
Sent: Friday, July 24, 2020 9:36 AM
To: Mehdi AMINI <joker.eph at gmail.com>
Cc: llvm-dev <llvm-dev at lists.llvm.org>; Varun Gandhi <varun_gandhi at apple.com>
Subject: [EXT] Re: [llvm-dev] Explicitly spelling out the lack of stability for the C++ API in the Developer Policy?
On Fri, Jul 24, 2020 at 12:14 AM Mehdi AMINI <joker.eph at gmail.com> wrote:
> On Thu, Jul 23, 2020 at 8:29 AM Nicolai Hähnle via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>> Hi Varun,
>>
>> On Wed, Jul 22, 2020 at 2:17 AM Varun Gandhi via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>> > * Stability Guarantees: The C++ API is does not guarantee any stability. Changes may be made without any notice about deprecation and alternate APIs for the same functionality may not be included. Downstream projects using the C++ API are expected to keep up with changes.
>>
>> I'm generally on board with this, certainly between LLVM releases,
>> but I feel like it would be friendlier to use (potentially
>> short-lived) deprecation as a tool for LLVM trunk.
>>
>> We maintain an out-of-tree compiler[0] and try to be good citizens by
>> following LLVM trunk very closely. It is always frustrating when a
>> very central part of LLVM (like the Builders, or Instructions) have a
>> "flag-day" change, where our frontend must be changed in a way where
>> the new version doesn't work with LLVM trunk that is even a few days
>> old, and the old version doesn't work with current LLVM trunk.
>>
>> In many, many cases it is almost zero effort for the person making
>> the chance in LLVM to split it up into a sequence of logical changes:
>>
>> 1) Add the new API.
>> 2) Use it in llvm-project.
>> 3) Add LLVM_ATTRIBUTE_DEPRECATED to the old API.
>> 4) Remove the old API.
>>
>> 1-3 could be in a single commit, but having a few weeks between them
>> and point 4 helps _massively_.
>
>
> I don't see this as a "almost zero effort", I see this as a potentially *heavy* effort actually.
What do you base this belief on?
> I am also fairly wary of the side-effect of such expectation in that it will:
> - discourage refactoring / cleanup, leading to an overall more cumbersome/convoluted API surface and overall codebase.
> - encourage to "work-around" the process by creating duplication of features because designing around deprecation is "work".
The single most discouraging thing about refactoring / cleanup in LLVM is that there are very, very few reviewers willing to say "Yes".
Besides, I think you misunderstood: the point isn't to *forbid* flag-day changes. The point is to encourage thinking about how to do refactoring better. Sometimes a flag-day change is required, and that's fine, but in the vast majority of cases it isn't.
We have seen this in practice this year with the Align changes and the SVE changes, and it generally works well (git log -S LLVM_ATTRIBUTE_DEPRECATED shows the related changes -- there aren't many of them, but there aren't many changes with the potential of breaking a frontend build in the first place).
I'm simply saying that we should document established practice that exists in the LLVM community today.
Cheers,
Nicolai
>
> Best,
>
> --
> Mehdi
>
>
>>
>> It allows us to keep compiling against LLVM trunk in our CI, while
>> one person goes and fixes up our use of the API (which we can detect
>> automatically thanks to the warning or -Werror). It also makes it
>> easier for us to bisect regressions across such API changes.
>>
>> With the alternative, where 1-4 are all in a single commit, our
>> integration with LLVM trunk is blocked until somebody can fix it --
>> which is usually as quick as 1 or 2 days, but during that time window
>> we don't catch any _other_ regressions in LLVM trunk that might
>> affect us.
>>
>> So please, let's make it a common rule to use this two-step,
>> transactional approach to changes in APIs that are relatively "core"
>> (which mostly means llvm/IR, llvm/ADT, llvm/Support, perhaps with a
>> side of llvm/Analysis). I am perfectly fine with this rule being
>> broken occasionally, for changes where it would be exceedingly tricky
>> to do them in a non-flag-day way. But in our experience, most of the
>> changes that would actually affect an out-of-tree frontend aren't
>> this tricky.
>>
>> Cheers,
>> Nicolai
>>
>>
>> > * Release stability: The C++ API does not make any stability guarantees for the release branch.
>> > * Testing: Patches to the C++ API are expected to come with tests just like any other patch.
>> > * Including new things into the API: [TODO: I'm not sure what should go here].
>> > * Documentation: Changes to the C++ API are not expected to be documented in the release notes.
>> > ---
>> >
>> > Clang does have a page with information about its own C++ API (https://clang.llvm.org/docs/Tooling.html) which is more informative, but I think it would useful to have this information on the Developer Policy page for the whole of LLVM.
>> >
>> > Does this addition sound reasonable?
>> >
>> > Varun
>> > _______________________________________________
>> > LLVM Developers mailing list
>> > llvm-dev at lists.llvm.org
>> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>>
>> --
>> Lerne, wie die Welt wirklich ist,
>> aber vergiss niemals, wie sie sein sollte.
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
--
Lerne, wie die Welt wirklich ist,
aber vergiss niemals, wie sie sein sollte.
_______________________________________________
LLVM Developers mailing list
llvm-dev at lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list