mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 18:50:09 +01:00
Roadmap updates for 2022 (#1025)
Roadmap updates for 2022. Key goals: * Reach the point where the first draft of the core language design is complete, with some test programs and an approximate implementation in executable semantics. * Go public, and improve public participation. Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
co-authored by
Jon Meow
parent
35a0bf1c7e
commit
a0a4146bcf
+67
-55
@@ -10,50 +10,84 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
## Table of contents
|
||||
|
||||
- [Objective for 2021: speed up Carbon development](#objective-for-2021-speed-up-carbon-development)
|
||||
- [Key results in 2021](#key-results-in-2021)
|
||||
- [Broaden core team representation so no organization is >50%](#broaden-core-team-representation-so-no-organization-is-50)
|
||||
- [Objective for 2022: make Carbon public, finish 0.1 language](#objective-for-2022-make-carbon-public-finish-01-language)
|
||||
- [Completing the language design](#completing-the-language-design)
|
||||
- [Going public](#going-public)
|
||||
- [Key results in 2022](#key-results-in-2022)
|
||||
- [Broaden participation so no organization is >50%](#broaden-participation-so-no-organization-is-50)
|
||||
- [Example ports of C++ libraries to Carbon (100% of woff2, 99% of RE2)](#example-ports-of-c-libraries-to-carbon-100-of-woff2-99-of-re2)
|
||||
- [Language design covers the syntax and semantics of the example port code.](#language-design-covers-the-syntax-and-semantics-of-the-example-port-code)
|
||||
- [Demo implementation of core features with working examples](#demo-implementation-of-core-features-with-working-examples)
|
||||
- [Executable semantic specification for core features with test cases](#executable-semantic-specification-for-core-features-with-test-cases)
|
||||
- [Beyond 2021](#beyond-2021)
|
||||
- [Potential 2022 goals: finish 0.1 language, make it public](#potential-2022-goals-finish-01-language-make-it-public)
|
||||
- [Beyond 2022](#beyond-2022)
|
||||
- [Potential 2023 goals: finish 0.2 language, stop experimenting](#potential-2023-goals-finish-02-language-stop-experimenting)
|
||||
- [Potential 2024-2025 goals: _ship_ 1.0 language & organization](#potential-2024-2025-goals-_ship_-10-language--organization)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
## Objective for 2021: speed up Carbon development
|
||||
## Objective for 2022: make Carbon public, finish 0.1 language
|
||||
|
||||
The main objective of the Carbon project in 2021 is to speed up the development
|
||||
of the project, even while it remains both an experiment and private. This will
|
||||
require improving at least two dimensions:
|
||||
We have two primary goals for 2022:
|
||||
|
||||
- Increase the investment by existing individuals and organizations.
|
||||
- Increase the breadth of different individuals and organizations investing in
|
||||
Carbon.
|
||||
- Shift the experiment to being public.
|
||||
- Reach the point where the core language design is substantially complete.
|
||||
|
||||
We expect to make progress on this objective in 2021 primarily by making
|
||||
Carbon's design more concrete and with a more specific and easily understood
|
||||
value proposition. As a result, our key results are primarily around specific
|
||||
artifacts that we think will help support the scaling up of Carbon development
|
||||
efforts.
|
||||
### Completing the language design
|
||||
|
||||
We also need to identify key missing participants and onboard them
|
||||
throughout 2021.
|
||||
By the end of 2022, the core Carbon language design should be substantially
|
||||
complete, including designs for expressions and statements, classes, generics
|
||||
and templates, core built-in types and interfaces such as integers and pointers,
|
||||
and interoperability with C++. The design choices made to reach this point are
|
||||
expected to be experimental, and many of them may need revisiting before we
|
||||
reach 1.0, but the broad shape of the language should be clear at this point,
|
||||
and it should be possible to write non-trivial Carbon programs.
|
||||
|
||||
## Key results in 2021
|
||||
An initial rough framework for the core standard library functionality should be
|
||||
provided, as necessary to support the core language components. A largely
|
||||
complete implementation of the core language design should be available in
|
||||
executable semantics. The toolchain should be able to parse the core language
|
||||
design, with some support for name lookup and type-checking.
|
||||
|
||||
We should have begun writing non-trivial portions of the standard library, such
|
||||
as common higher-level data structures and algorithms.
|
||||
|
||||
### Going public
|
||||
|
||||
At some point in 2022 we should shift the experiment to be public. This will
|
||||
allow us to significantly expand both those directly involved and contributing
|
||||
to Carbon but also those able to evaluate and give us feedback.
|
||||
|
||||
We don't expect Carbon to shift away from an experiment until after it becomes
|
||||
public and after we have been able to collect and incorporate a reasonable
|
||||
amount of feedback from the broader industry and community. This feedback will
|
||||
be central in determining whether Carbon should continue past the experimental
|
||||
stage.
|
||||
|
||||
## Key results in 2022
|
||||
|
||||
There are several milestones that we believe are on the critical path to
|
||||
successfully achieving our main goal for the year, and point to concrete areas
|
||||
of focus for the project.
|
||||
|
||||
### Broaden core team representation so no organization is >50%
|
||||
### Broaden participation so no organization is >50%
|
||||
|
||||
Our goal is that no single organization makes up >50% of the core team to ensure
|
||||
that we are including as broad and representative a set of perspectives in the
|
||||
evolution of Carbon as possible.
|
||||
Our goal is that no single organization makes up >50% of participation in the
|
||||
Carbon project, to ensure that we are including as broad and representative a
|
||||
set of perspectives in the evolution of Carbon as possible.
|
||||
|
||||
As a proxy for the amount of participation, we will count the number of active
|
||||
participants from each organization in 2022, with the aim that each organization
|
||||
is represented by less than 50% of all active participatnts.
|
||||
|
||||
There are many ways in which someone could be an active participant, and when
|
||||
the leads come to reflect on this at the end of the year, we expect this to be a
|
||||
judgment call. We will consider at least the following when measuring our
|
||||
success on this objective:
|
||||
|
||||
- Pull requests authored and reviewed, including proposals, code changes, and
|
||||
documentation changes.
|
||||
- Contribution to discussions, including Discord, teleconferences, and GitHub
|
||||
issues.
|
||||
|
||||
### Example ports of C++ libraries to Carbon (100% of [woff2](https://github.com/google/woff2), 99% of [RE2](https://github.com/google/re2))
|
||||
|
||||
@@ -85,8 +119,8 @@ overarching value proposition.
|
||||
#### Language design covers the syntax and semantics of the example port code.
|
||||
|
||||
We should have a clear understanding of the syntax and semantics used by these
|
||||
example ports. While this should include accepted proposals, it doesn't
|
||||
necessarily require either formal specification or implementation.
|
||||
example ports. We should be able to demonstrate that self-contained portions of
|
||||
the ported code work correctly using the executable semantics implementation.
|
||||
|
||||
### Demo implementation of core features with working examples
|
||||
|
||||
@@ -133,41 +167,17 @@ ensure the language and implementation both support use cases like formatting.
|
||||
|
||||
This should include both a human readable rendering of the formal semantics as
|
||||
well as an execution environment to run test cases through those semantics. The
|
||||
core features which should be covered by these semantics are:
|
||||
implementation should cover enough of the core language that example code, such
|
||||
as the above ports of woff2 and RE2 and the Carbon standard library, can be
|
||||
verified with the executable semantics implementation.
|
||||
|
||||
- User-defined types, functions, namespaces, packages, and importing.
|
||||
- Basic generic functions and types using interfaces.
|
||||
- Sum types sufficient for optional-types to model nullable pointers.
|
||||
|
||||
This is intentionally a subset of the features covered by the demo
|
||||
implementation. The intent is to reflect that _completing_ coverage of the
|
||||
features in the specification is a slightly lower priority, and instead we
|
||||
should rapidly spike out as complete of a demo as possible and come back to the
|
||||
semantics if possible.
|
||||
|
||||
## Beyond 2021
|
||||
## Beyond 2022
|
||||
|
||||
Longer term goals are hard to pin down and always subject to change, but we want
|
||||
to give an idea of what kinds of things are expected at a high level further out
|
||||
in order to illustrate how the goals and priorities we have in 2021 feed into
|
||||
in order to illustrate how the goals and priorities we have in 2022 feed into
|
||||
subsequent years.
|
||||
|
||||
### Potential 2022 goals: finish 0.1 language, make it public
|
||||
|
||||
We expect that at some point in 2022 we will need to shift the experiment to be
|
||||
public. This will allow us to significantly expand both those directly involved
|
||||
and contributing to Carbon but also those able to evaluate and give us feedback.
|
||||
|
||||
We don't expect Carbon to shift away from an experiment until after it becomes
|
||||
public and after we have been able to collect and incorporate a reasonable
|
||||
amount of feedback from the broader industry and community.
|
||||
|
||||
We'll also need to start broadening our scope:
|
||||
|
||||
- Expand the standard library to at least cover everything needed for self
|
||||
hosting.
|
||||
- Develop initial C++ to Carbon migration tooling.
|
||||
|
||||
### Potential 2023 goals: finish 0.2 language, stop experimenting
|
||||
|
||||
Once Carbon is moving quickly and getting public feedback, we should be able to
|
||||
@@ -188,6 +198,8 @@ Some concrete goals that might show up in this time frame:
|
||||
- Migration tooling sufficient to use with real-world libraries and systems.
|
||||
This might be used to help with self-hosting Carbon, as well as by initial
|
||||
early adopters evaluating Carbon.
|
||||
- Create a foundation or similar organization to manage the Carbon project,
|
||||
separate from any corporate entities that fund work on Carbon.
|
||||
|
||||
### Potential 2024-2025 goals: _ship_ 1.0 language & organization
|
||||
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
# Roadmap for 2022
|
||||
|
||||
<!--
|
||||
Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
||||
Exceptions. See /LICENSE for license information.
|
||||
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
-->
|
||||
|
||||
[Pull request](https://github.com/carbon-language/carbon-lang/pull/1025)
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
## Table of contents
|
||||
|
||||
- [Problem](#problem)
|
||||
- [Background](#background)
|
||||
- [Proposal](#proposal)
|
||||
- [Retrospective on 2021](#retrospective-on-2021)
|
||||
- [Broaden core team representation so no organization is >50%](#broaden-core-team-representation-so-no-organization-is-50)
|
||||
- [Example ports of C++ libraries to Carbon (100% of woff2, 99% of RE2)](#example-ports-of-c-libraries-to-carbon-100-of-woff2-99-of-re2)
|
||||
- [Demo implementation of core features with working examples](#demo-implementation-of-core-features-with-working-examples)
|
||||
- [Executable semantic specification for core features with test cases](#executable-semantic-specification-for-core-features-with-test-cases)
|
||||
- [Rationale based on Carbon's goals](#rationale-based-on-carbons-goals)
|
||||
- [Alternatives considered](#alternatives-considered)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
## Problem
|
||||
|
||||
It's (past) time to update our roadmap for 2022, following Carbon's annual
|
||||
[roadmap process](/docs/project/roadmap_process.md).
|
||||
|
||||
## Background
|
||||
|
||||
Carbon has an annual roadmap to align and focus the work of the teams and
|
||||
community. For 2021, our main objective was to speed up the development of the
|
||||
Carbon project while it remains a private experiment, by:
|
||||
|
||||
- Increasing the investment by existing individuals and organizations.
|
||||
- Increasing the breadth of different individuals and organizations investing
|
||||
in Carbon.
|
||||
|
||||
## Proposal
|
||||
|
||||
We have two primary goals for 2022:
|
||||
|
||||
- Shift the experiment to being public.
|
||||
- Reach the point where the core language design is substantially complete.
|
||||
|
||||
See the
|
||||
[updated roadmap](https://github.com/carbon-language/carbon-lang/pull/1025/files)
|
||||
for more details.
|
||||
|
||||
## Retrospective on 2021
|
||||
|
||||
As we plan for 2022, we should look at how well we did at achieving our
|
||||
[objectives for 2021 and their key results](https://github.com/carbon-language/carbon-lang/blob/9523ac97bf5c3b7e52fa14299c1391c62dd907f5/docs/project/roadmap.md).
|
||||
|
||||
### Broaden core team representation so no organization is >50%
|
||||
|
||||
> Our goal is that no single organization makes up >50% of the core team to
|
||||
> ensure that we are including as broad and representative a set of perspectives
|
||||
> in the evolution of Carbon as possible.
|
||||
|
||||
In 2021, we dissolved the core team, and introduced a set of three leads. Two of
|
||||
those leads represent the same organization. The leads now have more
|
||||
organizational diversity than the core team did at the start of 2021, so this is
|
||||
a partial success. (And, vacuously, no organization makes up any part of the
|
||||
core team any more!)
|
||||
|
||||
In the wider Carbon community, most active participants and nearly all proposals
|
||||
are still from a single organization, but we are seeing significant and
|
||||
increasing contribution outside that organization.
|
||||
|
||||
The spirit of this goal has been retained for 2022, but it has been reformulated
|
||||
to better fit our current organization and governance model, and somewhat
|
||||
reduced in scope. Instead of looking for <50% of the Carbon leadership from any
|
||||
one organization, we're now looking for <50% of active participants from any one
|
||||
organization. In future years, we hope to also reach the point where <50% of the
|
||||
Carbon leads are from any one organization, but that doesn't seem like a
|
||||
realistic goal for 2022.
|
||||
|
||||
### Example ports of C++ libraries to Carbon (100% of woff2, 99% of RE2)
|
||||
|
||||
We did not make much progress on this goal in 2021, in part because we made less
|
||||
progress on the Carbon language design in 2021 than anticipated. It remains
|
||||
important that we do this work, for the same reasons as in 2021: it both
|
||||
measures our progress solidifying Carbon's design and demonstrating the value
|
||||
proposition of Carbon.
|
||||
|
||||
For 2022, as we move towards going public and completing the language design,
|
||||
our expectations for these ports become higher, and we now aim to not only
|
||||
provide the ported example code but also to have a sufficiently complete
|
||||
executable semantics implementation that parts of it can be demonstrated to work
|
||||
correctly.
|
||||
|
||||
### Demo implementation of core features with working examples
|
||||
|
||||
> A core set of Carbon features should be implemented sufficiently to build
|
||||
> working examples of those features and run them successfully.
|
||||
|
||||
The toolchain supports parsing for many basic features, such as functions,
|
||||
variables, operators, and so on, but no type-checking or code generation.
|
||||
|
||||
> Basic benchmarking of the different phases of compilation (lexing, parsing,
|
||||
> etc).
|
||||
|
||||
We have some benchmarks accompanying the toolchain, but the coverage here is
|
||||
incomplete.
|
||||
|
||||
This takes us some of the way to our intended outcome, but there's a lot more to
|
||||
do.
|
||||
|
||||
### Executable semantic specification for core features with test cases
|
||||
|
||||
> This should include both a human readable rendering of the formal semantics as
|
||||
> well as an execution environment to run test cases through those semantics.
|
||||
> [...]
|
||||
|
||||
In the 2021 roadmap, we prioritized completing the demo toolchain implementation
|
||||
over work on executable semantics. We did not end up following that ethos
|
||||
throughout 2021, and the outcome is that most of the implementation work was
|
||||
performed in executable semantics rather than in the toolchain. It would not be
|
||||
unfair to say that executable semantics has ended up as a better model of a demo
|
||||
Carbon implementation than the toolchain.
|
||||
|
||||
Nonetheless, we made great progress here. Executable semantics supports a broad
|
||||
subset of the currently approved Carbon feature set, and some things beyond that
|
||||
feature set. What is less clear is whether our experiment of having a clear and
|
||||
precise formal specification expressed as an implementation that favors clarity
|
||||
of exposition over all else is successful.
|
||||
|
||||
## Rationale based on Carbon's goals
|
||||
|
||||
- [Community and culture](/docs/project/goals.md#community-and-culture)
|
||||
- A roadmap is an important tool for setting community expectations and
|
||||
direction.
|
||||
- Going public is fundamental to the open community we aim to have.
|
||||
- Broadening participation is an essential factor in building a diverse
|
||||
and welcoming community.
|
||||
|
||||
## Alternatives considered
|
||||
Reference in New Issue
Block a user