react/compiler
Mike Vitousek 1e68a0a3ae [compiler] Improve handling of refs
Summary:
This change expands our handling of refs to build an understanding of nested refs within objects and functions that may return refs. It builds a special-purpose type system within the ref analysis that gives a very lightweight structural type to objects and array expressions (merging the types of all their members), and then propagating those types throughout the analysis (e.g., if `ref` has type `Ref`, then `{ x: ref }` and `[ref]` have type `Structural(value=Ref)` and `{x: ref}.anything` and `[ref][anything]` have type `Ref`).

This allows us to support structures that contain refs, and functions that operate over them, being created and passed around during rendering without at runtime accessing a ref value.

The analysis here uses a fixpoint to allow types to be fully propagated through the system, and we defend against diverging by widening the type of a variable if it could grow infinitely: so, in something like
```
let x = ref;
while (condition) {
  x = [x]
}
```
we end up giving `x` the type `Structural(value=Ref)`.

ghstack-source-id: afb0b0cb01
Pull Request resolved: https://github.com/facebook/react/pull/30902
2024-09-16 10:53:32 -07:00
..
apps/playground [compiler][playground] Fix displayed naming of outlined functions 2024-09-07 17:50:19 -07:00
crates Fix rust lints 2024-08-06 14:48:32 -04:00
docs Punctuation & correcting spelling mistakes (#30592) 2024-08-09 14:53:53 -07:00
packages [compiler] Improve handling of refs 2024-09-16 10:53:32 -07:00
scripts [compiler] Publish to latest tag 2024-08-12 14:41:11 -04:00
.eslintrc.js [compiler:codegen] Wrap non-ascii characters in JsxExpressionContainer 2024-06-21 10:08:15 -04:00
.gitignore [.gitignore] Add bundle script 2024-04-16 14:41:13 +01:00
Cargo.lock Bump rustix from 0.37.22 to 0.37.27 in /compiler (#29173) 2024-05-20 12:02:35 +01:00
Cargo.toml Update references to Forget to React Compiler 2024-05-02 14:28:06 -07:00
package.json [compiler] Refactor release script 2024-08-06 14:48:33 -04:00
README.md Update readme and other docs 2024-05-06 14:53:47 -07:00
rust-toolchain.toml
rustfmt.toml
yarn.lock [compiler] Refactor release script 2024-08-06 14:48:33 -04:00

React Compiler

React Compiler is a compiler that optimizes React applications, ensuring that only the minimal parts of components and hooks will re-render when state changes. The compiler also validates that components and hooks follow the Rules of React.

More information about the design and architecture of the compiler are covered in the Design Goals.

More information about developing the compiler itself is covered in the Development Guide.