-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Const Generics #6860
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Labels
compiler
General compiler. Should eventually become more specific as the issue is triaged
epic
An epic is a high-level master issue for large pieces of work.
language feature
Core language features visible to end users
tracking-issue
Tracking issue for experimental Sway features
Comments
8 tasks
tritao
pushed a commit
that referenced
this issue
Feb 11, 2025
…6901) ## Description This PR is part of #6860. In future PRs, we will need a way to declare array lengths that are not literals. This PR enables this by postponing the length resolution to the `type-check` phase. ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers. --------- Co-authored-by: Joshua Batty <joshpbatty@gmail.com>
8 tasks
IGI-111
added a commit
that referenced
this issue
Feb 17, 2025
## Description This PR is part of #6860, and it is officially introducing the `const_generic` feature toggle. For the moment, it is parsing syntax such as `const N: u64` and it is returning an error explaining that the feature is off; on the other hand, it is also returning an error saying that const generics are still not supported in impl traits when the feature is on. Future PRs will replicate this error in all possible places. Nothing else is implemented and it is reserved for future PRs. ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers. --------- Co-authored-by: IGI-111 <igi-111@protonmail.com>
xunilrj
added a commit
that referenced
this issue
Mar 7, 2025
## Description This PR is part of #6860. It implements "impl traits" for "const generics", which means syntax such as: ```sway trait A { fn my_len(self) -> u64; } impl<T, const N: u64> A for [T; N] { fn my_len(self) -> u64 { N } } ``` This also opens the space for simplifying our current implementation of `AbiEncode` for arrays. Today we implement for each size, which limits us to a specific size. With this one can have just one "impl item", and support arrays of arbitrary size. Both implementations will coexist in `codec.sw` until we stabilize "const generics". ```sway #[cfg(experimental_const_generics = true)] impl<T, const N: u64> AbiEncode for [T; N] where T: AbiEncode, { fn abi_encode(self, buffer: Buffer) -> Buffer { .... } } #[cfg(experimental_const_generics = false)] impl<T> AbiEncode for [T; 0] where T: AbiEncode, { fn abi_encode(self, buffer: Buffer) -> Buffer { ... } } ``` ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
8 tasks
tritao
pushed a commit
that referenced
this issue
Mar 20, 2025
## Description This is part of #6860. This completes abi encoding for arrays. Allowing arrays of any size as inputs and outputs in predicates/scripts/contracts. This PR also allows arrays to be initialized with "const generics" such as: ```sway #[cfg(experimental_const_generics = true)] impl<T, const N: u64> AbiDecode for [T; N] where T: AbiDecode, { fn abi_decode(ref mut buffer: BufferReader) -> [T; N] { let first: T = buffer.decode::<T>(); let mut array = [first; N]; // <-------------------- This can used now ... array } } ```` ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
8 tasks
xunilrj
added a commit
that referenced
this issue
Mar 25, 2025
## Description This PR is part of #6860. It continues the implementation of more `std` library "traits" for arrays. It also fixes a small error when formatting "const generics declarations". ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
zees-dev
pushed a commit
that referenced
this issue
Apr 1, 2025
## Description This is part of #6860. This completes abi encoding for arrays. Allowing arrays of any size as inputs and outputs in predicates/scripts/contracts. This PR also allows arrays to be initialized with "const generics" such as: ```sway #[cfg(experimental_const_generics = true)] impl<T, const N: u64> AbiDecode for [T; N] where T: AbiDecode, { fn abi_decode(ref mut buffer: BufferReader) -> [T; N] { let first: T = buffer.decode::<T>(); let mut array = [first; N]; // <-------------------- This can used now ... array } } ```` ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
zees-dev
pushed a commit
that referenced
this issue
Apr 1, 2025
## Description This PR is part of #6860. It continues the implementation of more `std` library "traits" for arrays. It also fixes a small error when formatting "const generics declarations". ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
xunilrj
added a commit
that referenced
this issue
Apr 29, 2025
## Description Part of #6860. This PR enables code like below to be written now. This will allow the implementation of `iter()` for arrays. ```sway struct S<T, const N: u64> {} impl<T, const N: u64> S<T, N> { pub fn len_xxx(self) -> u64 { N } } ``` Limited to `structs` now. `enum` will be implemented in a future PR. ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [x] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers. --------- Co-authored-by: IGI-111 <igi-111@protonmail.com>
This was referenced May 9, 2025
JoshuaBatty
pushed a commit
that referenced
this issue
May 23, 2025
## Description This PR is part of #6860 and allows standalone functions to have "const generics" like the code below: ```sway fn return_n<const NNN: u64>() -> u64 { NNN } ``` ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
compiler
General compiler. Should eventually become more specific as the issue is triaged
epic
An epic is a high-level master issue for large pieces of work.
language feature
Core language features visible to end users
tracking-issue
Tracking issue for experimental Sway features
Uh oh!
There was an error while loading. Please reload this page.
This PR is the tracking-issue for the
const_generics
feature.For more details go to: FuelLabs/sway-rfcs#42
impl
trait for arrays (impl
trait for "const generics" #6946)impl
trait for string arraysstructs
(Support for const generics in structs #7076)enums
(const-generics
for enums #7163)fns
(const generics for standalone fns #7175)AbiEncode
andAbiDecode
for arrays and string arrays[T; N]
to be created (Implement array repeat without repeating item at the AST/CST trees #6901)[T; N]
to be created unitializedimpl
trait for "const generics" #6946)const_generics
#7008)Eq
,Hash
and other core and std traits for arrays and string arrays (impl PartialEq, Eq, Hash, Clone for array #7037)const_generics
enabled by defaultThe text was updated successfully, but these errors were encountered: