Ich versuche, eine effiziente Implementierung eines LZ77-Decoders in nativem Lua zu machen (d. H. Keine C-Bibliothek und keine Abhängigkeiten von Nichtkern-Lua-Bibliotheken) - siehe liblzg.Effizientes veränderbares Byte-Array in nativem Lua
Zum Laden und Analysieren der Binärdatei funktioniert eine Lua-Zeichenfolge perfekt und mit guter Leistung (z. B. mit der s: byte (k) -Methode). Zum Erzeugen der decodierten Ausgabedaten sind Zeichenfolgen jedoch nicht sehr optimal, da sie unveränderlich sind und die Verkettung von Zeichenfolgen viel Zeit in Anspruch nimmt, wenn die Ausgabe groß wird.
Der Decoder muss in der Lage:
- Append einen Byte an den Ausgang zu einem Zeitpunkt (bis zu Millionen mal)
- Read (mehr oder weniger Zufallszugriff) von dem Ausgangspuffer
Was sind die besten Optionen? Die Größe der Ausgabedaten ist vorher bekannt, daher kann sie vorab zugewiesen werden.
Aus Neugier, warum nicht können Sie die C-Bibliothek verwenden? Ist das eine Lernübung oder wird es in einer Sandbox-Lua-Umgebung benötigt? –
Es ist eher eine lehrreiche Übung (ich möchte die Leistung sehen und wie sich die Techniken zwischen einer kompilierten Sprache und einer verwalteten Skriptumgebung unterscheiden). Außerdem stelle ich mir vor, dass eine reine Lua-Implementierung die Bereitstellung viel einfacher macht. – marcus256
Perfekte Frage. Übrigens bin ich nicht der Einzige, der die gleiche Idee hatte – Hydro