Я пытаюсь сделать эффективную реализацию декодера LZ77 в родной Lua (то есть нет библиотеки C и никаких зависимостей от неосновных библиотек Lua) - см. liblzg.Эффективный изменяемый массив байтов в родном Lua
Для загрузки и разбора двоичного файла строка Lua работает отлично и с хорошей производительностью (например, с использованием метода s: byte (k)). Однако для создания декодированных выходных данных строки не очень оптимальны, поскольку они являются неизменяемыми, а конкатенация строк имеет тенденцию занимать много и много времени, когда выход становится большим.
декодер должен быть в состоянии:
- Дозапись один байт на выходе в то время (до миллионов раз)
- Read (более или менее произвольного доступа) из выходного буфера
Каковы наилучшие варианты? Размер выходных данных известен заранее, поэтому он может быть предварительно выделен.
Из любопытства, почему вы не можете использовать библиотеку C? Это учебное упражнение или необходимость в изолированной среде Lua? – 2010-11-24 14:50:46
Это более учебное упражнение (я хочу видеть производительность и то, как различные методы отличаются от низкоуровневого скомпилированного языка и среды управляемого сценария). Кроме того, я полагаю, что использование чистой реализации Lua упростит развертывание. – marcus256 2010-11-25 10:37:02
Отличный вопрос. Btw Я не единственный, у кого была такая же идея. – Hydro 2017-03-20 14:00:36