瀏覽代碼

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>
Richard Smith 4 年之前
父節點
當前提交
a0a4146bcf
共有 2 個文件被更改,包括 209 次插入55 次删除
  1. 67 55
      docs/project/roadmap.md
  2. 142 0
      proposals/p1025.md

+ 67 - 55
docs/project/roadmap.md

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

+ 142 - 0
proposals/p1025.md

@@ -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