Nix als Mario-Emulator: Jeder Button-Druck ist eine eigene Derivation
Super Mario Derivations

In Nix sind Attributpfade lazy und können unendlich tiefe Bäume erzeugen. Der Autor nutzt diese Eigenschaft, um Super Mario Bros. 3 zu emulieren: Jeder Tastendruck entspricht einer eigenen Derivation, die den Savestate des vorherigen Drucks als Input verwendet. So wird der Nix-Store zur Savestate-Historie, und ein kompletter Spieldurchlauf ist als Attributpfad darstellbar. Das System ist generalisiert und für beliebige ROMs als Flake-Input nutzbar.
Die Abhängigkeitsgraph ist die Eingabesequenz, also können wir Nix fragen, welche Buttons einen Frame erzeugt haben.
- setheron
Spaßig, das hier zu sehen.
Ich habe das auf dem Weg (im Flugzeug) zur DEFCON34 und Nix Vegas[1] geschrieben.
Ich hatte nicht einmal die Gelegenheit, mich umzusehen und etwas von DEFCON selbst zu sehen, da die Nix-Community mich die ganze Zeit in Beschlag hatte!
Ich habe 3 Vorträge gehalten, die ich auf meiner Website[2] aktualisieren werde, sobald sie veröffentlicht sind.
[1]: https://nix.vegas
- psyclyx
Nett! Sehr traurig, Nix Vegas verpasst zu haben, es klingt, als wäre es in diesem Jahr besonders gut gewesen. Ich[0] habe vor ein paar Monaten etwas Ähnliches[1] für den Game Boy zusammengebaut[2], das Frames mit builtins.trace anstelle von Bildern ausgibt, und es erwies sich als nützlich als Speicherdrucktest, während ich an einer Nix-Evaluator-Implementierung[3] arbeitete.
Pokemon war so langsam, dass das Erstellen von TAS-Skripten, selbst mit State-Saves/Loads für jeden Lauf, undurchführbar wurde, also suchte ich schließlich gegen eine C-Implementierung desselben Emulators. Es besiegte schließlich Brock, war aber sehr button-ineffizient und hätte 10 Stunden gedauert, um es unter Nix abzuspielen, falls es überhaupt so weit gekommen wäre. In meiner Implementierung, wenn ich den GC ausschalte, läuft das viel kürzere Skript in [3] auf einer Maschine mit 128 GB ungefähr zu zwei Dritteln aus dem Speicher!
[0]: meine Claudes
[1]: https://github.com/psyclyx/nixboy
[2]: https://x.com/psyclyx/status/2066249660046725213
[3]: https://github.com/psyclyx/fix#a-less-rigorous-benchmark
- JHonaker
Was für ein entzückend verrückter Missbrauch von Nix. Ich habe das ungemein genossen, es zu lesen.