I’ve been thinking about how to manage the UCG discussions. Here is a proposal.
The basic idea is simple: we try to focus discussion on one area at a time. The discussion begins with a proposal outlining the goals (here is an example of such a proposal). From there, we open up various threads that are discussing “mostly independent” topics. Over the course of the discussion, a “discussion lead” will periodically collate the details into a document living in the unsafe-code-guidelines repository, so that people can get up to speed more quickly. At some point, when we feel like we’ve gone as far as we can go, we “wrap up” the discussion and select another thing to talk about. The rest of this post kind of goes into a bit more detail on how I envision that working.
Starting a discussion
To start a discussion, a lead (or group of leads) prepares a
“discussion proposal”. This has the form of a PR against the unsafe
code guidelines repository. This PR adds a file like
active_discussions/my_topic.md – to get the idea across, I’ve
drafted an example concerning data structure representation. The
idea is that this proposal will:
- outline the topic to be discussed and the goals of the discussion,
- highlight some interesting questions and background reading,
- and propose an initial set of threads.
On the PR, we can discuss whether this is a good thing to talk about and what changes we might make. For example, maybe we want to narrow the topic, or add some more examples.
Repo and Threads
When we’re happy, we’ll merge the PR, and we’ll update the README.md
so that it describes the active area of discussion. At that point, I
thnk we’ll also open up the various discussion threads. We can create
a unique label for the area of discussion (e.g.,
A-representation-invariants) so that they are easy to find.
(I debated about suggesting we create a subcategory on internals for this, but it seemed like it might be simpler to consolidate things on GitHub. I’m open to thoughts here, however.)
The point of updating the README.md is that when you go [the repository] it should be very easy to:
- find out the current area of discussion
- come up to speed (by reading the discussion proposal)
- This relies on the discussion leads keeping the proposal up to date. See the “regular meetings and schedule” section below.
- get to the threads and join in (via a github issue search for the label)
Ending a discussion
At some point, we can decide that the discussion is “over”. The leads can then take the final summaries and kind of move that content into our “reference”, which basically collates all the results from prior discussions.
Note that discussions don’t have to reach firm conclusions: it is ok
to end with “these things are known” as well as “these things need to
be settled in the future”. As an example, when it comes to data
structure representation, I expect we will all agree that
Option<&i32> is guaranteed to be represented as a nullable pointer.
But is the same true for
Result<&i32, ()>? What about a user-defined
enum with the “same shape” as
Option? In the case where the right
answer isn’t clear, we should summarize the arguments pro and con. In
short, I see the job of the UCG team right now as being to document
and uncover constraints.
Regular meetings and schedule
In order to keep things moving along, I propose that every two weeks we have a regular meeting, probably on a Thursday or Friday. The purpose of this meeting is procedural, not technical – basically, we want to assess the state of the current area of discussion and decide whether to move on to a new one. The meeting will take place on Zulip, time and date to be decided via this doodle poll.
The meeting is intentionally supposed to be short and not that interesting. Instead, on Tuesday of that same week, the discussion lead will do a survey of the conversation and update the “discussion area proposal” – this will be another PR, to be merged during the meeting. This way, if you want to give your two cents, you can comment on the PR.
@avadacatavra has generously offered to act as a facillitator. What that means is that on the Monday prior the meeting, they’ll ping the discussion leads and make sure that they are selecting topics, as well as possibly other similar tasks.
Relationship to rust reference, making things official
As I wrote, for the time being, I am expecting our first goal to be to document consensus and uncover constraints – not necessarily to resolve the “hard questions”. Essentially, I see this team as trying to form a kind of “recommendation”. For that to become “official”, I think we should eventually write a T-lang RFC.
That said, I think that we have more in common than we have differences! By this I mean: I think there are tons of things that are widely agreed upon when it comes to unsafe code, but very few of those are written down. I think that rather than dive headlong into relatively controversial topics like the aliasing rules, where consensus may be difficult, we should try to start out with things where we expect to be able to reach some conclusions.