- A parameter binding can be marked `ref` instead of `var` or the default. It will bind to reference argument expressions in the caller and produces a reference expression in the callee. - Unlike pointers, a `ref` binding can't be rebound to a different object. - This replaces `addr`, and is not restricted to the `self` parameter. - A `ref` binding, like a value binding, can't be used in fields of classes or structs. - When calling functions, arguments to non-`self` `ref` parameters are also marked with `ref`. - The return of a function can optionally be marked `ref`, `val`, or `var`. These control the category of the call expression invoking the function, and how the return expression is returned. - These may be mixed for functions returning tuple or struct forms. - The address of a `ref` binding is `nocapture` and `noalias`. - We mark parameters of a function that may be referenced by the return value with `bound`. --------- Co-authored-by: Josh L <josh11b@users.noreply.github.com> Co-authored-by: Geoff Romer <gromer@google.com> Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
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 toolchain.