array()'s cached string representation can go out of sync
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 25/100
Rechercherichtung
Beginne damit, den Cache für die String-Darstellung von array() und das Verhalten beim Markieren übergeordneter Objekte als dirty anhand der beiden Reproduktionsbeispiele im Issue nachzuverfolgen. Vergleiche die gecachte Ausgabe nach einer Mutation mit dem zugrunde liegenden Array und den veränderlichen primitiven Werten. Fertig ist die Aufgabe, wenn wiederholte Nachrichten keine veralteten Darstellungen mehr zurückgeben und das gewählte Caching-Verhalten durch Tests abgedeckt ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
The cache used for array() its string representation runs out of sync with the actual array data in the following examples:
@a = array(1);
@b = array(@a);
@c = array(@a);
msg(@b); // Caching happens here, result is `{{1}}`.
msg(@c); // Caching happens here, result is `{{1}}`.
@a[0] = 2; // The array marks its last parent's cache as dirty, but not its other parent.
msg(@b); // Return cached result `{{1}}`, which is wrong at this point.
msg(@c); // Re-cache, returning the actual result `{{2}}`.
@a = mutable_primitive('test');
@b = array(@a);
msg(@b); // Caching happens here, result is `{test}`.
@a[] = 'newValue';
msg(@b); // Return cached result `{test}`, which is wrong at this point.
For arrays, marking all parents as dirty can be a solution (whereas it currently only marks the last parent as dirty). For mutable primitives, or user objects, the solution is not trivial. In my opinion, we could go without caching array string representations as soon as #1225 is merged and a similar solution for not sconcatting all code together is implemented in non-strict mode. I believe that arrays are not often used as their string representation, and if they are, they are rarely used twice (in which case the cache would improve performance).
- Vorherrschende Sprache
- Java
- Sterne
- 128
- Forks
- 70
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus EngineHub/CommandHelper
-
discussion wanted documentation
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
EngineHub/CommandHelper#1403 ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
EngineHub/CommandHelper#1370 · 1 Kommentar ·
-
bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
EngineHub/CommandHelper#1354 ·
-
bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
EngineHub/CommandHelper#1349 · 3 Kommentare ·
-
bug
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
EngineHub/CommandHelper#1341 · 2 Kommentare ·
Alle Issues in EngineHub/CommandHelper
Ähnliche Issues
-
[BUG] S3 CORS responses omit Access-Control-Allow-Credentials for matched originsEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
floci-io/floci#5369 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
sqlcipher/sqlcipher-android#97 · 1 Kommentar ·
-
area-integrations
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug IIIF interoperability
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100