O misa77 é um codec de compressão baseado em LZ, escrito em C++ e licenciado em MIT. Ele foi desenhado para o caso “escreve uma vez, lê muitas”: você comprime raramente e descomprime o tempo todo. O próprio README admite a troca, que é compressão lenta.
O que o README promete
Os objetivos listados são descompressão com vazão extremamente alta em uma única thread, taxas de compressão modestas (o LZ4 em níveis altos serve de referência) e uso de memória constante na compressão, qualquer que seja o tamanho da entrada. A frase de efeito é que ele descomprime de 1,5x a 3x mais rápido que o LZ4 em x86 e ARM, “com taxas melhores”.
Os números publicados
O corpus é o Silesia, e as medições são do próprio autor. No nível 1, num Intel Core i7-14650HX a 2,2 GHz com uma thread, o misa77 descomprime a 5.376 MB/s com taxa de 42,64%. O LZ4, na mesma máquina, faz 2.514 MB/s com 47,59%, o que dá cerca de 2,1x. Num Apple M3, o misa77 chega a 12.638 MB/s contra 5.195 MB/s do LZ4, cerca de 2,4x. Aqui a taxa é o tamanho final em relação ao original, então menor é melhor.
A compressão é bem mais lenta: no nível 1, 54,2 MB/s no Intel. Os níveis -1 e 0 comprimem mais rápido, com pior taxa. São seis níveis, de -1 a 4.
Estado do projeto
O README avisa que o formato “pode mudar inesperadamente”, porque o projeto ainda está na versão 0.x.y. Há um descompressor seguro para os níveis -1 a 3, e o nível 4 não tem. O código passou por fuzzing local com ASan e UBSan, e o endurecimento mais amplo continua em andamento. Para compilar, precisa de C++20 (GCC ou Clang), CMake 3.20 ou mais novo e um sistema 64-bit little-endian.
O que não está documentado
O README não compara uso de memória com o LZ4, não fala de compressão multithread e não dá recomendação de uso em produção. Uma versão anterior deste post citava comentários do Hacker News sobre desempenho em Graviton 4, que eu não consegui confirmar, então saíram. Para qualquer decisão real, vale rodar o benchmark nos seus dados e na sua CPU, e esperar o formato estabilizar antes de gravar arquivos que precisem durar.
Se performance de baixo nível é o seu assunto, veja também o scriptc, que compila TypeScript para binário nativo e o texto sobre computação incremental.