Skip to content

Commit

Permalink
Roadmap updates for 2022 (#1025)
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
zygoloid and jonmeow authored Mar 16, 2022
1 parent 35a0bf1 commit a0a4146
Show file tree
Hide file tree
Showing 2 changed files with 209 additions and 55 deletions.
122 changes: 67 additions & 55 deletions docs/project/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

### Completing the language design

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.

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

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.
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 also need to identify key missing participants and onboard them
throughout 2021.
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 2021
## 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 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.

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.
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))

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand All @@ -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

Expand Down
142 changes: 142 additions & 0 deletions proposals/p1025.md
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit a0a4146

Please sign in to comment.