Files
carbon-lang/docs
8e8d570571 Proposal: Variadics (#2240)
Proposes a set of core features for declaring and implementing generic
variadic
functions.

A "pack expansion" is a syntactic unit beginning with `...`, which is a
kind of
compile-time loop over sequences called "packs". Packs are initialized
and
referred to using "pack bindings", which are marked with the `each`
keyword at
the point of declaration and the point of use.

The syntax and behavior of a pack expansion depends on its context, and
in some
cases by a keyword following the `...`:

- In a tuple literal expression (such as a function call argument list),
`...`
iteratively evaluates its operand expression, and treats the values as
    successive elements of the tuple.
- `...and` and `...or` iteratively evaluate a boolean expression,
combining
the values using `and` and `or`, and ending the loop early if the
underlying
    operator short-circuits.
-   In a statement context, `...` iteratively executes a statement.
- In a tuple literal pattern (such as a function parameter list), `...`
iteratively matches the elements of the scrutinee tuple. In conjunction
with
    pack bindings, this enables functions to take an arbitrary number of
    arguments.

---------

Co-authored-by: josh11b <josh11b@users.noreply.github.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Co-authored-by: josh11b <15258583+josh11b@users.noreply.github.com>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: Carbon Infra Bot <carbon-external-infra@google.com>
2024-12-11 01:58:40 +00:00
..
2024-12-11 01:58:40 +00:00
2024-08-20 17:53:06 +00:00
2024-12-11 01:58:40 +00:00
2022-07-24 12:37:00 -07:00

Docs

This directory contains current, accepted documentation underpinning Carbon. These documents cover all aspects of Carbon ranging from the project down to detailed designs for specific language features.

If you're trying to learn more about Carbon, we recommend starting at /README.md.

Design

Carbon language's design and rationale are documented in the design/ directory. This documentation is intended to support the following audiences:

  • People who wish to determine whether Carbon would be the right choice for a project compared to other existing languages.
  • People working on the evolution of the Carbon language who wish to understand the rationale and motivation for existing design decisions.
  • People working on a specification or implementation of the Carbon language who need a detailed understanding of the intended design.
  • People writing Carbon code who wish to understand why the language rules are the way they are.

This is in contrast to proposals, which document the individual decisions that led to this design (along with other changes to the Carbon project), including the rationale and alternatives considered.

Project

The project/ directory contains project-related documentation for Carbon, including:

  • goals, and the principles and roadmap derived from those goals,
  • how the project works, and
  • how to contribute.

Guides

The guides/ directory contains to-be-written end-user documentation for developers writing programs in Carbon.

Spec

The spec/ directory contains the to-be-written formal specification of the Carbon language. This is for implementers of compilers or other tooling. This is intended to complement the interactive language explorer tool.