J'essaie de réaliser une implémentation efficace d'un décodeur LZ77 en langage Lua natif (c'est-à-dire sans bibliothèque C et sans dépendance aux bibliothèques Lua non-core) - voir liblzg.Tableau d'octets mutables efficace en Lua natif
Pour charger et analyser le fichier binaire, une chaîne Lua fonctionne parfaitement et avec de bonnes performances (par exemple, en utilisant la méthode s: byte (k)). Cependant, pour créer les données de sortie décodées, les chaînes ne sont pas très optimales, puisqu'elles sont immuables, et la concaténation de chaînes prend beaucoup de temps lorsque la sortie devient grande.
Le décodeur doit être capable de:
- Append un octet à la sortie à la fois (jusqu'à des millions de fois)
- Lire (plus ou moins accès aléatoire) de la mémoire tampon de sortie
Quelles sont les meilleures options? La taille des données de sortie est connue avant la main, de sorte qu'il peut être pré-alloué.
Par curiosité, pourquoi ne peut-on utiliser la bibliothèque C? Est-ce un exercice éducatif ou nécessaire dans un environnement Lua sandboxed? –
C'est plus un exercice éducatif (je veux voir la performance, et comment les techniques diffèrent entre un langage compilé de bas niveau et un environnement de script géré). En outre, j'imagine que la mise en œuvre pure de Lua rendrait le déploiement plus facile. – marcus256
Question parfaite. Btw je ne suis pas l'unique qui a eu la même idée – Hydro