Browse Source

Roadmap for 2023 and retrospective for 2022 (#2551)

We propose a roadmap for 2023 focus on:

-   Progressing towards a concrete goal of an MVP / 0.1 language.
-   Engaging more broadly and deeply with the C++ community.

We also reflect on our overly ambitious
[roadmap for 2022](https://github.com/carbon-language/carbon-lang/blob/3d90a85f2439bb74b71a553c5017012369ec0f63/docs/project/roadmap.md)
and how the year went.
Chandler Carruth 3 years ago
parent
commit
9faf87e171
3 changed files with 227 additions and 149 deletions
  1. 2 2
      README.md
  2. 91 147
      docs/project/roadmap.md
  3. 134 0
      proposals/p2551.md

+ 2 - 2
README.md

@@ -151,9 +151,9 @@ and the language:
     Carbon. We call this the [Carbon Explorer](/explorer/).
 
 If you're interested in contributing, we would love help
-[completing the 0.1 language designs](/docs/project/roadmap.md#completing-the-language-design),
+[completing the 0.1 language designs](/docs/project/roadmap.md#complete-design-coverage-of-the-01-languages-necessary-features),
 and
-[completing the Carbon Explorer implementation of this design](/docs/project/roadmap.md#demo-implementation-of-core-features-with-working-examples).
+[completing the Carbon Explorer implementation of this design](/docs/project/roadmap.md#complete-01-language-implementation-coverage-in-the-carbon-explorer).
 We are also currently working to get more broad feedback and participation from
 the C++ community. Beyond that, we plan to prioritize C++ interoperability and a
 realistic toolchain that implements the 0.1 language and can be used to evaluate

+ 91 - 147
docs/project/roadmap.md

@@ -10,182 +10,126 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
 ## Table of contents
 
--   [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)
-    -   [Carbon explorer implementation of core features with test cases](#carbon-explorer-implementation-of-core-features-with-test-cases)
--   [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)
+-   [Objective for 2023: get ready to evaluate the Carbon Language.](#objective-for-2023-get-ready-to-evaluate-the-carbon-language)
+-   [Key results in 2023](#key-results-in-2023)
+    -   [A concrete definition of our Minimum Viable Product for evaluation, the 0.1 language](#a-concrete-definition-of-our-minimum-viable-product-for-evaluation-the-01-language)
+    -   [Complete design coverage of the 0.1 language's necessary features](#complete-design-coverage-of-the-01-languages-necessary-features)
+    -   [Complete 0.1 language implementation coverage in the Carbon Explorer](#complete-01-language-implementation-coverage-in-the-carbon-explorer)
+    -   [A toolchain that can build a minimal mixed C++ and Carbon program](#a-toolchain-that-can-build-a-minimal-mixed-c-and-carbon-program)
+    -   [Give talks at 2-3 conferences covering 3-4 different Carbon topics](#give-talks-at-2-3-conferences-covering-3-4-different-carbon-topics)
+-   [Beyond 2023](#beyond-2023)
+    -   [Potential 2024 goals: ship a working 0.1 language for evaluation](#potential-2024-goals-ship-a-working-01-language-for-evaluation)
+    -   [Potential 2025-2026 goals: finish 0.2 language, stop experimenting](#potential-2025-2026-goals-finish-02-language-stop-experimenting)
+    -   [Potential goals _beyond_ 2026: ship 1.0 language & organization](#potential-goals-beyond-2026-ship-10-language--organization)
 
 <!-- tocstop -->
 
-## Objective for 2022: make Carbon public, finish 0.1 language
+## Objective for 2023: get ready to evaluate the Carbon Language.
 
-We have two primary goals for 2022:
+Our focus throughout 2023 will be to get the Carbon Language and project ready
+for serious evaluation of the experiment. There are two aspects to this
+evaluation:
 
--   Shift the experiment to being public.
--   Reach the point where the core language design is substantially complete.
+1. The language and tools need to be complete enough to evaluate.
+2. The users and communities we are targeting need both context and awareness of
+   the technical ideas and design principles on which Carbon is built.
 
-### Completing the language design
+## Key results in 2023
 
-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.
+### A concrete definition of our Minimum Viable Product for evaluation, the 0.1 language
 
-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
-Carbon explorer. The toolchain should be able to parse the core language design,
-with some support for name lookup and type-checking.
+While we have talked about our 0.1 language, or our Minimum Viable Product (MVP)
+for evaluation purposes, we need to pin down exactly what this includes. We need
+concrete milestones that need to be reached for us to have confidence in
+potential users and communities being able to evaluate Carbon as a successor to
+C++.
 
-We should have begun writing non-trivial portions of the standard library, such
-as common higher-level data structures and algorithms.
+We expect this to include a reasonably precise set of requirements across:
 
-### Going public
+-   Necessary language features
+-   Nice-to-have features
+-   Features can we omit and reasonably expect to not obstruct credible
+    evaluation
+-   Implementation coverage of those features in the Carbon Explorer to validate
+    the design
+-   Implementation coverage of those features in the toolchain
+-   Quality of implementation in the toolchain, both in general and for specific
+    features
+-   Necessary documentation, strategy, or other supporting material
 
-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 expect this to also include at least enough of Carbon's features and C++
+interop to support [our basic example](/docs/images/snippets.md#mixed).
 
-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.
+Note that we don't expect to finish the 0.1 language work in 2023. Our goal is
+to make sufficient progress that we can complete it in 2024, but there are still
+many things that can go wrong and cause significant delays.
 
-## Key results in 2022
+### Complete design coverage of the 0.1 language's necessary features
 
-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.
+This year we plan to finish the design of the necessary feature-set that we
+define above for the 0.1 language.
 
-### Broaden participation so no organization is >50%
+### Complete 0.1 language implementation coverage in the Carbon Explorer
 
-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.
+We expect to complete the level of Carbon Explorer validation of the design
+needed for 0.1 in 2023 so that we have high confidence in the design's cohesion
+and behavior.
 
-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 participants.
+### A toolchain that can build a minimal mixed C++ and Carbon program
 
-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:
+Our end goal is to compile a minimal but non-trivial example of bi-directionally
+mixing C++ and Carbon code such as our main
+[example](https://github.com/carbon-language/carbon-lang/blob/trunk/docs/images/snippets.md#mixed)
+and run it successfully. However, completing everything involved in this example
+isn't expected to be realistic by the end of the year. We expect to work towards
+this example and in rough priority order across the following interop features
+and all the Carbon features they depend on:
 
--   Pull requests authored and reviewed, including proposals, code changes, and
-    documentation changes.
--   Contribution to discussions, including Discord, teleconferences, and GitHub
-    issues.
+-   Calling C++ functions from Carbon.
+-   Importing concrete C++ types as Carbon types.
+-   Using Carbon generics with a C++ type in Carbon.
+-   (stretch) Calling Carbon functions from C++.
+-   (stretch) Importing concrete Carbon types into C++.
 
-### Example ports of C++ libraries to Carbon (100% of [woff2](https://github.com/google/woff2), 99% of [RE2](https://github.com/google/re2))
+### Give talks at 2-3 conferences covering 3-4 different Carbon topics
 
-The first part of this result is that all of the woff2 library is ported to
-Carbon in a way that exports the same C++ API. There should be no gaps in this
-port given that woff2 has a very simple C++ API and uses few C++ language
-features.
+We want to engage both more broadly and in more depth with the C++ community as
+the Carbon 0.1 language becomes increasingly concrete. This should help set the
+stage for evaluations of Carbon when 0.1 is finished and available. To broaden
+our engagement, we want to give talks at 2-3 conferences spanning 2-3 geographic
+regions.
 
-RE2 is a larger library using significantly more language features. For that
-part of the result, fewer than 1% of its C++ lines of code should be missing a
-semantically meaningful port into Carbon code.
+We also want these talks to provide the C++ community a deeper understanding of
+the Carbon language and project, spanning 3-4 different topics. For example, we
+might share the details of the language design, governance, and implementation.
 
-An important nuance of this goal is that it doesn't include building a complete
-Carbon standard library beyond the most basic necessary types. The intent is to
-exercise and show the interoperability layers of Carbon by re-using the C++
-standard library in many cases and exporting a compatible C++ API to both woff2
-and RE2's current API.
-
-While this key result isn't directly tied to the main objective, we believe it
-represents a critical milestone for being able to achieve this objective. It
-both measures our progress solidifying Carbon's design and demonstrating the
-value proposition of Carbon.
-
-Note that both woff2 and RE2 libraries are chosen somewhat arbitrarily and could
-easily be replaced with a different, more effective libraries to achieve the
-fundamental result of demonstrating a compelling body of cohesive design and the
-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. We should be able to demonstrate that self-contained portions of
-the ported code work correctly using Carbon explorer.
-
-### 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. These features
-could include:
-
--   User-defined types, functions, namespaces, packages, and importing.
--   Basic generic functions and types using interfaces.
--   Initial/simple implementation of safety checking including at least bounds
-    checking, simple lifetime checking, and simple initialization checking.
--   Sum types sufficient for optional-types to model nullable pointers.
--   Pattern matching sufficient for basic function overloading on types and
-    arity, as well as unwrapping of optional types for guard statements.
-
-Stretch goals if we can hit the above:
-
--   Instantiating a basic C++ template through interop layer for use within
-    Carbon.
-
-The demo implementation should also provide demos outside of specific language
-features including:
-
--   Basic benchmarking of the different phases of compilation (lexing, parsing,
-    etc).
--   A basic REPL command line.
-
-Stretch goals if we can hit the above:
-
--   Automatic code formatter on top of the implementation infrastructure.
--   A [compiler explorer](https://compiler-explorer.com/) fork with REPL
-    integrated.
-
-Benchmarking at this stage isn't expected to include extensive optimization.
-Instead, it should focus on letting us track large/high-level impact on
-different phases as they are developed or features are added. They may also help
-illustrate initial high-level performance characteristics of the implementation,
-but the long term focus should be on end-to-end user metrics.
-
-Automatic code formatting could be achieved many ways, but it seems useful to
-ensure the language and implementation both support use cases like formatting.
-
-### Carbon explorer implementation of 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. The
-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 Carbon explorer.
-
-## Beyond 2022
+## Beyond 2023
 
 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 2022 feed into
+in order to illustrate how the goals and priorities we have in 2023 feed into
 subsequent years.
 
-### Potential 2023 goals: finish 0.2 language, stop experimenting
+### Potential 2024 goals: ship a working 0.1 language for evaluation
+
+As we adjust our schedule and roadmap to reflect the realistic rate of progress,
+the _earliest_ it seems feasible to have everything we need to evaluate the 0.1
+language is 2024. However, this is just a lower bound. We may discover as we
+progress things that further push out the schedule here. That is the nature of
+an experimental project like Carbon.
+
+We expect that once we reach this milestone the community will be able to start
+realistically evaluating Carbon as a C++ successor language. Of course, this
+evaluation will take some time.
+
+### Potential 2025-2026 goals: finish 0.2 language, stop experimenting
 
 Once Carbon is moving quickly and getting public feedback, we should be able to
 conclude the experiment. We should know if this is the right direction for
 moving C++ forward for a large enough portion of the industry and community, and
 whether the value proposition of this direction outweighs the cost.
 
-However, there will still be a _lot_ of work to make Carbon into a production
+However, there will still be a lot of work left to make Carbon into a production
 quality language, even if the experiment concludes successfully.
 
 Some concrete goals that might show up in this time frame:
@@ -201,15 +145,15 @@ Some concrete goals that might show up in this time frame:
 -   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
+### Potential goals _beyond_ 2026: ship 1.0 language & organization
 
-A major milestone will be the first version of a production language. We should
-also have finished transferring all governance of Carbon to an independent open
+A major milestone will be the first version of a production language. We also
+plan to finish transferring all governance of Carbon to an independent open
 source organization at that point. However, we won't know what a more realistic
 or clear schedule for these milestones will be until we get closer.
 
-Another important aspect of our goals in this time frame is expanding them to
-encompass the broader ecosystem of the language:
+Goals in this time frame will expand to encompass the broader ecosystem of the
+language:
 
 -   End-to-end developer tooling and experience.
 -   Teaching and training material.

+ 134 - 0
proposals/p2551.md

@@ -0,0 +1,134 @@
+# Roadmap for 2023 and retrospective 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/2551)
+
+<!-- toc -->
+
+## Table of contents
+
+-   [Abstract](#abstract)
+-   [Proposal](#proposal)
+-   [Retrospective on 2022](#retrospective-on-2022)
+    -   [Broaden participation so no organization >50%](#broaden-participation-so-no-organization-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)
+    -   [Carbon explorer implementation of core features with test cases](#carbon-explorer-implementation-of-core-features-with-test-cases)
+    -   [Demo implementation of core features with working examples](#demo-implementation-of-core-features-with-working-examples)
+
+<!-- tocstop -->
+
+## Abstract
+
+We propose a roadmap for 2023 focus on:
+
+-   Progressing towards a concrete goal of an MVP / 0.1 language.
+-   Engaging more broadly and deeply with the C++ community.
+
+We also reflect on our overly ambitious
+[roadmap for 2022](https://github.com/carbon-language/carbon-lang/blob/3d90a85f2439bb74b71a553c5017012369ec0f63/docs/project/roadmap.md)
+and how the year went.
+
+## Proposal
+
+Our primary goals for 2023 are:
+
+-   Define a concrete set of milestones for our Minimum Viable Product or MVP.
+    -   Because Carbon is an experiment, our MVP is focused on the _evaluation_
+        of the Carbon language, not any other usage.
+    -   We consider this MVP-for-evaluation our 0.1 language.
+-   Complete all of the 0.1 design and feature milestones.
+-   Complete as many of the 0.1 implementation milestones as we can.
+    -   Realistically, we don't expect to finish all of them in 2023.
+-   Begin actively engaging and sharing Carbon's design and ideas with the C++
+    community.
+
+See our [updated roadmap](/docs/project/roadmap.md) for more details and how we
+expect to measure our success.
+
+## Retrospective on 2022
+
+Our
+[roadmap for 2022](https://github.com/carbon-language/carbon-lang/blob/3d90a85f2439bb74b71a553c5017012369ec0f63/docs/project/roadmap.md)
+was in retrospect wildly optimistic. We're sorry about that, and are going to
+work to set more realistic goals and milestones going forward. That said, we
+still achieved a tremendous amount and it's useful to look in some detail at how
+everything went.
+
+We had two primary goals for 2022 and somewhat split the difference between
+them:
+
+-   Make the Carbon experiment public: **100%** as we
+    [announced](https://youtu.be/omrY53kbVoA) Carbon publicly in July at
+    [CppNorth](https://cppnorth.ca/)!
+-   Complete the language design: lots of progress, but nowhere near the finish
+    line here. This ended up also being poorly defined in some cases, which
+    we're going to try to address going forward.
+
+We can also measure the key results we had in mind with more precision.
+
+### Broaden participation so no organization >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. 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 participants.
+
+The simplest participation measures are from commits to the repository over 2022
+which shows 92 contributors over the year, and definitely fewer than 46 of those
+from a single organization. But it's hard to consider a single typo fix in July
+as being an _active_ participant. Some other measures:
+
+-   During the last quarter of 2022 we had 14 authors contributing to patches,
+    and likely the largest single organization was only 5 of them.
+-   We had 171 issue authors this year, and 43 filing more than one issue. Well
+    below 50% from any single organization.
+-   We had 258 issue commenters, and 64 making over 4 comments over the course
+    of the year, both _far_ below 50% from a single organization.
+-   Looking at the weekly meetings in August, September, and October, we had a
+    bit
+
+Largely, we feel we hit this goal solidly. However, we still see specific areas
+where we need to broaden participation, for example:
+
+-   Language proposal authors (as opposed to other kinds of PRs and commits).
+-   Design discussion and meeting participation.
+
+Some of this will likely need Carbon to make substantial progress beyond
+experimentation in order to have more organizations devote the significant
+resources that can be necessary for more in-depth participation.
+
+### Example ports of C++ libraries to Carbon (100% of woff2, 99% of RE2)
+
+We ended up de-prioritizing this entirely so we could focus on the design and
+moving the project public.
+
+### Carbon explorer implementation of core features with test cases
+
+Like the top-level goals for 2022, this specific result was much too ambitious.
+However, we have made tremendous progress on the design and the Carbon Explorer.
+For example, we have a
+[detailed mapping](https://github.com/carbon-language/carbon-lang/wiki/Are-we-explorer-yet%3F)
+of the implementation status of the designed features, with approximately 50% of
+these implemented.
+
+The Carbon Explorer is also now integrated into the amazing
+[compiler explorer](https://carbon.godbolt.org/)! This largely addresses the
+core of the "repl" and experimentation access goals, and our focus has otherwise
+been on completing the implementation.
+
+### Demo implementation of core features with working examples
+
+We ended up prioritizing the Carbon Explorer over the toolchain in 2022 in order
+to have an easier path to a minimal demo implementation.
+
+However, we did begin fleshing out more of the toolchain implementation that
+will eventually be used to compile Carbon into working binaries, and it has
+started to provide the first pieces of semantic analysis along with a much
+improved parser for Carbon.