leo/docs/rfc/008-built-in-declarations.md

53 lines
2.3 KiB
Markdown
Raw Normal View History

# Leo RFC 008: Built-in Declarations
## Authors
The Aleo Team.
## Status
DRAFT
2021-09-07 13:58:28 +03:00
## Summary
2021-09-07 13:58:28 +03:00
This RFC proposes a framework for making certain (top-level) declarations (e.g. type aliases) available in every Leo program without the need to write those declarations explicitly. These may be hardwired into the language or provided by standard libraries/packages; in the latter case, the libraries may be implicitly imported or required to be explicitly imported.
2021-09-07 13:58:28 +03:00
## Motivation
It is common for programming languages to provide predefined types, functions, etc.
2021-09-07 13:58:28 +03:00
that can be readily used in programs. The initial motivation for this in Leo was to have a type alias `string` for character arrays of unspecified sizes (array types of unspecified sizes and type aliases are discussed in separate RFCs), but the feature is clearly more general.
2021-09-07 13:58:28 +03:00
## Design
2021-09-07 19:24:00 +03:00
Leo supports five kinds of top-level declarations:
2021-09-07 13:58:28 +03:00
- Import declarations.
- Function declarations.
- Circuit type declarations.
- Global constant declarations.
- Type alias declarations. (Proposed in a separate RFC.)
Leaving import declarations aside for the moment since they are "meta" in some sense
(as they bring in names of entities declared elsewhere),
2021-09-07 13:58:28 +03:00
it may make sense for any of the four kinds of declarations above to have built-in instances, i.e., we could have some built-in functions, circuit types, global constants, and type aliases. These features are why this RFC talks of built-in declarations, more broadly than just built-in type aliases that inspired it.
2021-09-10 16:50:01 +03:00
The built-in status of the envisioned declarations will be done through explicitly declared standard library(stdlib) files. Then these stdlib files must expressly be imported, except the files found in stdlib/prelude/*. The ones found in the prelude are features determined to be helpful enough in standard programs and are auto-imported.
2021-09-07 13:58:28 +03:00
## Drawbacks
This does not seem to bring any drawbacks.
2021-09-07 13:58:28 +03:00
## Effect on Ecosystem
2021-09-07 19:24:00 +03:00
This change may interact with libraries and packages in some way.
2021-09-07 13:58:28 +03:00
But it should not be much different from standard libraries/packages.
2021-09-07 13:58:28 +03:00
## Alternatives
2021-09-07 13:58:28 +03:00
Some alternative approaches are:
2021-09-10 16:50:01 +03:00
1. Having all stdlib imports auto included.
2. Require that all stdlib imports are explicitly imported.
2021-09-10 16:50:01 +03:00
The differences between the two above approaches and the chosen one are just how many imports are imported explicitly.