Record coercion can turn an immutable field into a mutable one
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 57/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- ocaml
- Domaine
- compilers
Piste de recherche
Start with Record_coercion.check_record_fields in compiler/ml/record_coercion.ml and read how it checks field names, optionality, runtime names, and field type subtyping. Trace the coercion checks for immutable and mutable fields, then add coverage for the shown ro to rw case and for fields mutable on both sides. Done when the first coercion is rejected and the mutable-to-mutable case requires equal field types.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What happens
:> between record types accepts a target whose field is mutable when the source's field is not:
type ro = {x: float}
type rw = {mutable x: float}
let toRw = (r: ro) => (r :> rw)
compiles on master (1a49d918e) to
function toRw(r) {
return r;
}
So a value typed ro, whose x the type system treats as immutable, can be written through the coerced view:
let r: ro = {x: 0.}
let w = (r :> rw)
w.x = 1. // compiles; r.x is now 1.
Where
Record_coercion.check_record_fields (compiler/ml/record_coercion.ml) compares field names, optionality and runtime names, and passes the field types on for subtyping; it does not compare mutability.
Expected
A coercion should not grant write access the source does not have: a mutable target field requires a mutable source field. Where both are mutable, the field type is read and written, so it has to be equal (invariant) rather than a subtype.
- Langage dominant
- OCaml
- Étoiles
- 7.5k
- Forks
- 484
- Merge moyen
- 20 h 19 min
- PR mergées (30 j)
- 242
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de rescript-lang/rescript
-
Record coercion can construct a private record from outside its modulePeut-être pris @cknitt l’a pris aujourd’hui. Ouverte
Difficulté 4/5 1-2 jours Accessibilité débutants 52/100
rescript-lang/rescript#9124 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 56/100
rescript-lang/rescript#9123 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 1-2 jours Accessibilité débutants 55/100
rescript-lang/rescript#9122 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 15/100
rescript-lang/rescript#9109 ·
Les mainteneurs répondent en général sous 1 jour
-
Formatter: five cases where comments and doc comments are placed wronglyPeut-être pris @cknitt l’a pris il y a 1 jour. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
rescript-lang/rescript#9107 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de rescript-lang/rescript
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
CanadaHonk/porffor#426 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
compiler-rt:asan llvm:transforms
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
llvm/llvm-project#236682 ·
Les mainteneurs répondent en général sous 1 jour
-
Lexer: Turbopack magic comments are not classifiedPeut-être pris @Aschenbath l’a pris aujourd’hui. OuverteA-lexer
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
oxc-project/oxc#28320 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour