|
1 | 1 | # Implementation plan |
2 | 2 |
|
3 | | -- [ ] Disable ShadowRef/unsafe_ and see what breaks, ideally remove it |
| 3 | +- [x] Disable ShadowRef/unsafe_ and see what breaks, ideally remove it (will |
| 4 | + merge later as it'll break a few patterns) |
4 | 5 | - [ ] Update Cell API types to already unify them |
5 | | - - [ ] Create an `AnyCell<>` type with a symbol based brand, with the value be |
6 | | - `Record<string, boolean>` |
7 | | - - [ ] Factor out parts of the cell interfaces along reading, writing, .send |
| 6 | + - [x] Create an `BrandedCell<>` type with a symbol based brand, with the value |
| 7 | + be `string` |
| 8 | + - [x] Factor out parts of the cell interfaces along reading, writing, .send |
8 | 9 | (for stream-like) and derives (which is currently just .map) |
9 | | - - [ ] Define `OpaqueCell<>`, `Cell<>` and `Stream<>` by using these factored |
10 | | - out parts, combined with the brand set to `{ opaque: true, read: false, |
11 | | - write: false, stream: false }` for `OpaqueRef`, `{ opaque: false, read: |
12 | | - true, write: true, stream: true }` for `Cell`, and `{ opaque: false, read: |
13 | | - false, write: false, stream: true }` for `Stream`. |
14 | | - - [ ] Add `ComparableCell<>` that is all `false` above. |
15 | | - - [ ] Add `ReadonlyCell` and `WriteonlyCell`. |
16 | | - - [ ] Make `OpaqueRef` a variant of `OpaqueCell` with the current proxy |
| 10 | + - [x] Define `OpaqueCell<>`, `Cell<>` and `Stream<>` by using these factored |
| 11 | + out parts. |
| 12 | + - [x] Add `ComparableCell<>`. |
| 13 | + - [x] Add `ReadonlyCell` and `WriteonlyCell`. |
| 14 | + - [x] Make `OpaqueRef` a variant of `OpaqueCell` with the current proxy |
17 | 15 | behavior, i.e. each key is an `OpaqueRef` again. That's just for now, until |
18 | 16 | the AST does a .key transformation under the hood. |
19 | | - - [ ] Update `CellLike` to be based on `AnyCell` but allow nesting. |
| 17 | + - [x] Update `CellLike` to be based on `BrandedCell` but allow nesting. |
20 | 18 | - [ ] `Opaque<T>` accepts `T` or any `CellLike<T>` at any nesting level |
21 | 19 | - [ ] Simplify most wrap/unwrap types to use `CellLike`. We need |
22 | 20 | - [ ] "Accept any T where any sub part of T can be wrapped in one or more |
23 | | - `AnyCell`" (for inputs to node factories) |
24 | | - - [ ] "Strip any `AnyCell` from T and then wrap it in OpaqueRef<>" (for |
| 21 | + `BrandedCell`" (for inputs to node factories) |
| 22 | + - [ ] "Strip any `BrandedCell` from T and then wrap it in OpaqueRef<>" (for |
25 | 23 | outputs of node factories, where T is the output of the inner function) |
26 | 24 | - [ ] Make passing the output of the second into the first work. Tricky |
27 | 25 | because we're doing almost opposite expansions on the type. |
|
0 commit comments