bzip3 comprime todo el código fuente de Perl 5 en 546 MB: 6 veces mejor que bzip2

bzip3 comprime todo el código fuente de Perl 5 en 546 MB: 6 veces mejor que bzip2

bzip3, un sucesor espiritual de BZip2, logra ratios de compresión muy superiores gracias a un codificador entrópico de mezcla de contexto de orden 0, una rápida transformada de Burrows-Wheeler basada en arrays de sufijos y un paso de RLE con LZP que combina búsqueda de cadenas estilo LZ77 y modelado de contexto estilo PPM. En una prueba con todas las versiones de Perl 5 jamás publicadas, comprimió 546 MB frente a los 3,4 GB de bzip2 y los 2 GB de xz. El proyecto, disponible en GitHub bajo licencia LGPLv3, destaca en texto y código, y su rendimiento depende en gran medida del compilador.

Bzip3 sobresale comprimiendo texto o código.
  1. altairprime

    Anteriormente:

    “Hola, soy el autor de la herramienta.” Una explicación útil de la transformada de Burrows-Wheeler utilizada por bzip3: https://news.ycombinator.com/item?id=42902407

    “bzip3 aún no está listado en el benchmark de compresión de texto grande” Ahora lo está: https://mattmahoney.net/dc/text.html

    (hace 2 años, 176 comentarios) https://news.ycombinator.com/item?id=42899713

    (hace 4 años, 104 comentarios) https://news.ycombinator.com/item?id=31324439

  2. 8organicbits

    Recientemente estaba procesando archivos .jsonl comprimidos (formato de líneas JSON). Descubrí que lzma daba una compresión mucho mejor que gzip o bzip2, lo que ayuda con los costos de archivo, pero es difícil trabajar con él porque falta soporte de software. Hago procesamiento con duckdb, que soporta gzip de forma transparente. Hay una extensión para bzip2, pero no para lzma o bzip3.

    Terminé usando gzip porque es el mejor soportado por el software que uso y es más probable que tenga soporte en el software que adopte. Pero dio los peores resultados de compresión de las opciones que probé. ¡Estos números de bzip3 ciertamente me dan FOMO...!

  3. ot

    Los benchmarks son deshonestos, hasta el punto de parecer seleccionados a dedo. El tamaño de bloque para bzip3 se establece en 512MB, pero el tamaño de ventana para zstd se deja en su valor predeterminado (8MB, creo, para niveles altos). Así que en este corpus, que está compuesto por todas las versiones del código fuente de Perl concatenadas, la ventana es demasiado pequeña para ver todos los archivos idénticos y simplemente emparejarlos.

    Además, los corpus hechos de repeticiones muy largas son prácticamente el mejor escenario para los compresores basados en BWT.

    Si igualamos el tamaño de ventana de zstd al de bzip3, obtenemos resultados drásticamente diferentes:

    % gzcat *.gz | time zstd -T8 -16 | wc -c # línea base

    2819113884

    zstd -T8 -16 2054.50s user 3.47s system 783% cpu 4:22.80 total

    % gzcat *.gz | time zstd -T8 -16 --long=29 | wc -c

    196405076

    zstd -T8 -16 --long=29 1083.06s user 2.41s system 783% cpu 2:18.55 total

    Casi 15 veces más pequeño que la línea base, y más de 2 veces más pequeño que bzip3, además el tiempo de CPU se reduce a la mitad (ya que las coincidencias largas se encuentran antes, por lo que hay menos trabajo que hacer).

    (El número de la línea base es ligeramente diferente porque no tengo el conjunto exacto de versiones de Perl utilizado por el autor)

    Además, en los benchmarks que usan lrzip, que haría que el tamaño de ventana fuera menos relevante, zstd ni siquiera se compara.

  4. JdeBP

    Un benchmark interesante no intencional es ir a https://github.com/iczelia/bzip3/releases y ver en qué medida bzip3 comprime sus propios archivos de lanzamiento; y ir a https://github.com/iczelia/bzip3/blob/master/.github/workflo... para ver qué opciones se han elegido para los otros compresores aquí.

  5. CodesInChaos

    Creo que esto debería incluir benchmarks de zstd con ventanas más grandes y modo de largo alcance. No me sorprendería si la ventana que usaron es más pequeña que un archivo tar de una versión individual, lo que impediría una compresión útil.

  6. amelius

    > Sin embargo, la complejidad de los algoritmos y, en particular, la presencia de varios casos especiales en el código que ocurren con probabilidad muy baja pero no nula hacen imposible descartar la posibilidad de que queden errores en el programa.

    Suena como un buen caso de prueba para la formalización + IA.

  7. whatever1

    Creo que los algoritmos de compresión están listos para una mejora significativa con los LLM. Es un problema candidato ideal que se puede tener en una evaluación de circuito cerrado, y simplemente puedes dejar que el agente pruebe cosas.

  8. charcircuit

    Es de mal gusto usar un nombre así cuando no fue creado por los autores de bzip. Por alguna razón, los desarrolladores de código abierto aman usar nombres que infringirían marcas registradas en lugar de inventar algo único.

Más de este día

2026-09-07