mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 18:40:16 +01:00
Adjust md tab width to work better cross-markdown-parser (#124)
We're running into issues with md handlers that expect this kind of 4-space indent. It should be cross-compatible with GH, so switch, even though it feels a little churny.
Manual edits are to:
- .prettierrc.yaml:
- rename from .prettierrc
- add tabWidth (primary change)
- add trailingComma (fix vimPrettier skew)
- contribution_tools.md: Fix remarks about .prettierrc.yaml
- pre-commit-toc.js: indent, bullets
- pre-commit-proposal-list.py: indent of output
The rest is the result of `pre-commit run --all-files`
Unfortunately this'll probably depend on the change being propagated into PR branches, so I wouldn't be surprised if we see regressions for a bit. We'll also need to nudge people to update .vimrc's. Hopefully the pre-commit GH action helps catch issues.
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
printWidth: 80
|
||||
proseWrap: "always"
|
||||
singleQuote: true
|
||||
tabWidth: 2
|
||||
useTabs: false
|
||||
@@ -0,0 +1,10 @@
|
||||
printWidth: 80
|
||||
proseWrap: 'always'
|
||||
singleQuote: true
|
||||
tabWidth: 2
|
||||
trailingComma: 'es5'
|
||||
useTabs: false
|
||||
overrides:
|
||||
- files: '*.md'
|
||||
options:
|
||||
tabWidth: 4
|
||||
+100
-99
@@ -11,13 +11,13 @@ commitment to psychological safety, and we want to ensure that doesn’t change
|
||||
we grow and evolve. To that end, we have a few ground rules that we ask all
|
||||
community members to adhere to:
|
||||
|
||||
- be welcoming,
|
||||
- be friendly and patient,
|
||||
- be considerate,
|
||||
- be respectful,
|
||||
- be careful in the words that you choose and be kind to others,
|
||||
- when we disagree, try to understand why, and
|
||||
- recognize when progress has stopped, and take a step back.
|
||||
- be welcoming,
|
||||
- be friendly and patient,
|
||||
- be considerate,
|
||||
- be respectful,
|
||||
- be careful in the words that you choose and be kind to others,
|
||||
- when we disagree, try to understand why, and
|
||||
- recognize when progress has stopped, and take a step back.
|
||||
|
||||
This list isn't exhaustive. Rather, take it in the spirit in which it’s intended
|
||||
-- a guide to make it easier to communicate and participate in the community.
|
||||
@@ -40,68 +40,68 @@ violating the code of conduct, please report it to the
|
||||
More detailed guidance on how to participate effectively in our community
|
||||
spaces:
|
||||
|
||||
- **Be welcoming.** We strive to be a community that welcomes and supports
|
||||
people of all backgrounds and identities. This includes, but is not limited
|
||||
to, members of any race, ethnicity, culture, national origin, color,
|
||||
immigration status, social and economic class, educational level, sex, sexual
|
||||
orientation, gender identity and expression, physical appearance, age, size,
|
||||
family status, relationship status, political belief, religion or lack
|
||||
thereof, and mental and physical ability.
|
||||
- **Be welcoming.** We strive to be a community that welcomes and supports
|
||||
people of all backgrounds and identities. This includes, but is not limited
|
||||
to, members of any race, ethnicity, culture, national origin, color,
|
||||
immigration status, social and economic class, educational level, sex,
|
||||
sexual orientation, gender identity and expression, physical appearance,
|
||||
age, size, family status, relationship status, political belief, religion or
|
||||
lack thereof, and mental and physical ability.
|
||||
|
||||
- **Be friendly and patient.** We want to encourage people to participate in our
|
||||
community by keeping its atmosphere friendly and positive. This is especially
|
||||
important because many of our communication tools on the Internet are
|
||||
low-fidelity and make it difficult to understand each other. Be patient,
|
||||
assume good intent, and stay supportive so that we can learn how to
|
||||
collaborate effectively as a group.
|
||||
- **Be friendly and patient.** We want to encourage people to participate in
|
||||
our community by keeping its atmosphere friendly and positive. This is
|
||||
especially important because many of our communication tools on the Internet
|
||||
are low-fidelity and make it difficult to understand each other. Be patient,
|
||||
assume good intent, and stay supportive so that we can learn how to
|
||||
collaborate effectively as a group.
|
||||
|
||||
- **Be considerate.** Your work will be used by other people, and you in turn
|
||||
will depend on the work of others. Any decision you make will affect users and
|
||||
colleagues, and you should take those consequences into account. Remember that
|
||||
we’re a world-wide community, so you might not be communicating in someone
|
||||
else’s primary language.
|
||||
- **Be considerate.** Your work will be used by other people, and you in turn
|
||||
will depend on the work of others. Any decision you make will affect users
|
||||
and colleagues, and you should take those consequences into account.
|
||||
Remember that we’re a world-wide community, so you might not be
|
||||
communicating in someone else’s primary language.
|
||||
|
||||
- **Be respectful.** Not all of us will agree all the time, but disagreement is
|
||||
no excuse for poor behavior and poor manners. We might all experience some
|
||||
frustration now and then, but we cannot allow that frustration to turn into a
|
||||
personal attack. It’s important to remember that a community where people feel
|
||||
uncomfortable or threatened is not a productive one. Members of our community
|
||||
should be respectful when dealing with other members as well as with people
|
||||
outside the Carbon community.
|
||||
- **Be respectful.** Not all of us will agree all the time, but disagreement
|
||||
is no excuse for poor behavior and poor manners. We might all experience
|
||||
some frustration now and then, but we cannot allow that frustration to turn
|
||||
into a personal attack. It’s important to remember that a community where
|
||||
people feel uncomfortable or threatened is not a productive one. Members of
|
||||
our community should be respectful when dealing with other members as well
|
||||
as with people outside the Carbon community.
|
||||
|
||||
- **Be careful in the words that you choose and be kind to others.** Do not
|
||||
insult or put down other participants. Harassment and other exclusionary
|
||||
behaviors aren’t acceptable. This includes, but is not limited to:
|
||||
- **Be careful in the words that you choose and be kind to others.** Do not
|
||||
insult or put down other participants. Harassment and other exclusionary
|
||||
behaviors aren’t acceptable. This includes, but is not limited to:
|
||||
|
||||
- Violent threats or language directed against another person.
|
||||
- Discriminatory jokes and language.
|
||||
- Posting sexually explicit or violent material.
|
||||
- Posting, or threatening to post, other people’s personally identifying
|
||||
information ("doxing") without their explicit permission.
|
||||
- Personal insults, especially those using racist or sexist terms.
|
||||
- Unwelcome sexual attention.
|
||||
- Advocating for, or encouraging, any of the above behavior.
|
||||
- In general, if someone asks you to stop, then stop. Persisting after being
|
||||
asked to stop is considered harassment.
|
||||
- Violent threats or language directed against another person.
|
||||
- Discriminatory jokes and language.
|
||||
- Posting sexually explicit or violent material.
|
||||
- Posting, or threatening to post, other people’s personally identifying
|
||||
information ("doxing") without their explicit permission.
|
||||
- Personal insults, especially those using racist or sexist terms.
|
||||
- Unwelcome sexual attention.
|
||||
- Advocating for, or encouraging, any of the above behavior.
|
||||
- In general, if someone asks you to stop, then stop. Persisting after
|
||||
being asked to stop is considered harassment.
|
||||
|
||||
- **When we disagree, try to understand why.** Disagreements, both social and
|
||||
technical, happen all the time, and Carbon is no exception. It is important
|
||||
that we resolve disagreements and differing views constructively. Remember
|
||||
that we’re different. The strength of the project comes from its varied
|
||||
community: people from a wide range of backgrounds. Different people have
|
||||
different perspectives on issues. Being unable to understand why someone holds
|
||||
a viewpoint doesn’t mean that they’re wrong. Don’t forget that it is human to
|
||||
err and blaming each other doesn’t get us anywhere. Instead, focus on helping
|
||||
to resolve issues and learning from mistakes.
|
||||
- **When we disagree, try to understand why.** Disagreements, both social and
|
||||
technical, happen all the time, and Carbon is no exception. It is important
|
||||
that we resolve disagreements and differing views constructively. Remember
|
||||
that we’re different. The strength of the project comes from its varied
|
||||
community: people from a wide range of backgrounds. Different people have
|
||||
different perspectives on issues. Being unable to understand why someone
|
||||
holds a viewpoint doesn’t mean that they’re wrong. Don’t forget that it is
|
||||
human to err and blaming each other doesn’t get us anywhere. Instead, focus
|
||||
on helping to resolve issues and learning from mistakes.
|
||||
|
||||
- **Recognize when progress has stopped, and take a step back.** Regardless of
|
||||
whether you're trying to resolve a disagreement or anything else, think about
|
||||
whether you're making progress. Sometimes messaging doesn't give time to think
|
||||
about a situation fully, and repeating positions can make people defensive.
|
||||
Step back for a few minutes or hours to think through the issue before
|
||||
responding again. Consider pulling in another community member to give a fresh
|
||||
perspective. Maybe meet over VC instead. Switching approaches can help resume
|
||||
progress.
|
||||
- **Recognize when progress has stopped, and take a step back.** Regardless of
|
||||
whether you're trying to resolve a disagreement or anything else, think
|
||||
about whether you're making progress. Sometimes messaging doesn't give time
|
||||
to think about a situation fully, and repeating positions can make people
|
||||
defensive. Step back for a few minutes or hours to think through the issue
|
||||
before responding again. Consider pulling in another community member to
|
||||
give a fresh perspective. Maybe meet over VC instead. Switching approaches
|
||||
can help resume progress.
|
||||
|
||||
If you have questions, please feel free to ask on our Discourse Forum, Discord
|
||||
Chat, or contact any member of the conduct team directly.
|
||||
@@ -142,15 +142,15 @@ Reports can be as formal or informal as needed for the situation at hand. If
|
||||
possible, please include as much information as you can. If you feel
|
||||
comfortable, please consider including:
|
||||
|
||||
- Your contact info, so we can get in touch with you if we need to follow up.
|
||||
- Names -- real, nicknames, or pseudonyms -- of any individuals involved. If
|
||||
there were other witnesses besides you, please try to include them as well.
|
||||
- When and where the incident occurred. Please be as specific as possible.
|
||||
- Your account of what occurred, including any private chat logs or email.
|
||||
- Links for any public records, including Discourse Forum links.
|
||||
- Any extra context for the incident.
|
||||
- If you believe this incident is ongoing.
|
||||
- Any other information you believe we should have.
|
||||
- Your contact info, so we can get in touch with you if we need to follow up.
|
||||
- Names -- real, nicknames, or pseudonyms -- of any individuals involved. If
|
||||
there were other witnesses besides you, please try to include them as well.
|
||||
- When and where the incident occurred. Please be as specific as possible.
|
||||
- Your account of what occurred, including any private chat logs or email.
|
||||
- Links for any public records, including Discourse Forum links.
|
||||
- Any extra context for the incident.
|
||||
- If you believe this incident is ongoing.
|
||||
- Any other information you believe we should have.
|
||||
|
||||
### What happens after contacting the conduct team?
|
||||
|
||||
@@ -160,10 +160,10 @@ business day, and we will aim to respond much quicker than that.
|
||||
The conduct team will review the incident as soon as possible and try to
|
||||
determine:
|
||||
|
||||
- What happened and who was involved.
|
||||
- Whether this event constitutes a code of conduct violation.
|
||||
- Whether this is an ongoing situation, or if there is a threat to anyone’s
|
||||
physical safety.
|
||||
- What happened and who was involved.
|
||||
- Whether this event constitutes a code of conduct violation.
|
||||
- Whether this is an ongoing situation, or if there is a threat to anyone’s
|
||||
physical safety.
|
||||
|
||||
If this is determined to be an ongoing incident or a threat to physical safety,
|
||||
the conduct team's immediate priority will be to protect everyone involved. This
|
||||
@@ -177,10 +177,10 @@ perspectives.
|
||||
Once the conduct team has a complete account of the events they will make a
|
||||
decision as to how to respond. Responses may include:
|
||||
|
||||
- Nothing, if no violation occurred or it has already been appropriately
|
||||
resolved.
|
||||
- One or more [enforcement actions](#enforcement-actions).
|
||||
- Involvement of relevant law enforcement if appropriate.
|
||||
- Nothing, if no violation occurred or it has already been appropriately
|
||||
resolved.
|
||||
- One or more [enforcement actions](#enforcement-actions).
|
||||
- Involvement of relevant law enforcement if appropriate.
|
||||
|
||||
If the situation is not resolved within one week, we’ll respond to the original
|
||||
reporter with an update and explanation.
|
||||
@@ -223,29 +223,30 @@ violation of this Code of Conduct using these guidelines based on the behavior
|
||||
involved:
|
||||
|
||||
1. **Correction**
|
||||
- **Behavior:** Use of inappropriate language or other minor violations the
|
||||
code of conduct.
|
||||
- **Action:** A private, written message providing clarity around the nature
|
||||
of the violation and an explanation of why the behavior was inappropriate.
|
||||
A public apology may be requested.
|
||||
- **Behavior:** Use of inappropriate language or other minor violations
|
||||
the code of conduct.
|
||||
- **Action:** A private, written message providing clarity around the
|
||||
nature of the violation and an explanation of why the behavior was
|
||||
inappropriate. A public apology may be requested.
|
||||
1. **Warning**
|
||||
- **Behavior:** A code of conduct violation through a single moderate
|
||||
incident, or a series of minor violations.
|
||||
- **Action:** In addition to the correction action, a temporary restriction
|
||||
barring interaction with the people involved for a specified period of
|
||||
time, including unsolicited interaction with the conduct team. Violating
|
||||
these terms may lead to a ban.
|
||||
- **Behavior:** A code of conduct violation through a single moderate
|
||||
incident, or a series of minor violations.
|
||||
- **Action:** In addition to the correction action, a temporary
|
||||
restriction barring interaction with the people involved for a specified
|
||||
period of time, including unsolicited interaction with the conduct team.
|
||||
Violating these terms may lead to a ban.
|
||||
1. **Temporary ban**
|
||||
- **Behavior:** A serious violation of the code of conduct, including
|
||||
sustained inappropriate behavior.
|
||||
- **Action:** In addition to the warning action, a temporary ban from use of
|
||||
Carbon's community spaces for a specified period of time. External
|
||||
channels, such as social media, should not be used to bypass these
|
||||
restrictions during the temporary ban. Violating these terms may lead to a
|
||||
permanent ban.
|
||||
- **Behavior:** A serious violation of the code of conduct, including
|
||||
sustained inappropriate behavior.
|
||||
- **Action:** In addition to the warning action, a temporary ban from use
|
||||
of Carbon's community spaces for a specified period of time. External
|
||||
channels, such as social media, should not be used to bypass these
|
||||
restrictions during the temporary ban. Violating these terms may lead to
|
||||
a permanent ban.
|
||||
1. **Permanent ban**
|
||||
- **Behavior:** Demonstrating a pattern of violation of the code of conduct.
|
||||
- **Action:** A permanent ban from use of Carbon's community spaces.
|
||||
- **Behavior:** Demonstrating a pattern of violation of the code of
|
||||
conduct.
|
||||
- **Action:** A permanent ban from use of Carbon's community spaces.
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
|
||||
+90
-87
@@ -12,11 +12,11 @@ free to ask on our Discourse Forums or Discord Chat.
|
||||
|
||||
Everyone contributing to Carbon is expected to:
|
||||
|
||||
- Read and follow the [Code of Conduct](CODE_OF_CONDUCT.md). We expect everyone
|
||||
in our community to be welcoming, helpful, and respectful.
|
||||
- Ensure you have signed the
|
||||
[Contributor License Agreement (CLA)](https://cla.developers.google.com/). We
|
||||
need this to cover some legal bases.
|
||||
- Read and follow the [Code of Conduct](CODE_OF_CONDUCT.md). We expect
|
||||
everyone in our community to be welcoming, helpful, and respectful.
|
||||
- Ensure you have signed the
|
||||
[Contributor License Agreement (CLA)](https://cla.developers.google.com/).
|
||||
We need this to cover some legal bases.
|
||||
|
||||
We also encourage anyone interested in contributing to check out all the
|
||||
information here in our contributing guide, especially the
|
||||
@@ -71,13 +71,13 @@ can accept them, we need you to cover some legal bases.
|
||||
|
||||
Please fill out either the individual or corporate CLA.
|
||||
|
||||
- If you are an individual contributing to spec discussions or writing original
|
||||
source code and you're sure you own the intellectual property, then you'll
|
||||
need to sign an
|
||||
[individual CLA](https://code.google.com/legal/individual-cla-v1.0.html).
|
||||
- If you work for a company that wants to allow you to contribute your work,
|
||||
then you'll need to sign a
|
||||
[corporate CLA](https://code.google.com/legal/corporate-cla-v1.0.html).
|
||||
- If you are an individual contributing to spec discussions or writing
|
||||
original source code and you're sure you own the intellectual property, then
|
||||
you'll need to sign an
|
||||
[individual CLA](https://code.google.com/legal/individual-cla-v1.0.html).
|
||||
- If you work for a company that wants to allow you to contribute your work,
|
||||
then you'll need to sign a
|
||||
[corporate CLA](https://code.google.com/legal/corporate-cla-v1.0.html).
|
||||
|
||||
Follow either of the two links above to access the appropriate CLA and
|
||||
instructions for how to sign and return it. Once we receive it, we'll be able to
|
||||
@@ -102,41 +102,42 @@ Membership is currently invite-only.
|
||||
Before using these systems, everyone must sign the CLA. They are all governed by
|
||||
the Code of Conduct.
|
||||
|
||||
- [The GitHub carbon-language organization](https://github.com/orgs/carbon-language)
|
||||
is used for our repositories. **To join:**
|
||||
- [The GitHub carbon-language organization](https://github.com/orgs/carbon-language)
|
||||
is used for our repositories. **To join:**
|
||||
|
||||
1. Ask [an admin](docs/project/groups.md#admins) to send an invite, providing
|
||||
your GitHub account.
|
||||
2. Check your email to accept the invite, or try the standard
|
||||
[accept link](https://github.com/orgs/carbon-language/invitation?via_email=1)
|
||||
if you don't see the email.
|
||||
1. Ask [an admin](docs/project/groups.md#admins) to send an invite,
|
||||
providing your GitHub account.
|
||||
2. Check your email to accept the invite, or try the standard
|
||||
[accept link](https://github.com/orgs/carbon-language/invitation?via_email=1)
|
||||
if you don't see the email.
|
||||
|
||||
- [Discourse Forums](https://forums.carbon-lang.dev) are used for long-form
|
||||
discussions. **To join:**
|
||||
- [Discourse Forums](https://forums.carbon-lang.dev) are used for long-form
|
||||
discussions. **To join:**
|
||||
|
||||
1. Go to [the forums](https://forums.carbon-lang.dev) and register your
|
||||
GitHub account.
|
||||
- You will be able to choose which GitHub email you want the forums to
|
||||
send email to.
|
||||
2. [An admin](docs/project/groups.md#admins) will need to approve your
|
||||
registration.
|
||||
1. Go to [the forums](https://forums.carbon-lang.dev) and register your
|
||||
GitHub account.
|
||||
- You will be able to choose which GitHub email you want the forums to
|
||||
send email to.
|
||||
2. [An admin](docs/project/groups.md#admins) will need to approve your
|
||||
registration.
|
||||
|
||||
- [Discord Chat](https://discord.com/app) is used for short-form chats. **To
|
||||
join:**
|
||||
- [Discord Chat](https://discord.com/app) is used for short-form chats. **To
|
||||
join:**
|
||||
|
||||
1. Ask [an admin](docs/project/groups.md#admins) for an invite link.
|
||||
- Please do not re-share the invite links: they're our only way to
|
||||
restrict access.
|
||||
2. You will be prompted with the Code of Conduct. After reading it, click the
|
||||
check mark reaction icon at the bottom.
|
||||
1. Ask [an admin](docs/project/groups.md#admins) for an invite link.
|
||||
- Please do not re-share the invite links: they're our only way to
|
||||
restrict access.
|
||||
2. You will be prompted with the Code of Conduct. After reading it, click
|
||||
the check mark reaction icon at the bottom.
|
||||
|
||||
- [A shared Google Drive](https://drive.google.com/corp/drive/folders/0ALTu5Y6kc39XUk9PVA)
|
||||
is used for all of our Google Docs, particularly proposal drafts. **To join:**
|
||||
1. Ask [an admin](docs/project/groups.md#admins) to invite you, providing
|
||||
your Google account email.
|
||||
2. The admin will add you to the
|
||||
[Google Group](https://groups.google.com/g/carbon-lang-contributors) used
|
||||
for access.
|
||||
- [A shared Google Drive](https://drive.google.com/corp/drive/folders/0ALTu5Y6kc39XUk9PVA)
|
||||
is used for all of our Google Docs, particularly proposal drafts. **To
|
||||
join:**
|
||||
1. Ask [an admin](docs/project/groups.md#admins) to invite you, providing
|
||||
your Google account email.
|
||||
2. The admin will add you to the
|
||||
[Google Group](https://groups.google.com/g/carbon-lang-contributors)
|
||||
used for access.
|
||||
|
||||
### Contribution guidelines and standards
|
||||
|
||||
@@ -145,44 +146,46 @@ follow the Carbon documentation and coding styles.
|
||||
|
||||
#### Guidelines and philosophy for contributions
|
||||
|
||||
- For **both** documentation and code:
|
||||
- For **both** documentation and code:
|
||||
|
||||
- When the Carbon team accepts new documentation or features, to Carbon, by
|
||||
default they take on the maintenance burden. This means they'll weigh the
|
||||
benefit of each contribution must be weighed against the cost of maintaining
|
||||
it.
|
||||
- The appropriate [style](#style) is applied.
|
||||
- The [license](#license) is present in all contributions.
|
||||
- When the Carbon team accepts new documentation or features, to Carbon,
|
||||
by default they take on the maintenance burden. This means they'll weigh
|
||||
the benefit of each contribution must be weighed against the cost of
|
||||
maintaining it.
|
||||
- The appropriate [style](#style) is applied.
|
||||
- The [license](#license) is present in all contributions.
|
||||
|
||||
- For documentation:
|
||||
- For documentation:
|
||||
|
||||
- All documentation is written for clarity and readability. Beyond fixing
|
||||
spelling and grammar, this also means content is worded to be accessible to
|
||||
a broad audience.
|
||||
- Substantive changes to Carbon follow the
|
||||
[evolution process](docs/project/evolution.md). Pull requests are only sent
|
||||
after the documentation changes have been accepted by the reviewing team.
|
||||
- Typos or other minor fixes that don't change the meaning of a document do
|
||||
not need formal review, and are often handled directly as a pull request.
|
||||
- All documentation is written for clarity and readability. Beyond fixing
|
||||
spelling and grammar, this also means content is worded to be accessible
|
||||
to a broad audience.
|
||||
- Substantive changes to Carbon follow the
|
||||
[evolution process](docs/project/evolution.md). Pull requests are only
|
||||
sent after the documentation changes have been accepted by the reviewing
|
||||
team.
|
||||
- Typos or other minor fixes that don't change the meaning of a document
|
||||
do not need formal review, and are often handled directly as a pull
|
||||
request.
|
||||
|
||||
- For code:
|
||||
- For code:
|
||||
|
||||
- New features should have a documented design that has been approved through
|
||||
the [evolution process](docs/project/evolution.md). This includes
|
||||
modifications to pre-existing designs.
|
||||
- Bug fixes and mechanical improvements don't need this.
|
||||
- All new features include unit tests, as they help to (a) document and
|
||||
validate concrete usage of the feature and its edge cases, and (b) guard
|
||||
against future breaking changes to lower the maintenance cost.
|
||||
- Bug fixes also generally include unit tests, because the presence of bugs
|
||||
usually indicates insufficient test coverage.
|
||||
- Unit tests must pass with the changes.
|
||||
- If some tests fail for unrelated reasons, we wait until they're fixed. It
|
||||
helps to contribute a fix!
|
||||
- Code changes are made with API compatibility and evolvability in mind.
|
||||
Reviewers will comment on any API compatibility issues.
|
||||
- Keep in mind that code contribution guidelines are incomplete while we start
|
||||
work on Carbon, and may change later.
|
||||
- New features should have a documented design that has been approved
|
||||
through the [evolution process](docs/project/evolution.md). This
|
||||
includes modifications to pre-existing designs.
|
||||
- Bug fixes and mechanical improvements don't need this.
|
||||
- All new features include unit tests, as they help to (a) document and
|
||||
validate concrete usage of the feature and its edge cases, and (b) guard
|
||||
against future breaking changes to lower the maintenance cost.
|
||||
- Bug fixes also generally include unit tests, because the presence of
|
||||
bugs usually indicates insufficient test coverage.
|
||||
- Unit tests must pass with the changes.
|
||||
- If some tests fail for unrelated reasons, we wait until they're fixed.
|
||||
It helps to contribute a fix!
|
||||
- Code changes are made with API compatibility and evolvability in mind.
|
||||
Reviewers will comment on any API compatibility issues.
|
||||
- Keep in mind that code contribution guidelines are incomplete while we
|
||||
start work on Carbon, and may change later.
|
||||
|
||||
## pre-commit
|
||||
|
||||
@@ -204,19 +207,19 @@ Markdown files should additionally use
|
||||
|
||||
Other style points to be aware of are:
|
||||
|
||||
- Whereas the Google developer documentation style guide
|
||||
[says to use an em dash](https://developers.google.com/style/dashes)
|
||||
(`text—text`), we are using a double-hyphen with surrounding spaces
|
||||
(`text -- text`). We are doing this because we frequently read Markdown with
|
||||
fixed-width fonts where em dashes are not clearly visible.
|
||||
- Always say "Discourse Forum" and "Discord Chat" to avoid confusion between
|
||||
systems.
|
||||
- Prefer the term "developers" when talking about people who would write Carbon
|
||||
code. We expect the Carbon's community to include people who think of
|
||||
themselves using many titles, including software developers, software
|
||||
engineers, systems engineers, reliability engineers, data scientists, computer
|
||||
scientists, programmers, and coders. We're using "developers" to succinctly
|
||||
cover the variety of titles.
|
||||
- Whereas the Google developer documentation style guide
|
||||
[says to use an em dash](https://developers.google.com/style/dashes)
|
||||
(`text—text`), we are using a double-hyphen with surrounding spaces
|
||||
(`text -- text`). We are doing this because we frequently read Markdown with
|
||||
fixed-width fonts where em dashes are not clearly visible.
|
||||
- Always say "Discourse Forum" and "Discord Chat" to avoid confusion between
|
||||
systems.
|
||||
- Prefer the term "developers" when talking about people who would write
|
||||
Carbon code. We expect the Carbon's community to include people who think of
|
||||
themselves using many titles, including software developers, software
|
||||
engineers, systems engineers, reliability engineers, data scientists,
|
||||
computer scientists, programmers, and coders. We're using "developers" to
|
||||
succinctly cover the variety of titles.
|
||||
|
||||
### Other files
|
||||
|
||||
|
||||
@@ -56,9 +56,9 @@ migration of large existing codebases. They are specifically designed to not
|
||||
require complete rewrites, new programming models, or building an entire new
|
||||
stack/ecosystem. However, there is no comparable option for C++ today:
|
||||
|
||||
- JavaScript → TypeScript
|
||||
- Java → Kotlin
|
||||
- C++ → **???**
|
||||
- JavaScript → TypeScript
|
||||
- Java → Kotlin
|
||||
- C++ → **???**
|
||||
|
||||
Carbon explores what it would look like to fill this gap and align it with the
|
||||
above priorities.
|
||||
@@ -74,12 +74,12 @@ It is important to understand that **this is a science experiment**, not a
|
||||
production effort. There are several initial questions that we want to explore
|
||||
and answer with this experiment:
|
||||
|
||||
- Can we deliver a design and implementation that is familiar and compelling to
|
||||
C++ programmers and supports our goals?
|
||||
- How seamless and effective can we make interoperability?
|
||||
- How easy and scalable can we make migration?
|
||||
- Will a significant segment of the ecosystem and industry adopt Carbon given
|
||||
these tradeoffs?
|
||||
- Can we deliver a design and implementation that is familiar and compelling
|
||||
to C++ programmers and supports our goals?
|
||||
- How seamless and effective can we make interoperability?
|
||||
- How easy and scalable can we make migration?
|
||||
- Will a significant segment of the ecosystem and industry adopt Carbon given
|
||||
these tradeoffs?
|
||||
|
||||
We are committed to learning the answers to these questions, but that may well
|
||||
not result in a production language. There is a very real chance that this
|
||||
@@ -99,37 +99,38 @@ We hope that eventually Carbon will provide **significant advantages compared to
|
||||
today's C++**. Areas where we think we can most dramatically improve C++ for
|
||||
both software systems and developers are:
|
||||
|
||||
- A cohesive and principled language design, even when supporting advanced
|
||||
features.
|
||||
- Making common coding patterns safe by default whenever practical, with
|
||||
affordable security mitigations available for any unsafety.
|
||||
- We will provide static checks for as many safety issues as we can by
|
||||
default.
|
||||
- We will provide a spectrum of build modes with different trade-offs between
|
||||
dynamic safety and performance. For example:
|
||||
- The default build mode will include as many dynamic safety checks as we
|
||||
can while keeping the software's performance reasonable for normal
|
||||
development, testing, and debugging.
|
||||
- Release builds will favor performance, with opt-in dynamic safety checks
|
||||
and security mitigations for applications with higher security
|
||||
requirements.
|
||||
- Over time, we also expect to both track and drive research into increasing
|
||||
the degree of safety available without compromising our other goals.
|
||||
- Keeping our core language implementation simple, fast, and easily extended in
|
||||
ways that will make all of our language tools better.
|
||||
- Providing an effective, open, and inclusive language evolution process aligned
|
||||
with our goals and priorities.
|
||||
- A cohesive and principled language design, even when supporting advanced
|
||||
features.
|
||||
- Making common coding patterns safe by default whenever practical, with
|
||||
affordable security mitigations available for any unsafety.
|
||||
- We will provide static checks for as many safety issues as we can by
|
||||
default.
|
||||
- We will provide a spectrum of build modes with different trade-offs
|
||||
between dynamic safety and performance. For example:
|
||||
- The default build mode will include as many dynamic safety checks as
|
||||
we can while keeping the software's performance reasonable for
|
||||
normal development, testing, and debugging.
|
||||
- Release builds will favor performance, with opt-in dynamic safety
|
||||
checks and security mitigations for applications with higher
|
||||
security requirements.
|
||||
- Over time, we also expect to both track and drive research into
|
||||
increasing the degree of safety available without compromising our other
|
||||
goals.
|
||||
- Keeping our core language implementation simple, fast, and easily extended
|
||||
in ways that will make all of our language tools better.
|
||||
- Providing an effective, open, and inclusive language evolution process
|
||||
aligned with our goals and priorities.
|
||||
|
||||
Carbon will also aim to allow a single layer of a legacy C++ library stack to be
|
||||
migrated to Carbon, without migrating the code above or below. This will make it
|
||||
easier for developers to start using Carbon. Key features underpin Carbon's
|
||||
compatibility and interoperability with C++:
|
||||
|
||||
- The memory, execution, and threading model will be compatible with C++.
|
||||
- Access to existing C++ types, interfaces, and even templates will be provided
|
||||
as part of the core language.
|
||||
- Carbon will be able to export types, interfaces, and templates for consumption
|
||||
by C++.
|
||||
- The memory, execution, and threading model will be compatible with C++.
|
||||
- Access to existing C++ types, interfaces, and even templates will be
|
||||
provided as part of the core language.
|
||||
- Carbon will be able to export types, interfaces, and templates for
|
||||
consumption by C++.
|
||||
|
||||
**However, Carbon's approach still requires a nearly complete re-engineering of
|
||||
the language as well as large-scale migration for users.** This is extremely
|
||||
@@ -140,5 +141,6 @@ very high.
|
||||
|
||||
Carbon's main repositories are:
|
||||
|
||||
- **carbon-lang** - Carbon language specification and documentation.
|
||||
- **carbon-toolchain** - Carbon language toolchain and reference implementation.
|
||||
- **carbon-lang** - Carbon language specification and documentation.
|
||||
- **carbon-toolchain** - Carbon language toolchain and reference
|
||||
implementation.
|
||||
|
||||
@@ -13,44 +13,45 @@ always try to keep feedback, even when critical, constructive and supportive.
|
||||
|
||||
## Guidelines
|
||||
|
||||
- **Comments should be specific about the issue.** They should include a
|
||||
suggested action, and the expected result from that action. The more specific
|
||||
a comment is, the easier it will be for the proposal author to evaluate.
|
||||
- **Comments should be specific about the issue.** They should include a
|
||||
suggested action, and the expected result from that action. The more
|
||||
specific a comment is, the easier it will be for the proposal author to
|
||||
evaluate.
|
||||
|
||||
- Objections to specific phrasing should suggest alternative phrasing.
|
||||
- Objections to specific phrasing should suggest alternative phrasing.
|
||||
|
||||
- **Prefer GitHub for comments.** When reviewing a proposal, we would like to
|
||||
keep the discussion focused in one place: the GitHub pull request.
|
||||
- **Prefer GitHub for comments.** When reviewing a proposal, we would like to
|
||||
keep the discussion focused in one place: the GitHub pull request.
|
||||
|
||||
- If your comment represents a significant change to the proposal, include a
|
||||
list of pros and cons. Even if the author disagrees with the change, they
|
||||
can use those to document the alternative.
|
||||
- Feel free to extract long side discussions to a Discourse Forum topic, but
|
||||
make sure any important conclusions or outcomes are reflected in either the
|
||||
GitHub comments or the change itself.
|
||||
- If your comment represents a significant change to the proposal, include
|
||||
a list of pros and cons. Even if the author disagrees with the change,
|
||||
they can use those to document the alternative.
|
||||
- Feel free to extract long side discussions to a Discourse Forum topic,
|
||||
but make sure any important conclusions or outcomes are reflected in
|
||||
either the GitHub comments or the change itself.
|
||||
|
||||
- **Be supportive in your criticism.** The author may be receiving many
|
||||
comments, and we want to keep contributors motivated to respond.
|
||||
- **Be supportive in your criticism.** The author may be receiving many
|
||||
comments, and we want to keep contributors motivated to respond.
|
||||
|
||||
- **Be thoughtful about interactions.** Keep the
|
||||
[code of conduct](/CODE_OF_CONDUCT.md) in mind. Try to understand
|
||||
disagreements, and if you can't make progress, step back and think about other
|
||||
possible approaches.
|
||||
- **Be thoughtful about interactions.** Keep the
|
||||
[code of conduct](/CODE_OF_CONDUCT.md) in mind. Try to understand
|
||||
disagreements, and if you can't make progress, step back and think about
|
||||
other possible approaches.
|
||||
|
||||
- **Compliment the author when you're happy with a proposal.** Especially on the
|
||||
Discourse Forum topics where others will see the feedback. This helps all of
|
||||
us avoid _only_ focusing on how proposals should improve. We want to balance
|
||||
that important feedback with explicit and positive feedback for all the good
|
||||
aspects.
|
||||
- **Compliment the author when you're happy with a proposal.** Especially on
|
||||
the Discourse Forum topics where others will see the feedback. This helps
|
||||
all of us avoid _only_ focusing on how proposals should improve. We want to
|
||||
balance that important feedback with explicit and positive feedback for all
|
||||
the good aspects.
|
||||
|
||||
When commenting on a proposal, some questions community members might want to
|
||||
address are:
|
||||
|
||||
- What is your evaluation of the proposal?
|
||||
- Is the problem being addressed significant enough to warrant a change to
|
||||
Carbon?
|
||||
- Does this proposal fit with Carbon's
|
||||
[goals, priorities, and principles](goals.md)?
|
||||
- Are there alternative approaches that may be better suited to the problem?
|
||||
- If you have used other languages or libraries with a similar feature, how does
|
||||
the proposal compare?
|
||||
- What is your evaluation of the proposal?
|
||||
- Is the problem being addressed significant enough to warrant a change to
|
||||
Carbon?
|
||||
- Does this proposal fit with Carbon's
|
||||
[goals, priorities, and principles](goals.md)?
|
||||
- Are there alternative approaches that may be better suited to the problem?
|
||||
- If you have used other languages or libraries with a similar feature, how
|
||||
does the proposal compare?
|
||||
|
||||
@@ -29,15 +29,15 @@ that may only be noticed by a minority.
|
||||
Team members have a fundamentally different role while working towards consensus
|
||||
on a decision than at other times on the project. They are expected to:
|
||||
|
||||
- Set aside personal advocacy and preferences, and focus on the best decision
|
||||
for the project and community.
|
||||
- Critically evaluate whether their concerns are severe enough to warrant
|
||||
blocking.
|
||||
- Focus on the information presented in a proposal, rather than adding new
|
||||
information. If new information is needed, the request for it should be the
|
||||
decision.
|
||||
- Recognize their own biases and stand aside when unable to form an objective
|
||||
position.
|
||||
- Set aside personal advocacy and preferences, and focus on the best decision
|
||||
for the project and community.
|
||||
- Critically evaluate whether their concerns are severe enough to warrant
|
||||
blocking.
|
||||
- Focus on the information presented in a proposal, rather than adding new
|
||||
information. If new information is needed, the request for it should be the
|
||||
decision.
|
||||
- Recognize their own biases and stand aside when unable to form an objective
|
||||
position.
|
||||
|
||||
More about consensus decision making may be found from
|
||||
"[On Conflict and Consensus](https://web.archive.org/web/20111026234752/http://www.ic.org/pnp/ocac/)",
|
||||
@@ -47,24 +47,24 @@ and https://www.consensusdecisionmaking.org/.
|
||||
|
||||
A formal decision consists of:
|
||||
|
||||
- The decision itself.
|
||||
- A summary of the decision rationale.
|
||||
- A summary of important discussion points.
|
||||
- The decision itself.
|
||||
- A summary of the decision rationale.
|
||||
- A summary of important discussion points.
|
||||
|
||||
Here are some possible decisions with their meanings:
|
||||
|
||||
- **accepted**: Yes, we want this now.
|
||||
- **declined**: No, we don't think this is the right direction for Carbon.
|
||||
- **needs work**:
|
||||
- We need more information or data before we can decide if this is the right
|
||||
direction.
|
||||
- We like the direction, but the proposal needs significant changes before
|
||||
being accepted.
|
||||
- **deferred**:
|
||||
- We like the direction, but it isn't our priority right now, so bring the
|
||||
proposal back later.
|
||||
- We aren't sure about the direction, but it isn't our priority right now, so
|
||||
bring it back later.
|
||||
- **accepted**: Yes, we want this now.
|
||||
- **declined**: No, we don't think this is the right direction for Carbon.
|
||||
- **needs work**:
|
||||
- We need more information or data before we can decide if this is the
|
||||
right direction.
|
||||
- We like the direction, but the proposal needs significant changes before
|
||||
being accepted.
|
||||
- **deferred**:
|
||||
- We like the direction, but it isn't our priority right now, so bring the
|
||||
proposal back later.
|
||||
- We aren't sure about the direction, but it isn't our priority right now,
|
||||
so bring it back later.
|
||||
|
||||
When a proposal has open questions, the formal decision must include a decision
|
||||
for each open question. That may include filing GitHub issues to revisit the
|
||||
@@ -116,8 +116,8 @@ and sub-items, with each agenda item resolving with a decision.
|
||||
|
||||
As part of organizing a meeting, we will have two roles:
|
||||
|
||||
- A **moderator** who is responsible for ensuring discussion stays on track.
|
||||
- A **note taker** who will record minutes for each meeting.
|
||||
- A **moderator** who is responsible for ensuring discussion stays on track.
|
||||
- A **note taker** who will record minutes for each meeting.
|
||||
|
||||
Roles should be known before each meeting. These may or may not be staffed by
|
||||
reviewing team members; anybody taking a role should plan to be less involved in
|
||||
|
||||
@@ -13,12 +13,12 @@ contributions.
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
- [pre-commit](#pre-commit)
|
||||
- [black](#black)
|
||||
- [codespell](#codespell)
|
||||
- [markdown-toc](#markdown-toc)
|
||||
- [Prettier](#prettier)
|
||||
- [vim-prettier](#vim-prettier)
|
||||
- [pre-commit](#pre-commit)
|
||||
- [black](#black)
|
||||
- [codespell](#codespell)
|
||||
- [markdown-toc](#markdown-toc)
|
||||
- [Prettier](#prettier)
|
||||
- [vim-prettier](#vim-prettier)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
@@ -30,15 +30,16 @@ important checks, including formatting.
|
||||
|
||||
To set up pre-commit:
|
||||
|
||||
- Follow the [installation instructions](https://pre-commit.com/#installation).
|
||||
- Enable per-repo: `pre-commit install`
|
||||
- We already have `pre-commit` configured for Carbon repos -- do not go
|
||||
through the `Quick start` instructions.
|
||||
- pre-commit may be run either automatically with `git commit` or manually with
|
||||
`pre-commit run`.
|
||||
- When files are modified, including by pre-commit failures, `git add` will
|
||||
need to be run to include the modifications in the commit, and the commit
|
||||
re-started.
|
||||
- Follow the
|
||||
[installation instructions](https://pre-commit.com/#installation).
|
||||
- Enable per-repo: `pre-commit install`
|
||||
- We already have `pre-commit` configured for Carbon repos -- do not go
|
||||
through the `Quick start` instructions.
|
||||
- pre-commit may be run either automatically with `git commit` or manually
|
||||
with `pre-commit run`.
|
||||
- When files are modified, including by pre-commit failures, `git add`
|
||||
will need to be run to include the modifications in the commit, and the
|
||||
commit re-started.
|
||||
|
||||
When modifying or adding pre-commit hooks, please run
|
||||
`pre-commit run --all-files` to see what changes.
|
||||
@@ -77,16 +78,11 @@ always run Prettier after markdown-toc.
|
||||
> Installing and running manually is optional, but may be helpful.
|
||||
|
||||
We use [Prettier](https://prettier.io/) for formatting. There is an
|
||||
[rc file](/.prettierrc) for configuration.
|
||||
[rc file](/.prettierrc.yaml) for configuration.
|
||||
|
||||
### vim-prettier
|
||||
|
||||
If you use [vim-prettier](https://github.com/prettier/vim-prettier), it may help
|
||||
to add to your `.vimrc`:
|
||||
|
||||
```
|
||||
let g:prettier#config#print_width = '80'
|
||||
let g:prettier#config#tab_width = '2'
|
||||
let g:prettier#config#use_tabs = 'false'
|
||||
let g:prettier#config#prose_wrap = 'always'
|
||||
```
|
||||
If you use [vim-prettier](https://github.com/prettier/vim-prettier), the
|
||||
`.prettierrc.yaml` should still apply as long as `config_precedence` is set to
|
||||
the default `file-override`. However, we may need to add additional settings
|
||||
where the `vim-prettier` default diverges from `prettier`, as we notice them.
|
||||
|
||||
+176
-167
@@ -18,14 +18,15 @@ bounded timeframe.
|
||||
Our governance structure supports
|
||||
[consensus decision-making](consensus_decision_making.md):
|
||||
|
||||
- Community members write proposals.
|
||||
- [Review managers](#review-managers) escort proposals through our consensus
|
||||
decision process.
|
||||
- A [core team](#core-team) makes consensus decisions about Carbon's evolution.
|
||||
- Three [arbiters](#arbiters) respond to escalations about lack of consensus,
|
||||
making decisions through majority vote.
|
||||
- One [painter](#painter) who, where a consensus exists that multiple competing
|
||||
options are reasonable, decides between the provided options.
|
||||
- Community members write proposals.
|
||||
- [Review managers](#review-managers) escort proposals through our consensus
|
||||
decision process.
|
||||
- A [core team](#core-team) makes consensus decisions about Carbon's
|
||||
evolution.
|
||||
- Three [arbiters](#arbiters) respond to escalations about lack of consensus,
|
||||
making decisions through majority vote.
|
||||
- One [painter](#painter) who, where a consensus exists that multiple
|
||||
competing options are reasonable, decides between the provided options.
|
||||
|
||||
## Evolution process
|
||||
|
||||
@@ -67,21 +68,22 @@ The process is:
|
||||
|
||||
We use several tools to coordinate changes to Carbon:
|
||||
|
||||
- **GitHub pull requests** contain the proposals and related discussion.
|
||||
Resolved proposals will be committed with the associated decision. The pull
|
||||
request's description should link all related Discourse Forum topics and other
|
||||
references for easy browsing.
|
||||
- **Discourse Forum** topics will be used for the early idea discussion, any
|
||||
deeper discussions, or more high-level and meta points.
|
||||
- **Discord Chat** can be used for quick and real-time chats and Q&A.
|
||||
- If there are important technical points raised or addressed, they should get
|
||||
summarized on a relevant Discourse Forum topic.
|
||||
- **Google Docs** may be used for early draft proposals. This facilitates
|
||||
collaborative editing and easy commenting about wording issues.
|
||||
- **Google Hangouts Meet** will be used for VC meetings, typically for
|
||||
decisions.
|
||||
- Meetings should typically be summarized on a relevant Discourse Forum topic.
|
||||
- **Google Calendar** will be used to track team meeting and vacation times.
|
||||
- **GitHub pull requests** contain the proposals and related discussion.
|
||||
Resolved proposals will be committed with the associated decision. The pull
|
||||
request's description should link all related Discourse Forum topics and
|
||||
other references for easy browsing.
|
||||
- **Discourse Forum** topics will be used for the early idea discussion, any
|
||||
deeper discussions, or more high-level and meta points.
|
||||
- **Discord Chat** can be used for quick and real-time chats and Q&A.
|
||||
- If there are important technical points raised or addressed, they should
|
||||
get summarized on a relevant Discourse Forum topic.
|
||||
- **Google Docs** may be used for early draft proposals. This facilitates
|
||||
collaborative editing and easy commenting about wording issues.
|
||||
- **Google Hangouts Meet** will be used for VC meetings, typically for
|
||||
decisions.
|
||||
- Meetings should typically be summarized on a relevant Discourse Forum
|
||||
topic.
|
||||
- **Google Calendar** will be used to track team meeting and vacation times.
|
||||
|
||||
## Governance structure
|
||||
|
||||
@@ -100,8 +102,8 @@ team will still review participation.
|
||||
|
||||
Our current review managers are:
|
||||
|
||||
- [jonmeow](https://github.com/jonmeow)
|
||||
- [sidney13](https://github.com/sidney13)
|
||||
- [jonmeow](https://github.com/jonmeow)
|
||||
- [sidney13](https://github.com/sidney13)
|
||||
|
||||
### Core team
|
||||
|
||||
@@ -116,14 +118,14 @@ may be added when necessary to expand representation.
|
||||
|
||||
Our current core team members are:
|
||||
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
|
||||
**TODO**: We want this team to eventually include non-Googlers for a broader set
|
||||
of perspectives.
|
||||
@@ -163,9 +165,9 @@ There should always be three arbiters.
|
||||
|
||||
Our current arbiters are:
|
||||
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
|
||||
### Painter
|
||||
|
||||
@@ -187,7 +189,7 @@ aesthetics reasonably consistent.
|
||||
|
||||
The current painter is:
|
||||
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
|
||||
### Adding and removing governance members
|
||||
|
||||
@@ -203,16 +205,16 @@ Any substantive change to Carbon -- whether the language, project,
|
||||
infrastructure, or otherwise -- should follow the evolution process. The meaning
|
||||
of "substantive" is subjective, but will generally include:
|
||||
|
||||
- Any semantic or syntactic language change that isn't fixing a bug.
|
||||
- Major changes to project infrastructure, including additions and removals.
|
||||
- Changes to the process itself.
|
||||
- Rolling back a finalized decision, even if never executed.
|
||||
- Any semantic or syntactic language change that isn't fixing a bug.
|
||||
- Major changes to project infrastructure, including additions and removals.
|
||||
- Changes to the process itself.
|
||||
- Rolling back a finalized decision, even if never executed.
|
||||
|
||||
Changes which generally will not require this process are:
|
||||
|
||||
- Fixing typos or bugs that don't change the meaning and/or intent.
|
||||
- Rephrasing or refactoring documentation for easier reading.
|
||||
- Minor infrastructure updates, improvements, setting changes, tweaks.
|
||||
- Fixing typos or bugs that don't change the meaning and/or intent.
|
||||
- Rephrasing or refactoring documentation for easier reading.
|
||||
- Minor infrastructure updates, improvements, setting changes, tweaks.
|
||||
|
||||
If you're not sure whether to follow the process, please err on the side of
|
||||
following it. A team can always ask for a change to be made directly if they
|
||||
@@ -234,10 +236,10 @@ efficient.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**: Create an `Evolution > Ideas` forum topic to discuss the issue
|
||||
before writing the proposal.
|
||||
- **Community**: Provide [constructive commentary](commenting_guidelines.md) for
|
||||
ideas when feedback is solicited.
|
||||
- **Author**: Create an `Evolution > Ideas` forum topic to discuss the issue
|
||||
before writing the proposal.
|
||||
- **Community**: Provide [constructive commentary](commenting_guidelines.md)
|
||||
for ideas when feedback is solicited.
|
||||
|
||||
#### Make a proposal
|
||||
|
||||
@@ -282,9 +284,10 @@ request for the RFC.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**:
|
||||
- Write the proposal using [the template](/proposals/template.md).
|
||||
- The template has additional actions under "TODO: Initial proposal setup".
|
||||
- **Author**:
|
||||
- Write the proposal using [the template](/proposals/template.md).
|
||||
- The template has additional actions under "TODO: Initial proposal
|
||||
setup".
|
||||
|
||||
#### (optional) Elicit early, high-level feedback on the proposal
|
||||
|
||||
@@ -294,11 +297,11 @@ favor GitHub comments over forum topic replies.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**: Update, or create if needed, the `Evolution > Ideas` forum topic
|
||||
to advertise the proposal and elicit early, high-level feedback.
|
||||
- Add the topic's link to the GitHub pull request.
|
||||
- **Community**: Provide [constructive commentary](commenting_guidelines.md) for
|
||||
ideas when feedback is solicited.
|
||||
- **Author**: Update, or create if needed, the `Evolution > Ideas` forum topic
|
||||
to advertise the proposal and elicit early, high-level feedback.
|
||||
- Add the topic's link to the GitHub pull request.
|
||||
- **Community**: Provide [constructive commentary](commenting_guidelines.md)
|
||||
for ideas when feedback is solicited.
|
||||
|
||||
### Solicit and address proposal feedback
|
||||
|
||||
@@ -313,11 +316,12 @@ discussion, as well as links to prior discussion topics.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**:
|
||||
- Replace the GitHub pull request's `WIP` label with `RFC`.
|
||||
- Create an `Evolution > RFCs` forum topic.
|
||||
- Summarize the discussion points, along with a link to the pull request.
|
||||
- Add the topic's link to the pull request's description.
|
||||
- **Author**:
|
||||
- Replace the GitHub pull request's `WIP` label with `RFC`.
|
||||
- Create an `Evolution > RFCs` forum topic.
|
||||
- Summarize the discussion points, along with a link to the pull
|
||||
request.
|
||||
- Add the topic's link to the pull request's description.
|
||||
|
||||
#### Community and reviewing team comments on proposal
|
||||
|
||||
@@ -339,11 +343,11 @@ also be added where the author isn't confident about the best approach.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**:
|
||||
- Update the proposal and/or reply to comments to address feedback.
|
||||
- Create GitHub issues for any open questions to be revisited later.
|
||||
- **Reviewing team and community**: Provide
|
||||
[constructive commentary](commenting_guidelines.md) for proposals.
|
||||
- **Author**:
|
||||
- Update the proposal and/or reply to comments to address feedback.
|
||||
- Create GitHub issues for any open questions to be revisited later.
|
||||
- **Reviewing team and community**: Provide
|
||||
[constructive commentary](commenting_guidelines.md) for proposals.
|
||||
|
||||
#### (optional) Pause for a major revision
|
||||
|
||||
@@ -360,12 +364,12 @@ discussion points thus far. Links to prior topics should be included.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**:
|
||||
- Announce to the Discourse Forum topic that the proposal is undergoing major
|
||||
revision.
|
||||
- Replace the GitHub pull request's `RFC` label with `WIP`.
|
||||
- **Reviewing team and community**: Refrain from commenting until the author
|
||||
solicits feedback again.
|
||||
- **Author**:
|
||||
- Announce to the Discourse Forum topic that the proposal is undergoing
|
||||
major revision.
|
||||
- Replace the GitHub pull request's `RFC` label with `WIP`.
|
||||
- **Reviewing team and community**: Refrain from commenting until the author
|
||||
solicits feedback again.
|
||||
|
||||
#### Request a review manager
|
||||
|
||||
@@ -388,15 +392,15 @@ the comment period by posting another message to the "Evolution > RFCs" topic.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**:
|
||||
- Ensure all comments are resolved.
|
||||
- Create a `Evolution > Review manager requests` topic asking for a review
|
||||
manager, providing a link to the proposal's GitHub pull request.
|
||||
- Add the topic's link to the GitHub pull request.
|
||||
- **Review manager**:
|
||||
- Ask reviewing team members to review the proposal when needed.
|
||||
- Double-check that comment threads are addressed by the proposal.
|
||||
- Update the `Evolution > RFCs` topic with a last call for comments.
|
||||
- **Author**:
|
||||
- Ensure all comments are resolved.
|
||||
- Create a `Evolution > Review manager requests` topic asking for a review
|
||||
manager, providing a link to the proposal's GitHub pull request.
|
||||
- Add the topic's link to the GitHub pull request.
|
||||
- **Review manager**:
|
||||
- Ask reviewing team members to review the proposal when needed.
|
||||
- Double-check that comment threads are addressed by the proposal.
|
||||
- Update the `Evolution > RFCs` topic with a last call for comments.
|
||||
|
||||
### Reviewing team makes a proposal decision
|
||||
|
||||
@@ -410,7 +414,7 @@ making/accepting edits.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**: Stop making changes to the proposal.
|
||||
- **Author**: Stop making changes to the proposal.
|
||||
|
||||
#### Ask the reviewing team for a proposal decision
|
||||
|
||||
@@ -424,19 +428,19 @@ removed if a decision is made before the meeting.
|
||||
Team members should familiarize themselves with the proposal and related
|
||||
discussion. Try to respond to the Discourse Forum topic promptly with:
|
||||
|
||||
- A position, either affirming or objecting, is strongly preferred. Standing
|
||||
aside is allowed.
|
||||
- Rationales for positions should be based on discussion on the proposal's
|
||||
`Evolution > RFCs` topic, and providing links helps write the decision.
|
||||
- A request for more time to review materials, to make it clear the intent is to
|
||||
participate in the decision.
|
||||
- Discussion regarding positions or the decision itself.
|
||||
- The reviewing team will participate in the proposal community comment
|
||||
period, so that substantive feedback can be incorporated by the author prior
|
||||
to requesting a decision.
|
||||
- A request to use the meeting for discussion.
|
||||
- All topics for discussion will be captured either in the agenda or as a
|
||||
comment on the pull request, to ensure they're ready for the meeting.
|
||||
- A position, either affirming or objecting, is strongly preferred. Standing
|
||||
aside is allowed.
|
||||
- Rationales for positions should be based on discussion on the proposal's
|
||||
`Evolution > RFCs` topic, and providing links helps write the decision.
|
||||
- A request for more time to review materials, to make it clear the intent is
|
||||
to participate in the decision.
|
||||
- Discussion regarding positions or the decision itself.
|
||||
- The reviewing team will participate in the proposal community comment
|
||||
period, so that substantive feedback can be incorporated by the author
|
||||
prior to requesting a decision.
|
||||
- A request to use the meeting for discussion.
|
||||
- All topics for discussion will be captured either in the agenda or as a
|
||||
comment on the pull request, to ensure they're ready for the meeting.
|
||||
|
||||
The review manager should monitor the forum topic for consensus. If a decision
|
||||
is made before the meeting, the item should be removed from the meeting agenda.
|
||||
@@ -445,21 +449,22 @@ make decisions.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**:
|
||||
- Respond to comments.
|
||||
- **Review manager:**
|
||||
- Replace the GitHub pull request's `RFC` label with `needs decision`.
|
||||
- Create an `Evolution > Proposal decisions` topic for pre-meeting discussion.
|
||||
- Tentatively add the decision to the meeting one week in advance (or four
|
||||
working days, if longer), and use that meeting if necessary to reach
|
||||
consensus.
|
||||
- Monitor the topic for a consensus decision.
|
||||
- If a consensus is reached, ensure there's enough information to write a
|
||||
decision.
|
||||
- **Every reviewing team member:**
|
||||
- Review the proposal again and make comments if needed.
|
||||
- Participate in reaching a consensus, or explicitly stand aside.
|
||||
- Offer justifications towards a decision.
|
||||
- **Author**:
|
||||
- Respond to comments.
|
||||
- **Review manager:**
|
||||
- Replace the GitHub pull request's `RFC` label with `needs decision`.
|
||||
- Create an `Evolution > Proposal decisions` topic for pre-meeting
|
||||
discussion.
|
||||
- Tentatively add the decision to the meeting one week in advance (or four
|
||||
working days, if longer), and use that meeting if necessary to reach
|
||||
consensus.
|
||||
- Monitor the topic for a consensus decision.
|
||||
- If a consensus is reached, ensure there's enough information to
|
||||
write a decision.
|
||||
- **Every reviewing team member:**
|
||||
- Review the proposal again and make comments if needed.
|
||||
- Participate in reaching a consensus, or explicitly stand aside.
|
||||
- Offer justifications towards a decision.
|
||||
|
||||
#### (optional) Use the meeting to make a proposal decision
|
||||
|
||||
@@ -475,16 +480,16 @@ meeting, even if it is to defer the proposal. The review manager should verify
|
||||
they understand the decision, because they will be responsible for publishing
|
||||
it.
|
||||
|
||||
- **Author**: (optional) Consider attending the meeting to better understand the
|
||||
proposal decision.
|
||||
- **Review manager**:
|
||||
- Help identify a
|
||||
[moderator and note taker](consensus_decision_making.md#roles) for the
|
||||
meeting, possibly volunteering as note taker.
|
||||
- Ensure the meeting provides enough information to write a decision.
|
||||
- **Reviewing team**:
|
||||
- Participate in reaching a consensus, or explicitly stand aside.
|
||||
- Offer justifications towards a decision.
|
||||
- **Author**: (optional) Consider attending the meeting to better understand
|
||||
the proposal decision.
|
||||
- **Review manager**:
|
||||
- Help identify a
|
||||
[moderator and note taker](consensus_decision_making.md#roles) for the
|
||||
meeting, possibly volunteering as note taker.
|
||||
- Ensure the meeting provides enough information to write a decision.
|
||||
- **Reviewing team**:
|
||||
- Participate in reaching a consensus, or explicitly stand aside.
|
||||
- Offer justifications towards a decision.
|
||||
|
||||
### Finalize the proposal decision
|
||||
|
||||
@@ -502,32 +507,33 @@ continue working on it.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Review manager**:
|
||||
- Write the
|
||||
[formal decision](consensus_decision_making.md#formal-decision-content),
|
||||
possibly with help from the reviewing team.
|
||||
- (optional): Create a GitHub issue for issues that should be revisited in
|
||||
the future. Link to these from the GitHub pull request.
|
||||
- If the proposal was accepted:
|
||||
- Prepare a GitHub pull request with the decision.
|
||||
- Create an `Evolution > Announcements` forum topic and link to the proposal
|
||||
and decision pull requests.
|
||||
- Add the topic's link to the proposal's pull request.
|
||||
- Approve the proposal's pull request for commit.
|
||||
- If the proposal was deferred or declined:
|
||||
- Comment on the proposal's pull request with the decision.
|
||||
- Create an `Evolution > Announcements` forum topic and link to the proposal
|
||||
and decision comment.
|
||||
- **Author**:
|
||||
- If the proposal is accepted:
|
||||
- Replace the GitHub pull request's `needs decision` label with `accepted`.
|
||||
- Commit the approved pull request.
|
||||
- If the proposal was deferred or declined, decide how best to proceed:
|
||||
- If iterating on the proposal, replace the GitHub pull request's
|
||||
`needs decision` label with `WIP`.
|
||||
- If retracting the proposal, close the pull request.
|
||||
- **Reviewing team**: Help draft any rationale needed by the review manager for
|
||||
the decision.
|
||||
- **Review manager**:
|
||||
- Write the
|
||||
[formal decision](consensus_decision_making.md#formal-decision-content),
|
||||
possibly with help from the reviewing team.
|
||||
- (optional): Create a GitHub issue for issues that should be
|
||||
revisited in the future. Link to these from the GitHub pull request.
|
||||
- If the proposal was accepted:
|
||||
- Prepare a GitHub pull request with the decision.
|
||||
- Create an `Evolution > Announcements` forum topic and link to the
|
||||
proposal and decision pull requests.
|
||||
- Add the topic's link to the proposal's pull request.
|
||||
- Approve the proposal's pull request for commit.
|
||||
- If the proposal was deferred or declined:
|
||||
- Comment on the proposal's pull request with the decision.
|
||||
- Create an `Evolution > Announcements` forum topic and link to the
|
||||
proposal and decision comment.
|
||||
- **Author**:
|
||||
- If the proposal is accepted:
|
||||
- Replace the GitHub pull request's `needs decision` label with
|
||||
`accepted`.
|
||||
- Commit the approved pull request.
|
||||
- If the proposal was deferred or declined, decide how best to proceed:
|
||||
- If iterating on the proposal, replace the GitHub pull request's
|
||||
`needs decision` label with `WIP`.
|
||||
- If retracting the proposal, close the pull request.
|
||||
- **Reviewing team**: Help draft any rationale needed by the review manager
|
||||
for the decision.
|
||||
|
||||
#### Community comments on proposal decision
|
||||
|
||||
@@ -543,10 +549,10 @@ period should not be used to continue to debate decisions unless raising
|
||||
specific new information. When commenting, some questions you might want to
|
||||
address are:
|
||||
|
||||
- Is the decision clear in its conclusion?
|
||||
- Does the decision explain its rationale well?
|
||||
- Have concerns or alternatives been effectively understood, acknowledged, and
|
||||
addressed to the extent possible?
|
||||
- Is the decision clear in its conclusion?
|
||||
- Does the decision explain its rationale well?
|
||||
- Have concerns or alternatives been effectively understood, acknowledged, and
|
||||
addressed to the extent possible?
|
||||
|
||||
If the decision is to accept the proposal, the author may start making changes
|
||||
described in the proposal which are easy to roll back before the decision review
|
||||
@@ -559,12 +565,13 @@ costs are non-obvious.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author:** (optional) Start making dependent changes which are easy to roll
|
||||
back, and be prepared to roll back if needed.
|
||||
- **Review manager:** Respond to comments and bring any significant issues to
|
||||
the reviewing team's attention.
|
||||
- **Community and reviewing team**: Provide
|
||||
[constructive commentary](commenting_guidelines.md) for the proposal decision.
|
||||
- **Author:** (optional) Start making dependent changes which are easy to roll
|
||||
back, and be prepared to roll back if needed.
|
||||
- **Review manager:** Respond to comments and bring any significant issues to
|
||||
the reviewing team's attention.
|
||||
- **Community and reviewing team**: Provide
|
||||
[constructive commentary](commenting_guidelines.md) for the proposal
|
||||
decision.
|
||||
|
||||
#### (optional) Rollback the decision
|
||||
|
||||
@@ -575,13 +582,14 @@ should be exceptional.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Author**: Roll back the committed proposal and any dependent changes.
|
||||
- **Reviewing team member**: State new, non-consensus position on
|
||||
`Evolution > Decisions` forum topic.
|
||||
- **Review manager**:
|
||||
- Update the `Evolution > Announcements` forum topic to reflect the rollback.
|
||||
- Return to
|
||||
[asking the reviewing team for a proposal decision](#ask-the-reviewing-team-for-a-proposal-decision).
|
||||
- **Author**: Roll back the committed proposal and any dependent changes.
|
||||
- **Reviewing team member**: State new, non-consensus position on
|
||||
`Evolution > Decisions` forum topic.
|
||||
- **Review manager**:
|
||||
- Update the `Evolution > Announcements` forum topic to reflect the
|
||||
rollback.
|
||||
- Return to
|
||||
[asking the reviewing team for a proposal decision](#ask-the-reviewing-team-for-a-proposal-decision).
|
||||
|
||||
#### Execute on proposal decision
|
||||
|
||||
@@ -602,10 +610,11 @@ revisit the decision.
|
||||
|
||||
##### Actions
|
||||
|
||||
- **Review manager**:
|
||||
- Update the `Evolution > Announcements` forum topic with the final decision.
|
||||
- If the proposal was accepted, commit the proposal decision.
|
||||
- **Author**: Start making dependent changes to apply the proposal.
|
||||
- **Review manager**:
|
||||
- Update the `Evolution > Announcements` forum topic with the final
|
||||
decision.
|
||||
- If the proposal was accepted, commit the proposal decision.
|
||||
- **Author**: Start making dependent changes to apply the proposal.
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
|
||||
+38
-38
@@ -10,28 +10,28 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
- [Overview](#overview)
|
||||
- [Project goals](#project-goals)
|
||||
- [Community and culture](#community-and-culture)
|
||||
- [Language tools and ecosystem](#language-tools-and-ecosystem)
|
||||
- [Language goals and priorities](#language-goals-and-priorities)
|
||||
- [Goals in detail](#goals-in-detail)
|
||||
- [Performance-critical software](#performance-critical-software)
|
||||
- [Software and language evolution](#software-and-language-evolution)
|
||||
- [Code that is easy to read, understand, and write](#code-that-is-easy-to-read-understand-and-write)
|
||||
- [Practical safety guarantees and testing mechanisms](#practical-safety-guarantees-and-testing-mechanisms)
|
||||
- [Fast and scalable development](#fast-and-scalable-development)
|
||||
- [Modern OS platforms, hardware architectures, and environments](#modern-os-platforms-hardware-architectures-and-environments)
|
||||
- [Interoperability with and migration from existing C++ code](#interoperability-with-and-migration-from-existing-c-code)
|
||||
- [Non-goals](#non-goals)
|
||||
- [Stable language and library ABI](#stable-language-and-library-abi)
|
||||
- [Backwards or forwards compatibility](#backwards-or-forwards-compatibility)
|
||||
- [Legacy compiled libraries without source code or ability to rebuild](#legacy-compiled-libraries-without-source-code-or-ability-to-rebuild)
|
||||
- [Support for existing compilation and linking models](#support-for-existing-compilation-and-linking-models)
|
||||
- [Idiomatic migration of non-modern, non-idiomatic C++ code](#idiomatic-migration-of-non-modern-non-idiomatic-c-code)
|
||||
- [Principles](#principles)
|
||||
- [Prioritization beyond goals](#prioritization-beyond-goals)
|
||||
- [Acknowledgements](#acknowledgements)
|
||||
- [Overview](#overview)
|
||||
- [Project goals](#project-goals)
|
||||
- [Community and culture](#community-and-culture)
|
||||
- [Language tools and ecosystem](#language-tools-and-ecosystem)
|
||||
- [Language goals and priorities](#language-goals-and-priorities)
|
||||
- [Goals in detail](#goals-in-detail)
|
||||
- [Performance-critical software](#performance-critical-software)
|
||||
- [Software and language evolution](#software-and-language-evolution)
|
||||
- [Code that is easy to read, understand, and write](#code-that-is-easy-to-read-understand-and-write)
|
||||
- [Practical safety guarantees and testing mechanisms](#practical-safety-guarantees-and-testing-mechanisms)
|
||||
- [Fast and scalable development](#fast-and-scalable-development)
|
||||
- [Modern OS platforms, hardware architectures, and environments](#modern-os-platforms-hardware-architectures-and-environments)
|
||||
- [Interoperability with and migration from existing C++ code](#interoperability-with-and-migration-from-existing-c-code)
|
||||
- [Non-goals](#non-goals)
|
||||
- [Stable language and library ABI](#stable-language-and-library-abi)
|
||||
- [Backwards or forwards compatibility](#backwards-or-forwards-compatibility)
|
||||
- [Legacy compiled libraries without source code or ability to rebuild](#legacy-compiled-libraries-without-source-code-or-ability-to-rebuild)
|
||||
- [Support for existing compilation and linking models](#support-for-existing-compilation-and-linking-models)
|
||||
- [Idiomatic migration of non-modern, non-idiomatic C++ code](#idiomatic-migration-of-non-modern-non-idiomatic-c-code)
|
||||
- [Principles](#principles)
|
||||
- [Prioritization beyond goals](#prioritization-beyond-goals)
|
||||
- [Acknowledgements](#acknowledgements)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
@@ -296,22 +296,22 @@ activities where humans interact with Carbon: reading, writing, designing,
|
||||
discussing, reviewing, and refactoring code, as well as learning and teaching
|
||||
Carbon. A few examples:
|
||||
|
||||
- Carbon should not use symbols that are difficult to type, see, or
|
||||
differentiate from similar symbols in commonly used contexts.
|
||||
- Syntax should be easily parsed and scanned by any human in any development
|
||||
environment, not just a machine or a human aided by semantic hints from an
|
||||
IDE.
|
||||
- Code with similar behavior should use similar syntax, and code with different
|
||||
behavior should use different syntax. Behavior in this context should include
|
||||
both the functionality and performance of the code. This is part of conceptual
|
||||
integrity.
|
||||
- Explicitness must be balanced against conciseness, as verbosity and ceremony
|
||||
add cognitive overhead for the reader, while explicitness reduces the amount
|
||||
of outside context the reader must have or assume.
|
||||
- Common yet complex tasks, such as parallel code, should be well-supported in
|
||||
ways that are easy to reason about.
|
||||
- Ordinary tasks should not require extraordinary care, because humans cannot
|
||||
consistently avoid making mistakes for an extended amount of time.
|
||||
- Carbon should not use symbols that are difficult to type, see, or
|
||||
differentiate from similar symbols in commonly used contexts.
|
||||
- Syntax should be easily parsed and scanned by any human in any development
|
||||
environment, not just a machine or a human aided by semantic hints from an
|
||||
IDE.
|
||||
- Code with similar behavior should use similar syntax, and code with
|
||||
different behavior should use different syntax. Behavior in this context
|
||||
should include both the functionality and performance of the code. This is
|
||||
part of conceptual integrity.
|
||||
- Explicitness must be balanced against conciseness, as verbosity and ceremony
|
||||
add cognitive overhead for the reader, while explicitness reduces the amount
|
||||
of outside context the reader must have or assume.
|
||||
- Common yet complex tasks, such as parallel code, should be well-supported in
|
||||
ways that are easy to reason about.
|
||||
- Ordinary tasks should not require extraordinary care, because humans cannot
|
||||
consistently avoid making mistakes for an extended amount of time.
|
||||
|
||||
**Support tooling at every layer of the development experience, including
|
||||
IDEs.** The design and implementation of Carbon should make it easy to create
|
||||
|
||||
+28
-28
@@ -11,24 +11,24 @@ tracking.
|
||||
|
||||
We use a mix of:
|
||||
|
||||
- Groups to assist contacting key contributors on appropriate systems:
|
||||
- **GitHub teams**
|
||||
- **Discourse Forums groups**
|
||||
- **Discord Chat roles**
|
||||
- **Google groups**, usually as Google Drive ACLs. We generally won't use these
|
||||
as contact lists, unless specifically mentioned. Please prefer Discourse
|
||||
Forums.
|
||||
- Groups to assist contacting key contributors on appropriate systems:
|
||||
- **GitHub teams**
|
||||
- **Discourse Forums groups**
|
||||
- **Discord Chat roles**
|
||||
- **Google groups**, usually as Google Drive ACLs. We generally won't use
|
||||
these as contact lists, unless specifically mentioned. Please prefer
|
||||
Discourse Forums.
|
||||
|
||||
## All contributors
|
||||
|
||||
- [GitHub organization](https://github.com/orgs/carbon-language/people)
|
||||
- [GitHub team: Contributors with label access](https://github.com/orgs/carbon-language/teams/contributors-with-label-access):
|
||||
Mirrors the GitHub organization for write access.
|
||||
[Manually updated](/src/scripts/update-label-access.js).
|
||||
- [Discourse Forums account](https://forums.carbon-lang.dev)
|
||||
- [Discord Chat access](https://discord.com/app)
|
||||
- [Google group](https://groups.google.com/g/carbon-lang-contributors): Grants
|
||||
Google Drive access.
|
||||
- [GitHub organization](https://github.com/orgs/carbon-language/people)
|
||||
- [GitHub team: Contributors with label access](https://github.com/orgs/carbon-language/teams/contributors-with-label-access):
|
||||
Mirrors the GitHub organization for write access.
|
||||
[Manually updated](/src/scripts/update-label-access.js).
|
||||
- [Discourse Forums account](https://forums.carbon-lang.dev)
|
||||
- [Discord Chat access](https://discord.com/app)
|
||||
- [Google group](https://groups.google.com/g/carbon-lang-contributors): Grants
|
||||
Google Drive access.
|
||||
|
||||
## Team-specific access
|
||||
|
||||
@@ -37,27 +37,27 @@ when somebody joins the respective team.
|
||||
|
||||
### Admins
|
||||
|
||||
- [GitHub owners](https://github.com/orgs/carbon-language/people?query=role%3Aowner)
|
||||
- [Discourse Forums group](https://forums.carbon-lang.dev/g/admins)
|
||||
- Discord Chat role: admin
|
||||
- [GitHub owners](https://github.com/orgs/carbon-language/people?query=role%3Aowner)
|
||||
- [Discourse Forums group](https://forums.carbon-lang.dev/g/admins)
|
||||
- Discord Chat role: admin
|
||||
|
||||
### Conduct team
|
||||
|
||||
For most purposes, the Core team should be contacted about conduct issues.
|
||||
|
||||
- [Google group](https://groups.google.com/g/carbon-lang-conduct-team):
|
||||
Primarily a contact list.
|
||||
- [Google group](https://groups.google.com/g/carbon-lang-conduct-team):
|
||||
Primarily a contact list.
|
||||
|
||||
### Core team
|
||||
|
||||
- [GitHub team](https://github.com/orgs/carbon-language/teams/core-team)
|
||||
- [Discourse Forums group](https://forums.carbon-lang.dev/g/core_team)
|
||||
- Discord Chat role: core-team
|
||||
- [GitHub team](https://github.com/orgs/carbon-language/teams/core-team)
|
||||
- [Discourse Forums group](https://forums.carbon-lang.dev/g/core_team)
|
||||
- Discord Chat role: core-team
|
||||
|
||||
### Review managers
|
||||
|
||||
- [GitHub team](https://github.com/orgs/carbon-language/teams/review-managers)
|
||||
- [Discourse Forums group](https://forums.carbon-lang.dev/g/review_managers)
|
||||
- Discord Chat role: review-managers
|
||||
- [Google group](https://groups.google.com/g/carbon-lang-review-managers):
|
||||
Grants Google Drive access.
|
||||
- [GitHub team](https://github.com/orgs/carbon-language/teams/review-managers)
|
||||
- [Discourse Forums group](https://forums.carbon-lang.dev/g/review_managers)
|
||||
- Discord Chat role: review-managers
|
||||
- [Google group](https://groups.google.com/g/carbon-lang-review-managers):
|
||||
Grants Google Drive access.
|
||||
|
||||
@@ -10,14 +10,14 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
- [Principle](#principle)
|
||||
- [Applications of these principles](#applications-of-these-principles)
|
||||
- [Modern OS platforms, hardware architectures, and environments](#modern-os-platforms-hardware-architectures-and-environments)
|
||||
- [OS platforms](#os-platforms)
|
||||
- [Hardware architectures](#hardware-architectures)
|
||||
- [Historical platforms](#historical-platforms)
|
||||
- [Interoperability with and migration from existing C++ code](#interoperability-with-and-migration-from-existing-c-code)
|
||||
- [Migration tooling](#migration-tooling)
|
||||
- [Principle](#principle)
|
||||
- [Applications of these principles](#applications-of-these-principles)
|
||||
- [Modern OS platforms, hardware architectures, and environments](#modern-os-platforms-hardware-architectures-and-environments)
|
||||
- [OS platforms](#os-platforms)
|
||||
- [Hardware architectures](#hardware-architectures)
|
||||
- [Historical platforms](#historical-platforms)
|
||||
- [Interoperability with and migration from existing C++ code](#interoperability-with-and-migration-from-existing-c-code)
|
||||
- [Migration tooling](#migration-tooling)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
@@ -49,22 +49,22 @@ This should not be considered an exhaustive list of important platforms.
|
||||
|
||||
Our priority OS platforms are modern versions of:
|
||||
|
||||
- Linux, including common distributions, Android and ChromeOS
|
||||
- FreeBSD
|
||||
- Windows
|
||||
- macOS and iOS
|
||||
- Fuchsia
|
||||
- WebAssembly
|
||||
- Bare metal
|
||||
- Linux, including common distributions, Android and ChromeOS
|
||||
- FreeBSD
|
||||
- Windows
|
||||
- macOS and iOS
|
||||
- Fuchsia
|
||||
- WebAssembly
|
||||
- Bare metal
|
||||
|
||||
#### Hardware architectures
|
||||
|
||||
We expect to prioritize 64-bit little endian hardware, including:
|
||||
|
||||
- x86-64
|
||||
- AArch64, also known as ARM 64-bit
|
||||
- PPC64LE, also known as Power ISA, 64-bit, Little Endian
|
||||
- RV64I, also known as RISC-V 64-bit
|
||||
- x86-64
|
||||
- AArch64, also known as ARM 64-bit
|
||||
- PPC64LE, also known as Power ISA, 64-bit, Little Endian
|
||||
- RV64I, also known as RISC-V 64-bit
|
||||
|
||||
We believe Carbon should strive to support some GPUs, other restricted
|
||||
computational hardware and environments, and embedded environments. While this
|
||||
@@ -76,15 +76,15 @@ while they remain relatively new and rapidly evolving.
|
||||
|
||||
Example historical platforms that we will not prioritize support for are:
|
||||
|
||||
- Byte sizes other than 8 bits, or non-power-of-two word sizes.
|
||||
- Source code encodings other than UTF-8.
|
||||
- Big- or mixed-endian, at least for computation; accessing encoded data remains
|
||||
useful.
|
||||
- Non-2's-complement integer formats.
|
||||
- Non-IEEE 754 binary floating point format and semantics for default single-
|
||||
and double-precision floating point types.
|
||||
- Source code in file systems that don’t support file extensions or nested
|
||||
directories.
|
||||
- Byte sizes other than 8 bits, or non-power-of-two word sizes.
|
||||
- Source code encodings other than UTF-8.
|
||||
- Big- or mixed-endian, at least for computation; accessing encoded data
|
||||
remains useful.
|
||||
- Non-2's-complement integer formats.
|
||||
- Non-IEEE 754 binary floating point format and semantics for default single-
|
||||
and double-precision floating point types.
|
||||
- Source code in file systems that don’t support file extensions or nested
|
||||
directories.
|
||||
|
||||
### Interoperability with and migration from existing C++ code
|
||||
|
||||
@@ -99,11 +99,12 @@ human interaction.
|
||||
|
||||
This criterion includes:
|
||||
|
||||
- Addressing performance bugs unique to Carbon, introduced by migration tooling.
|
||||
- Converting complex code which migration tooling does not handle.
|
||||
- Addressing performance bugs unique to Carbon, introduced by migration
|
||||
tooling.
|
||||
- Converting complex code which migration tooling does not handle.
|
||||
|
||||
This criterion does not include:
|
||||
|
||||
- Cleaning up coding style to idiomatic Carbon.
|
||||
- For example, heavy use of C++ preprocessor macros may result in expanded
|
||||
code where there is no equivalent Carbon metaprogramming construct.
|
||||
- Cleaning up coding style to idiomatic Carbon.
|
||||
- For example, heavy use of C++ preprocessor macros may result in expanded
|
||||
code where there is no equivalent Carbon metaprogramming construct.
|
||||
|
||||
@@ -8,26 +8,27 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
Carbon repositories follow a few basic principles:
|
||||
|
||||
- Development directly on the `trunk` branch and
|
||||
[revert to green](#green-tests).
|
||||
- Always use pull requests, rather than pushing directly.
|
||||
- Changes should be small, incremental, and review-optimized.
|
||||
- Preserve linear history by
|
||||
[rebasing](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges#rebase-and-merge-your-pull-request-commits)
|
||||
or
|
||||
[squashing](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges#squash-and-merge-your-pull-request-commits)
|
||||
pull requests rather than using unsquashed merge commits.
|
||||
- Development directly on the `trunk` branch and
|
||||
[revert to green](#green-tests).
|
||||
- Always use pull requests, rather than pushing directly.
|
||||
- Changes should be small, incremental, and review-optimized.
|
||||
- Preserve linear history by
|
||||
[rebasing](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges#rebase-and-merge-your-pull-request-commits)
|
||||
or
|
||||
[squashing](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges#squash-and-merge-your-pull-request-commits)
|
||||
pull requests rather than using unsquashed merge commits.
|
||||
|
||||
These principles try to optimize for several different uses or activities with
|
||||
version control:
|
||||
|
||||
- Continuous integration and bisection to identify failures and revert to green.
|
||||
- Code review both at the time of commit and follow-up review after commit.
|
||||
- Understanding how things evolve over time, which can manifest in different
|
||||
ways:
|
||||
- When were things introduced?
|
||||
- How does the main branch and project evolve over time?
|
||||
- How was a bug or surprising thing introduced?
|
||||
- Continuous integration and bisection to identify failures and revert to
|
||||
green.
|
||||
- Code review both at the time of commit and follow-up review after commit.
|
||||
- Understanding how things evolve over time, which can manifest in different
|
||||
ways:
|
||||
- When were things introduced?
|
||||
- How does the main branch and project evolve over time?
|
||||
- How was a bug or surprising thing introduced?
|
||||
|
||||
Note that this isn't a complete guide to doing code reviews, and just focuses on
|
||||
the mechanical workflow and branch management. TODO: Add an explicit link to
|
||||
|
||||
@@ -11,12 +11,12 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
As part of [assisting in the evolution process](evolution.md#review-managers),
|
||||
review managers are expected to:
|
||||
|
||||
- Monitor and respond to topics in
|
||||
[Evolution > Review manager requests](https://forums.carbon-lang.dev/c/evolution/review-manager-requests/15).
|
||||
- Announce when RFCs are approaching
|
||||
[readiness for a decision](evolution.md#request-a-review-manager).
|
||||
- [Escort the proposal to a decision.](evolution.md#ask-the-reviewing-team-for-a-proposal-decision)
|
||||
- [Author and publish proposal decisions.](evolution.md#finalize-the-proposal-decision)
|
||||
- Monitor and respond to topics in
|
||||
[Evolution > Review manager requests](https://forums.carbon-lang.dev/c/evolution/review-manager-requests/15).
|
||||
- Announce when RFCs are approaching
|
||||
[readiness for a decision](evolution.md#request-a-review-manager).
|
||||
- [Escort the proposal to a decision.](evolution.md#ask-the-reviewing-team-for-a-proposal-decision)
|
||||
- [Author and publish proposal decisions.](evolution.md#finalize-the-proposal-decision)
|
||||
|
||||
Review managers should additionally provide advice and assistance to proposal
|
||||
authors where appropriate, to help ensure the smooth operation of the evolution
|
||||
@@ -55,8 +55,8 @@ titled "Request for decision: PROPOSAL":
|
||||
|
||||
Links:
|
||||
|
||||
- [Proposal PR](LINK)
|
||||
- [RFC topic](LINK)
|
||||
- [Proposal PR](LINK)
|
||||
- [RFC topic](LINK)
|
||||
|
||||
Please focus on affirm, object, and stand aside comments in this topic; other
|
||||
things specific to reaching consensus may be included. Affirm and object
|
||||
@@ -95,9 +95,9 @@ titled "[DECISION] PROPOSAL":
|
||||
|
||||
Please read the [formal decision PR](LINK) for details.
|
||||
|
||||
- [Proposal PR](LINK)
|
||||
- [RFC topic](LINK)
|
||||
- [Decision topic](link)
|
||||
- [Proposal PR](LINK)
|
||||
- [RFC topic](LINK)
|
||||
- [Decision topic](link)
|
||||
|
||||
This decision is now entering the
|
||||
[decision comment period](https://carbon-lang.dev/docs/project/evolution.html#community-comments-on-proposal-decision),
|
||||
|
||||
+11
-11
@@ -13,22 +13,22 @@ original pull request.
|
||||
For accepted proposals, where `####` is the corresponding proposal's pull
|
||||
request:
|
||||
|
||||
- `p####.md` will contain the main proposal text.
|
||||
- `p####-decision.md` documents the decision and rationale.
|
||||
- `p####` may be present as an optional subdirectory for related files (e.g.,
|
||||
images).
|
||||
- `p####.md` will contain the main proposal text.
|
||||
- `p####-decision.md` documents the decision and rationale.
|
||||
- `p####` may be present as an optional subdirectory for related files (e.g.,
|
||||
images).
|
||||
|
||||
## Proposal list
|
||||
|
||||
<!-- proposals -->
|
||||
<!-- This list is updated by src/scripts/pre-commit-proposal-list.py. -->
|
||||
|
||||
- [0029 - Linear, rebase, and pull-request GitHub workflow](p0029.md)
|
||||
- [Decision](p0029-decision.md)
|
||||
- [0044 - Proposal tracking](p0044.md)
|
||||
- [Decision](p0044-decision.md)
|
||||
- [0051 - Goals](p0051.md)
|
||||
- [0074 - Change comment/decision timelines in proposal process](p0074.md)
|
||||
- [Decision](p0074-decision.md)
|
||||
- [0029 - Linear, rebase, and pull-request GitHub workflow](p0029.md)
|
||||
- [Decision](p0029-decision.md)
|
||||
- [0044 - Proposal tracking](p0044.md)
|
||||
- [Decision](p0044-decision.md)
|
||||
- [0051 - Goals](p0051.md)
|
||||
- [0074 - Change comment/decision timelines in proposal process](p0074.md)
|
||||
- [Decision](p0074-decision.md)
|
||||
|
||||
<!-- endproposals -->
|
||||
|
||||
+14
-14
@@ -10,23 +10,23 @@ Proposal accepted on 2020-06-30
|
||||
|
||||
Affirming:
|
||||
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
|
||||
Abstaining:
|
||||
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
|
||||
## Rationale
|
||||
|
||||
- Easy to follow single source of truth will help foster an open and inclusive
|
||||
community.
|
||||
- Review requirements and focus on small, incremental changes match well
|
||||
established engineering practices for ensuring the project and codebase scale
|
||||
up both in size and time dimensions.
|
||||
- Linear history seems easier for humans to reason about.
|
||||
- Easy to follow single source of truth will help foster an open and inclusive
|
||||
community.
|
||||
- Review requirements and focus on small, incremental changes match well
|
||||
established engineering practices for ensuring the project and codebase
|
||||
scale up both in size and time dimensions.
|
||||
- Linear history seems easier for humans to reason about.
|
||||
|
||||
+48
-44
@@ -18,13 +18,13 @@ and can be handled on a case-by-case basis when they arise.
|
||||
|
||||
## Background
|
||||
|
||||
- Chapter 16 "Version Control and Branch Management" in the SWE book
|
||||
(_[Software Engineering at Google](https://www.amazon.com/Software-Engineering-Google-Lessons-Programming/dp/1492082791)_)
|
||||
- [Trunk Based Development](https://trunkbaseddevelopment.com/)
|
||||
- GitHub documentation on
|
||||
"[pull requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests)"
|
||||
- [Configuration of their merges](https://help.github.com/en/github/administering-a-repository/configuring-pull-request-merges)
|
||||
- [Protected branches](https://help.github.com/en/github/administering-a-repository/about-protected-branches)
|
||||
- Chapter 16 "Version Control and Branch Management" in the SWE book
|
||||
(_[Software Engineering at Google](https://www.amazon.com/Software-Engineering-Google-Lessons-Programming/dp/1492082791)_)
|
||||
- [Trunk Based Development](https://trunkbaseddevelopment.com/)
|
||||
- GitHub documentation on
|
||||
"[pull requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests)"
|
||||
- [Configuration of their merges](https://help.github.com/en/github/administering-a-repository/configuring-pull-request-merges)
|
||||
- [Protected branches](https://help.github.com/en/github/administering-a-repository/about-protected-branches)
|
||||
|
||||
## Proposal
|
||||
|
||||
@@ -91,22 +91,22 @@ are allowed for rare events like contributing a new subproject.
|
||||
|
||||
Pros:
|
||||
|
||||
- Still has linear history.
|
||||
- Incentivizes squashing for continuous integration and bisection.
|
||||
- Very low overhead for fixing trivial mistakes.
|
||||
- Still has linear history.
|
||||
- Incentivizes squashing for continuous integration and bisection.
|
||||
- Very low overhead for fixing trivial mistakes.
|
||||
|
||||
Cons:
|
||||
|
||||
- Creates extremely bad incentives around code review.
|
||||
- Lots of patches don't get pre-commit review, even if they would benefit from
|
||||
it.
|
||||
- Very experienced contributors are much better at avoiding pre-commit review,
|
||||
so are rarely blocked waiting on review.
|
||||
- Leads to the most experienced members of the community not doing enough code
|
||||
reviews, or being timely enough in code reviews.
|
||||
- Lots of patches submitted with post-commit review are never reviewed in
|
||||
practice unless they break something.
|
||||
- UI and basic support for code reviews entirely focused on pull requests.
|
||||
- Creates extremely bad incentives around code review.
|
||||
- Lots of patches don't get pre-commit review, even if they would benefit
|
||||
from it.
|
||||
- Very experienced contributors are much better at avoiding pre-commit
|
||||
review, so are rarely blocked waiting on review.
|
||||
- Leads to the most experienced members of the community not doing enough
|
||||
code reviews, or being timely enough in code reviews.
|
||||
- Lots of patches submitted with post-commit review are never reviewed in
|
||||
practice unless they break something.
|
||||
- UI and basic support for code reviews entirely focused on pull requests.
|
||||
|
||||
### Fork and merge model
|
||||
|
||||
@@ -115,26 +115,29 @@ development.
|
||||
|
||||
Pros:
|
||||
|
||||
- Mostly supported by pull requests, so still able to use much of that
|
||||
functionality.
|
||||
- Supports a model in which contributors do not communicate and can each develop
|
||||
a local, decentralized fork while still achieving overall reconciliation.
|
||||
- Can model much more complex history of code evolution faithfully in the
|
||||
tooling.
|
||||
- Most of the time these aren't so complex that they create problems for
|
||||
humans.
|
||||
- Mostly supported by pull requests, so still able to use much of that
|
||||
functionality.
|
||||
- Supports a model in which contributors do not communicate and can each
|
||||
develop a local, decentralized fork while still achieving overall
|
||||
reconciliation.
|
||||
- Can model much more complex history of code evolution faithfully in the
|
||||
tooling.
|
||||
- Most of the time these aren't so complex that they create problems for
|
||||
humans.
|
||||
|
||||
Cons:
|
||||
|
||||
- History is harder for humans to understand and reason about in complex cases.
|
||||
- Bisection and continuous integration are more complex.
|
||||
- May create difficulty for continuous integration against mainline, because
|
||||
unclear what "order" they should be applied / explored. While there are
|
||||
technical approaches to address this, the don't seem to eliminate the
|
||||
complexity, merely provide a clear set of mechanics for handling it.
|
||||
- Reduces incentives to land small, incremental changes by allowing
|
||||
non-linearity to reduce the effort required for large and/or complex merges.
|
||||
- Makes review of the main branch's history harder due to non-linearity.
|
||||
- History is harder for humans to understand and reason about in complex
|
||||
cases.
|
||||
- Bisection and continuous integration are more complex.
|
||||
- May create difficulty for continuous integration against mainline,
|
||||
because unclear what "order" they should be applied / explored. While
|
||||
there are technical approaches to address this, the don't seem to
|
||||
eliminate the complexity, merely provide a clear set of mechanics for
|
||||
handling it.
|
||||
- Reduces incentives to land small, incremental changes by allowing
|
||||
non-linearity to reduce the effort required for large and/or complex merges.
|
||||
- Makes review of the main branch's history harder due to non-linearity.
|
||||
|
||||
### Fork and merge, but branches can only have linear history
|
||||
|
||||
@@ -145,13 +148,14 @@ themselves don’t contain merge commits.
|
||||
|
||||
Pros:
|
||||
|
||||
- Mostly supported by GitHub pull requests, so still able to use much of that
|
||||
functionality.
|
||||
- Restricts non-linearity of history. The only non-linearity that is left is
|
||||
merge commits on the trunk branch. PRs themselves can’t contain merge commits.
|
||||
- Mostly supported by GitHub pull requests, so still able to use much of that
|
||||
functionality.
|
||||
- Restricts non-linearity of history. The only non-linearity that is left is
|
||||
merge commits on the trunk branch. PRs themselves can’t contain merge
|
||||
commits.
|
||||
|
||||
Cons:
|
||||
|
||||
- Requires a custom presubmit on GitHub that checks linearity of a PR.
|
||||
- The cons of the fork and merge strategy regarding the complexity of history
|
||||
remain, but to a smaller degree, since non-linearity is restricted.
|
||||
- Requires a custom presubmit on GitHub that checks linearity of a PR.
|
||||
- The cons of the fork and merge strategy regarding the complexity of history
|
||||
remain, but to a smaller degree, since non-linearity is restricted.
|
||||
|
||||
+45
-45
@@ -10,17 +10,17 @@ Proposal accepted on 2020-06-02
|
||||
|
||||
Affirming:
|
||||
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
|
||||
Abstaining:
|
||||
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
|
||||
## Open questions
|
||||
|
||||
@@ -65,22 +65,22 @@ etc. In general, the PR-centric model was favored.
|
||||
|
||||
### Rationale for using a GitHub markdown-centric flow
|
||||
|
||||
- The GitHub markdown-centric flow makes the on-ramp as smooth as possible for
|
||||
external contributors.
|
||||
- This positions the project to maximize the ease of engaging with and gaining
|
||||
contributions from the wider industry.
|
||||
- The final documents must be in markdown form, so it is best if contributors
|
||||
have the option to stay in markdown for the whole process. This is
|
||||
significantly less complex than something that converts between formats:
|
||||
- The GitHub markdown-centric flow makes the on-ramp as smooth as possible for
|
||||
external contributors.
|
||||
- This positions the project to maximize the ease of engaging with and
|
||||
gaining contributions from the wider industry.
|
||||
- The final documents must be in markdown form, so it is best if contributors
|
||||
have the option to stay in markdown for the whole process. This is
|
||||
significantly less complex than something that converts between formats:
|
||||
|
||||
- Less to learn
|
||||
- Fewer steps in the process
|
||||
- No outdated versions in the old format left behind
|
||||
- Less to learn
|
||||
- Fewer steps in the process
|
||||
- No outdated versions in the old format left behind
|
||||
|
||||
- The technical flow seems on balance better than the Google Docs-based
|
||||
workflow. The proposal does a really good job explaining pros and cons. In
|
||||
summary, the Google Docs-centric workflow has a lot of cons that make it
|
||||
difficult to work with proposals over the long term.
|
||||
- The technical flow seems on balance better than the Google Docs-based
|
||||
workflow. The proposal does a really good job explaining pros and cons. In
|
||||
summary, the Google Docs-centric workflow has a lot of cons that make it
|
||||
difficult to work with proposals over the long term.
|
||||
|
||||
### Rationale for not requiring tracking issues
|
||||
|
||||
@@ -90,35 +90,35 @@ issues, the process is more light-weight without them.
|
||||
|
||||
### Rationale for not committing proposals that are declined or deferred
|
||||
|
||||
- This approach seems simpler.
|
||||
- When a proposal PR includes the changes put forth in the proposal (PR-centric
|
||||
model), the declined PR might need to be considerably changed--and might lose
|
||||
context--in order to be committed.
|
||||
- The community will put a lot of work into developing, discussing, and making a
|
||||
decision on a proposal. There may be valuable insight in rejected proposals,
|
||||
so it makes sense to archive them. However, as noted, committing the PR will
|
||||
not always be possible with reasonable effort if not working in a
|
||||
proposal-centric model, as the proposal text may not stand on its own.
|
||||
- While we may discover issues with this approach, it is better to try this way,
|
||||
see if any issues can be rectified, and propose changes as necessary.
|
||||
- This approach seems simpler.
|
||||
- When a proposal PR includes the changes put forth in the proposal
|
||||
(PR-centric model), the declined PR might need to be considerably
|
||||
changed--and might lose context--in order to be committed.
|
||||
- The community will put a lot of work into developing, discussing, and making
|
||||
a decision on a proposal. There may be valuable insight in rejected
|
||||
proposals, so it makes sense to archive them. However, as noted, committing
|
||||
the PR will not always be possible with reasonable effort if not working in
|
||||
a proposal-centric model, as the proposal text may not stand on its own.
|
||||
- While we may discover issues with this approach, it is better to try this
|
||||
way, see if any issues can be rectified, and propose changes as necessary.
|
||||
|
||||
### Rationale for committing a proposal to the repository it affects
|
||||
|
||||
- This keeps the proposal close to the repository, and therefore, the community,
|
||||
that it affects.
|
||||
- It facilitates autonomy of (future) review teams responsible for a particular
|
||||
aspect of Carbon. For example, a reference implementation team responsible for
|
||||
the carbon-toolchain repository.
|
||||
- It simplifies the common case and makes it easier to find how each repository
|
||||
evolves over time.
|
||||
- This keeps the proposal close to the repository, and therefore, the
|
||||
community, that it affects.
|
||||
- It facilitates autonomy of (future) review teams responsible for a
|
||||
particular aspect of Carbon. For example, a reference implementation team
|
||||
responsible for the carbon-toolchain repository.
|
||||
- It simplifies the common case and makes it easier to find how each
|
||||
repository evolves over time.
|
||||
|
||||
### Rationale for pushing high-level comments to GitHub
|
||||
|
||||
While opinions were not as strong, reasons given for perferring comments in
|
||||
GitHub:
|
||||
|
||||
- This flow will maximize the alignment with “normal” GitHub development flow.
|
||||
- This both improves pulling external/new people into the flow, and will
|
||||
reduce the number of flows they need to learn/remember/tool for.
|
||||
- We will get ecosystem benefits as this flow continues to be optimized by
|
||||
GitHub and those using it.
|
||||
- This flow will maximize the alignment with “normal” GitHub development flow.
|
||||
- This both improves pulling external/new people into the flow, and will
|
||||
reduce the number of flows they need to learn/remember/tool for.
|
||||
- We will get ecosystem benefits as this flow continues to be optimized by
|
||||
GitHub and those using it.
|
||||
|
||||
+408
-395
File diff suppressed because it is too large
Load Diff
+74
-73
@@ -12,17 +12,17 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
- [Problem](#problem)
|
||||
- [Background](#background)
|
||||
- [Proposal](#proposal)
|
||||
- [Including success criteria](#including-success-criteria)
|
||||
- [Alternatives](#alternatives)
|
||||
- [Change priority of interoperability and migration](#change-priority-of-interoperability-and-migration)
|
||||
- [Address project goals differently](#address-project-goals-differently)
|
||||
- [Status quo](#status-quo)
|
||||
- [Completely remove the community priority from this document](#completely-remove-the-community-priority-from-this-document)
|
||||
- [Add project goals to the priority list](#add-project-goals-to-the-priority-list)
|
||||
- [Merge project goals and language goals](#merge-project-goals-and-language-goals)
|
||||
- [Problem](#problem)
|
||||
- [Background](#background)
|
||||
- [Proposal](#proposal)
|
||||
- [Including success criteria](#including-success-criteria)
|
||||
- [Alternatives](#alternatives)
|
||||
- [Change priority of interoperability and migration](#change-priority-of-interoperability-and-migration)
|
||||
- [Address project goals differently](#address-project-goals-differently)
|
||||
- [Status quo](#status-quo)
|
||||
- [Completely remove the community priority from this document](#completely-remove-the-community-priority-from-this-document)
|
||||
- [Add project goals to the priority list](#add-project-goals-to-the-priority-list)
|
||||
- [Merge project goals and language goals](#merge-project-goals-and-language-goals)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
@@ -59,8 +59,8 @@ principle.
|
||||
This proposal includes
|
||||
[success criteria](/docs/project/principles/success_criteria.md) covering:
|
||||
|
||||
- Platforms
|
||||
- Migration tooling
|
||||
- Platforms
|
||||
- Migration tooling
|
||||
|
||||
It should be expected that more will be added in the future.
|
||||
|
||||
@@ -95,56 +95,56 @@ Overall, we would present the pros and cons as:
|
||||
|
||||
Pros:
|
||||
|
||||
- There is a consensus that interoperability is critical. Making it the top goal
|
||||
emphasizes that.
|
||||
- There is a consensus that interoperability is critical. Making it the top
|
||||
goal emphasizes that.
|
||||
|
||||
Cons:
|
||||
|
||||
- While interoperability is critical, the same is true of other goals; this
|
||||
isn't enough to determine priority.
|
||||
- There are trade-offs between goals where there is already a consensus that
|
||||
inteoperability will be diminished in favor of other goals, and there aren't
|
||||
as many clear cases in the other direction.
|
||||
- Taken to extremes, making interoperability and migration a higher priority
|
||||
than evolution would suggest that Carbon should start with C++ and
|
||||
incrementally evolve from that base. We have observed areas where C++ has
|
||||
had trouble evolving, and Carbon would risk getting stuck on similar local
|
||||
maxima in order to avoid breaking existing code.
|
||||
- While interoperability is critical, the same is true of other goals; this
|
||||
isn't enough to determine priority.
|
||||
- There are trade-offs between goals where there is already a consensus that
|
||||
inteoperability will be diminished in favor of other goals, and there aren't
|
||||
as many clear cases in the other direction.
|
||||
- Taken to extremes, making interoperability and migration a higher
|
||||
priority than evolution would suggest that Carbon should start with C++
|
||||
and incrementally evolve from that base. We have observed areas where
|
||||
C++ has had trouble evolving, and Carbon would risk getting stuck on
|
||||
similar local maxima in order to avoid breaking existing code.
|
||||
|
||||
For example of where trade-offs may be seen right now:
|
||||
|
||||
- Carbon's set of primitive types won't match C++'s list; we currently expect
|
||||
multiple C++ types to map to single Carbon types. This could be considered a
|
||||
conflict with multiple priorities:
|
||||
- #2: Carbon's leaning for fewer types should make evolution of the language
|
||||
easier.
|
||||
- #3: Carbon code will be easier to read and understand with fewer types.
|
||||
- When considering `Int` vs `int`, Carbon's plans do not mirror C++. This could
|
||||
be considered a conflict with multiple priorities:
|
||||
- #1: Carbon's primary types, such as `Int`, should be allowed to replace
|
||||
C++-specified overflow behaviors with alternatives that are higher
|
||||
performance.
|
||||
- #3: Avoiding platform-specific types should make it easier to understand how
|
||||
could will function on various platforms.
|
||||
- #4: Carbon's plan for `Int` trapping where C++ would overflow should make
|
||||
code safety easier.
|
||||
- We expect platform support priorities to differ between C/C++ and Carbon. This
|
||||
is a conflict with Carbon's #6 priority, which focuses support on modern over
|
||||
legacy platforms.
|
||||
- C++'s preprocessor macros will be replaced by metaprogramming in Carbon. It's
|
||||
not clear what migration of code using macros will look like, but some will
|
||||
likely be expanded by automation. This could be considered a conflict with
|
||||
multiple priorities:
|
||||
- #2: Structured metaprogramming should make it easier to evolve software.
|
||||
- #3: Metaprogramming should be easier to read than preprocessor macros.
|
||||
- Templates have been argued as only being added for interoperability/migration,
|
||||
and that we could only have generics without that goal. This is not considered
|
||||
a conflict between goal priorities.
|
||||
- This could be considered a conflict with priority #3, because templates are
|
||||
hard to read and understand. However, templates don't constrain other parts
|
||||
of the language. While they may have readability or other problems, they
|
||||
aren't core or required in the way that other elements are, including
|
||||
primitive types.
|
||||
- Carbon's set of primitive types won't match C++'s list; we currently expect
|
||||
multiple C++ types to map to single Carbon types. This could be considered a
|
||||
conflict with multiple priorities:
|
||||
- #2: Carbon's leaning for fewer types should make evolution of the
|
||||
language easier.
|
||||
- #3: Carbon code will be easier to read and understand with fewer types.
|
||||
- When considering `Int` vs `int`, Carbon's plans do not mirror C++. This
|
||||
could be considered a conflict with multiple priorities:
|
||||
- #1: Carbon's primary types, such as `Int`, should be allowed to replace
|
||||
C++-specified overflow behaviors with alternatives that are higher
|
||||
performance.
|
||||
- #3: Avoiding platform-specific types should make it easier to understand
|
||||
how could will function on various platforms.
|
||||
- #4: Carbon's plan for `Int` trapping where C++ would overflow should
|
||||
make code safety easier.
|
||||
- We expect platform support priorities to differ between C/C++ and Carbon.
|
||||
This is a conflict with Carbon's #6 priority, which focuses support on
|
||||
modern over legacy platforms.
|
||||
- C++'s preprocessor macros will be replaced by metaprogramming in Carbon.
|
||||
It's not clear what migration of code using macros will look like, but some
|
||||
will likely be expanded by automation. This could be considered a conflict
|
||||
with multiple priorities:
|
||||
- #2: Structured metaprogramming should make it easier to evolve software.
|
||||
- #3: Metaprogramming should be easier to read than preprocessor macros.
|
||||
- Templates have been argued as only being added for
|
||||
interoperability/migration, and that we could only have generics without
|
||||
that goal. This is not considered a conflict between goal priorities.
|
||||
- This could be considered a conflict with priority #3, because templates
|
||||
are hard to read and understand. However, templates don't constrain
|
||||
other parts of the language. While they may have readability or other
|
||||
problems, they aren't core or required in the way that other elements
|
||||
are, including primitive types.
|
||||
|
||||
### Address project goals differently
|
||||
|
||||
@@ -169,14 +169,14 @@ We could completely remove the project goals from this document.
|
||||
|
||||
Pros:
|
||||
|
||||
- Allows this to be the "language goals" document.
|
||||
- Allows this to be the "language goals" document.
|
||||
|
||||
Cons:
|
||||
|
||||
- Creates additional documents that need to be understood to parse language
|
||||
goals.
|
||||
- Makes for less clear prioritization of community, increasing ambiguity on how
|
||||
community vs language design conflicts can be resolved.
|
||||
- Creates additional documents that need to be understood to parse language
|
||||
goals.
|
||||
- Makes for less clear prioritization of community, increasing ambiguity on
|
||||
how community vs language design conflicts can be resolved.
|
||||
|
||||
#### Add project goals to the priority list
|
||||
|
||||
@@ -184,15 +184,15 @@ We could make the project goals part of the priority list.
|
||||
|
||||
Pros:
|
||||
|
||||
- Makes the ordering unambiguous.
|
||||
- Makes the ordering unambiguous.
|
||||
|
||||
Cons:
|
||||
|
||||
- Makes what's currently a numerated list of language design goals less
|
||||
design-focused.
|
||||
- Prevents saying trivial things like "performance is our top priority".
|
||||
- Unless community isn't the top priority, re-creating the conflict risk that
|
||||
led to the creating of these project goals.
|
||||
- Makes what's currently a numerated list of language design goals less
|
||||
design-focused.
|
||||
- Prevents saying trivial things like "performance is our top priority".
|
||||
- Unless community isn't the top priority, re-creating the conflict risk
|
||||
that led to the creating of these project goals.
|
||||
|
||||
#### Merge project goals and language goals
|
||||
|
||||
@@ -201,11 +201,12 @@ project goals and language goals.
|
||||
|
||||
Pros:
|
||||
|
||||
- Makes the document shorter and more concise.
|
||||
- Tooling can already be considered a priority under "Code that is easy to read,
|
||||
understand, and write", and is explicitly mentioned as part of that goal.
|
||||
- Makes the document shorter and more concise.
|
||||
- Tooling can already be considered a priority under "Code that is easy to
|
||||
read, understand, and write", and is explicitly mentioned as part of that
|
||||
goal.
|
||||
|
||||
Cons:
|
||||
|
||||
- Previous setup raised objections over why the community goal wasn't part of
|
||||
the priority list.
|
||||
- Previous setup raised objections over why the community goal wasn't part of
|
||||
the priority list.
|
||||
|
||||
+16
-15
@@ -10,17 +10,17 @@ Proposal accepted on 2020-06-02
|
||||
|
||||
Affirming:
|
||||
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
|
||||
Abstaining:
|
||||
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
|
||||
## Open questions
|
||||
|
||||
@@ -31,10 +31,11 @@ that can be resolved by review managers as part of doc changes.
|
||||
|
||||
## Rationale
|
||||
|
||||
- This directly supports our community goals: not everybody is in a position to
|
||||
respond to events with less than a day of latency, so longer lead times before
|
||||
deadlines will help enable them to participate.
|
||||
- Longer lead time makes it more likely that we'll get substantive comments.
|
||||
- The answer to the open question doesn't strongly matter, and there is a
|
||||
preference for leaving it to the review managers' discretion rather than
|
||||
having the core team decide.
|
||||
- This directly supports our community goals: not everybody is in a position
|
||||
to respond to events with less than a day of latency, so longer lead times
|
||||
before deadlines will help enable them to participate.
|
||||
- Longer lead time makes it more likely that we'll get substantive
|
||||
comments.
|
||||
- The answer to the open question doesn't strongly matter, and there is a
|
||||
preference for leaving it to the review managers' discretion rather than
|
||||
having the core team decide.
|
||||
|
||||
+19
-19
@@ -12,14 +12,14 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
- [Problem](#problem)
|
||||
- [Background](#background)
|
||||
- [Proposal](#proposal)
|
||||
- [Details](#details)
|
||||
- [Open Question/Bikeshed](#open-questionbikeshed)
|
||||
- [Alternatives considered](#alternatives-considered)
|
||||
- [Alternative 1](#alternative-1)
|
||||
- [Alternative 2](#alternative-2)
|
||||
- [Problem](#problem)
|
||||
- [Background](#background)
|
||||
- [Proposal](#proposal)
|
||||
- [Details](#details)
|
||||
- [Open Question/Bikeshed](#open-questionbikeshed)
|
||||
- [Alternatives considered](#alternatives-considered)
|
||||
- [Alternative 1](#alternative-1)
|
||||
- [Alternative 2](#alternative-2)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
@@ -58,17 +58,17 @@ during the review period rather than the decision period.
|
||||
|
||||
## Details
|
||||
|
||||
- A deadline for final comments will be published at least 7 calendar days (or 4
|
||||
working days, if longer) in advance (instead of the current 1 day). On or
|
||||
before the deadline date, the deadline may be extended if the review manager
|
||||
determines that there is still productive discussion going on.
|
||||
- At the time the comment period deadline is announced, the proposal will be
|
||||
added to the agenda of the next core team meeting following the comment
|
||||
period deadline.
|
||||
- There must be a minimum of four working days between the end of the comment
|
||||
period and the day of the meeting.
|
||||
- If the deadline for comments is extended, the agenda item will be moved, if
|
||||
necessary, by the review manager.
|
||||
- A deadline for final comments will be published at least 7 calendar days (or
|
||||
4 working days, if longer) in advance (instead of the current 1 day). On or
|
||||
before the deadline date, the deadline may be extended if the review manager
|
||||
determines that there is still productive discussion going on.
|
||||
- At the time the comment period deadline is announced, the proposal will
|
||||
be added to the agenda of the next core team meeting following the
|
||||
comment period deadline.
|
||||
- There must be a minimum of four working days between the end of the comment
|
||||
period and the day of the meeting.
|
||||
- If the deadline for comments is extended, the agenda item will be moved,
|
||||
if necessary, by the review manager.
|
||||
|
||||
### Open Question/Bikeshed
|
||||
|
||||
|
||||
@@ -10,14 +10,14 @@ Proposal accepted on 2020-MM-DD
|
||||
|
||||
Affirming:
|
||||
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
- [austern](https://github.com/austern)
|
||||
- [chandlerc](https://github.com/chandlerc)
|
||||
- [geoffromer](https://github.com/geoffromer)
|
||||
- [gribozavr](https://github.com/gribozavr)
|
||||
- [josh11b](https://github.com/josh11b)
|
||||
- [noncombatant](https://github.com/noncombatant)
|
||||
- [tituswinters](https://github.com/tituswinters)
|
||||
- [zygoloid](https://github.com/zygoloid)
|
||||
|
||||
Abstaining:
|
||||
|
||||
@@ -29,4 +29,4 @@ TODO answer.
|
||||
|
||||
## Rationale
|
||||
|
||||
- TODO
|
||||
- TODO
|
||||
|
||||
@@ -12,12 +12,12 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
- [TODO: Initial proposal setup](#todo-initial-proposal-setup)
|
||||
- [Problem](#problem)
|
||||
- [Background](#background)
|
||||
- [Proposal](#proposal)
|
||||
- [Details](#details)
|
||||
- [Alternatives considered](#alternatives-considered)
|
||||
- [TODO: Initial proposal setup](#todo-initial-proposal-setup)
|
||||
- [Problem](#problem)
|
||||
- [Background](#background)
|
||||
- [Proposal](#proposal)
|
||||
- [Details](#details)
|
||||
- [Alternatives considered](#alternatives-considered)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
@@ -27,7 +27,7 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
1. Copy this template to `new.md`, and create a commit.
|
||||
2. Create a GitHub pull request, to get a pull request number.
|
||||
- Add the `proposal` and `WIP` labels to the pull request.
|
||||
- Add the `proposal` and `WIP` labels to the pull request.
|
||||
3. Rename `new.md` to `/proposals/p####.md`, where `####` should be the pull
|
||||
request number.
|
||||
4. Update the title of the proposal (the `TODO` on line 1).
|
||||
|
||||
@@ -38,11 +38,11 @@ if __name__ == "__main__":
|
||||
print("ERROR: %s doesn't have a title on the first line." % file)
|
||||
error = True
|
||||
proposals.append(
|
||||
"- [%s - %s](%s)" % (file_match[1], title_match[1], file)
|
||||
"- [%s - %s](%s)" % (file_match[1], title_match[1], file)
|
||||
)
|
||||
decision_file = "p%s-decision.md" % file_match[1]
|
||||
if os.path.exists(os.path.join(proposal_dir, decision_file)):
|
||||
proposals.append(" - [Decision](%s)" % decision_file)
|
||||
proposals.append(" - [Decision](%s)" % decision_file)
|
||||
# We print batched errors for usability, but still need to exit with
|
||||
# failure.
|
||||
if error:
|
||||
|
||||
@@ -46,8 +46,10 @@ for (var i = 0; i < files.length; ++i) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Do the toc substitution.
|
||||
newContent = mdtoc.insert(newContent, { bullets: '-' });
|
||||
// Do the toc substitution. Resulting indents will look like:
|
||||
// - H1
|
||||
// - H2
|
||||
newContent = mdtoc.insert(newContent, { indent: ' ', bullets: '- ' });
|
||||
|
||||
if (oldContent != newContent) {
|
||||
console.log(`Updating ${file}`);
|
||||
|
||||
Reference in New Issue
Block a user