From 528969f101c74da33eb465a7899fefe21f7be6be Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Tue, 30 Jan 2024 23:02:26 +0100 Subject: [PATCH] Add an RFC for `Const` from shape-castable. --- text/0042-const-from-shape-castable.md | 52 ++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 text/0042-const-from-shape-castable.md diff --git a/text/0042-const-from-shape-castable.md b/text/0042-const-from-shape-castable.md new file mode 100644 index 0000000..230ec16 --- /dev/null +++ b/text/0042-const-from-shape-castable.md @@ -0,0 +1,52 @@ +- Start Date: (fill me in with today's date, YYYY-MM-DD) +- RFC PR: [amaranth-lang/rfcs#42](https://github.com/amaranth-lang/rfcs/pull/42) +- Amaranth Issue: [amaranth-lang/amaranth#0000](https://github.com/amaranth-lang/amaranth/issues/0000) + +# `Const` from shape-castable + +## Summary +[summary]: #summary + +Allow passing a shape-castable to `Const`. + +## Motivation +[motivation]: #motivation + +We currently have two incompatible syntaxes for making a constant, depending on whether it's made from a `Shape` or a shape-castable. +The former uses `Const(value, shape)`, while the latter requires `shape.const(value)`. + +Making `Const` accept shape-castables means we'll have a syntax that works for all shape-likes, reducing the need to special case for shape-castables. + +## Guide- and reference-level explanation +[guide-level-explanation]: #guide-level-explanation + +`Const(value, shape)` checks whether `shape` is a shape-castable and returns `shape.const(value)` when this is the case. + +## Drawbacks +[drawbacks]: #drawbacks + +- A `Const()` constructor sometimes returning non-`Const` objects can be confusing. + - `Signal()` already behaves this way. + +## Rationale and alternatives +[rationale-and-alternatives]: #rationale-and-alternatives + +- This is consistent with how `Signal()` handles shape-castables. + +Alternatives: +- Do not do this. Require code that makes constants from a passed shape-like to check whether it got passed a shape-castable or not and pick the appropriate syntax. + +## Prior art +[prior-art]: #prior-art + +[RFC #15](0015-lifting-shape-castables.md) added the equivalent behavior to `Signal()`. + +## Unresolved questions +[unresolved-questions]: #unresolved-questions + +None. + +## Future possibilities +[future-possibilities]: #future-possibilities + +None.