AdaCore / ada-spark-rfcs

Platform to submit RFCs for the Ada & SPARK languages
62 stars 28 forks source link

Project

This platform is a hub through which evolutions of the SPARK & Ada languages will be discussed, as implemented in AdaCore’s GNAT toolchain.

The aims of this platform are:

This platform is centered around language changes rather than toolchain improvements.

It is recommended to refer to the following resources for the current definition of Ada and SPARK languages:

There is no guarantee that changes discussed and eventually prototyped & implemented will ever make it into the Ada standard, even though AdaCore will do its best to collaborate with the Ada Rapporteur Group (ARG).

AdaCore will commit to discuss changes that it plans on this platform, so that users can give and get feedback on RFCs. It will also make it possible for people from the community to propose and discuss potential features and improvements.

Organisation

RFCs are submitted to review as pull request. There are two kind of RFCs:

Once a RFC is reviewed, it will be either abandoned or merged. When it's merged, high-level RFCs will go in the meta folder, and regular ones will first go in considered, and then, eventually, when prototyped in GNAT, in the prototyped folder.

The process

Before creating an RFC

Creating an issue

All features ideas that are not very close to a finished state should go through an issue first. It is expected that, in most cases, features ideas should go through an issue first, so that we can assess the interest there is around it.

It follows that, in 99% of the cases, and when in doubt, you should start by creating an issue rather than a RFC. There are existing issue templates to help you in the process.

If you really think you should create a RFC

Any language change can have potentially large effects on other parts of the language. There are several questions that need to be discussed for any new feature:

It follows that a possible first step before creating an RFC is to create an issue to informally discuss the feature, and gather different levels of feedback. The less certain you are about the feature, both in terms of desirability and in terms of maturity, the more this step should be favored.

Creating an RFC

The process to add a feature to the language starts by submitting an RFC into the RFC repository as a RST file. At that point the RFC is considered alive. It does not necessarily mean that it will get implemented, but that it is amongst those that are considered for addition.

Here is the process to get an RFC into alive state:

As a pull request the RFC will receive design feedback from AdaCore’s language design team, and from the larger community, and the author should be prepared to revise it in response. Expect several iterations between discussions, consensus building, and clarifications.

At some point, a member of the AdaCore language design team will make a decision about the future of the RFC, which can be either accept, reject, or postpone.

Supporting an RFC/providing feedback

As a community member, you are encouraged to provide support/feedback on existing RFCs.

If you have remarks/comments on an RFC, you can simply comment on the RFC itself. You can sync with the RFC author to propose amendments to the RFC if you think some are necessary.

If you want simply to signal support for a proposal, you should add a +1 reaction ("thumb up") to the corresponding Pull Request's original message.

What happens afterwards

Credits

Most of the content of this document was inspired by the RFC process from the Rust community.