The Daily Commit · Edición de sección Portada PHP AI Dev EN DE FR ES

The Php Times

Herramientas — Ecosistema

vivace 0.4.0: la herramienta en Rust que replica byte a byte el resolutor de Composer


vivace 0.4.0 añade un port en Rust de composer update, reproduciendo la lógica del resolutor de Composer 2.10.3, incluyendo el pool builder, el solucionador CDCL y el escritor del lock.

R/PHP (TOP), 12 de septiembre de 2026 seleccionado por Sönke

El resultado son archivos composer.lock y vendor/ idénticos en proyectos de prueba como Laravel, la demo de Symfony y Sylius. La herramienta no ejecuta scripts PHP y todavía no soporta actualizaciones parciales ni Windows.

vivace es una reimplementación en Rust de los comandos de gestión de dependencias de Composer. La versión 0.4.0 añade composer update, sumándose al soporte de composer install ya presente en versiones anteriores. El objetivo declarado es una equivalencia byte a byte: con el mismo composer.json y composer.lock, vivace genera el mismo directorio vendor/ y el mismo archivo de bloqueo que Composer 2.10.3.

terminal
git clone https://github.com/Adelagric/vivace && cd vivace
cargo build --release
fixtures/make.sh
harness/update.sh
harness/diff-vendor.sh

Para lograr esa paridad en update, el autor portó el resolutor real de Composer en lugar de escribir un algoritmo nuevo. Se trasladaron el pool builder, el pool optimizer, el rule set, el solucionador CDCL, la política de versiones y el escritor del lock. Un algoritmo de resolución distinto elegiría versiones de paquetes diferentes cuando el grafo de dependencias es ambiguo, lo que generaría un lock imposible de comparar con el de Composer.

La validación se hace contra instantáneas congeladas de Packagist. La prueba compara primero el pool de candidatos, luego la secuencia completa de decisiones del solucionador, leída directamente del objeto Solver interno de Composer, después las operaciones resultantes y por último el archivo de bloqueo final. Los proyectos de prueba incluyen Laravel, la aplicación de demostración de Symfony, Sylius, rector-src y un recommended-project de Drupal, además de casos sintéticos más pequeños creados para forzar backtracking, un conjunto de dependencias irresoluble, alias raíz y paquetes virtuales.

Cualquiera puede comprobarlo localmente. Tras clonar el repositorio, se ejecuta cargo build --release, luego fixtures/make.sh para descargar los proyectos de prueba, y después harness/update.sh y harness/diff-vendor.sh, que comparan la salida de vivace con ejecuciones reales de Composer. En un proyecto propio funciona igual: vivace update --no-install junto a composer update --no-install, comparando los dos archivos composer.lock. El autor trata cualquier diferencia no vacía como un error a reportar.

vivace no ejecuta scripts PHP durante la instalación o la actualización. Tres plugins comunes de Composer, symfony/runtime, composer/installers y drupal/core-composer-scaffold, se emulan y se verifican contra el comportamiento real de los plugins; con cualquier otro plugin, vivace recurre a ejecutar el binario real de composer. La herramienta todavía no soporta los comandos require y remove, actualizaciones parciales como composer update vendor/name, repositorios VCS o path, las explicaciones de Composer sobre conjuntos irresolubles, ni Windows. El proyecto está alojado en github.com/Adelagric/vivace, con notas de versión en CHANGELOG.md y la lista de escenarios sin probar en HANDOVER.md.

Leer la fuente original (en inglés) ↗

Valora este artículo: 0

Tribuna de lectores

Aún no hay aportaciones — abre el debate.

← Ecosistema — Page B1

"All the Code That's Fit to Ship" · The Daily Commit · Edición de pantalla · Información legal · Política de privacidad