Clause
← Toda la documentación

El original en inglés ha cambiado desde que se hizo esta traducción, por lo que partes de ella pueden estar desactualizadas. Leer en inglés

Traducido del original en inglés · 1e3a39c8-dirty · 2026-10-26

Compilar Clause

Cómo compilar clau y clause_runtime, configurar la compilación, ejecutar las pruebas y usar las herramientas de desarrollo. El diseño y los resultados de las pruebas están en validación.

Requisitos

En macOS (Erlang opcional):

xcode-select --install
brew install cmake boost tomlplusplus llvm@23 erlang

Configuración y compilación

cmake --preset debug                    # build/debug, single configuration
cmake --build --preset debug

En Windows, desde un shell de desarrollador x64 con clang-cl y ninja en el PATH:

cmake --preset windows                  # build/windows, Ninja Multi-Config
cmake --build --preset windows-debug
cmake --build --preset windows-release

El preset debug coloca clau en build/debug/bin; el preset windows, en build/windows/bin/<Config>/clau.exe, con el runtime en build/windows/lib/<Config>/clause_runtime.lib. clau localiza el archivo del runtime y los módulos de library/ en relación con su propia ubicación.

Scripts envoltorio

Variables de entorno que los modifican: BUILD_DIR, TOOL_BUILD_DIR, BUILD_TYPE, JOBS, CMAKE, CTEST, CMAKE_ARGS, CLANG_FORMAT.

MakefileWindowsFunción
make buildmake-build.batCompila clau en build/tool sin pruebas (el script por lotes compila en Release y también el runtime)
make test, make test-fullmake-test.batConfigura build/debug con pruebas, lo compila todo y ejecuta CTest
make format, make format-allmake-format.batAplica clang-format a los archivos C++ modificados (o, con FORMAT_SCOPE=all, a todos)
make benchmarkmake-benchmark.batCompilación Release en build/bench y después comparación con el OTP del host
make cleanmake-clean.batElimina build/ y cmake-build*/

Los scripts por lotes entran por sí mismos en el entorno x64 de Visual Studio cuando hace falta, añaden %ProgramFiles%\LLVM\bin al PATH cuando falta clang-cl y reconfiguran un directorio de compilación creado con otro generador o compilador; con CLAUSE_TOOLCHAIN=default se conserva la elección propia de CMake. clau.bat (Windows) y run-macos.sh compilan primero build/tool y después ejecutan clau con todos los argumentos, conservando el directorio de trabajo y el código de salida del llamador.

Opciones de configuración

OpciónPropósito
-DBUILD_TESTING=ONCompila las pruebas y sus programas auxiliares (por defecto OFF)
-DCLAUSE_BUILD_COMPILER=OFFCompila solo la biblioteca del runtime, sin LLVM
-DCLAUSE_BUILD_RUNTIME=OFFCompila solo el compilador
-DLLVM_DIR=/prefix/lib/cmake/llvmSelecciona un SDK de LLVM 23.1.x (una ruta explícita no válida falla)
-DCLAUSE_DOWNLOAD_LLVM=OFFExige un SDK instalado
-DCLAUSE_BOOST_ROOT=..., -DCLAUSE_TOML_ROOT=..., -DCLAUSE_SQLITE_ROOT=..., -DCLAUSE_PCRE2_ROOT=...Selecciona las fuentes o la instalación de una dependencia (configuración sin conexión)
-DCLAUSE_CLANG_EXECUTABLE=C:/path/to/clang.exeSelecciona el ejecutable de Clang en Windows
-DCLAUSE_OTP_AUDITS=ON, -DCLAUSE_ESCRIPT=/path/to/escriptActiva las auditorías opcionales en vivo con OTP y selecciona el OTP 29 que se usa
-DCLAUSE_TEST_DEBUG_INFO=ONCompila los programas de prueba con información de depuración (para depurar un fallo)
-DCLAUSE_OPTIMIZED_COMPILER=OFFCompila clau y las bibliotecas del compilador sin optimización en Debug (para depurar un fallo de clau)

Notas para Windows: el CRT por defecto es /MDd (Debug) o /MD; un valor explícito de CMAKE_MSVC_RUNTIME_LIBRARY debe coincidir con el SDK de LLVM. cl de MSVC funciona en un directorio de compilación aparte; MinGW no está soportado. Los objetivos del proyecto tratan las advertencias como errores e incluyen las dependencias como cabeceras SYSTEM, por lo que conviene no añadir rutas de dependencias mediante flags -I globales como CXXFLAGS (en CLion, el valor en caché se borra con -DCMAKE_CXX_FLAGS:STRING=); en su lugar se usan las opciones de raíz.

Pruebas

cmake --preset debug -DBUILD_TESTING=ON
cmake --build --preset debug
ctest --preset debug-fast                # or windows-debug-fast
ctest --preset debug -j 16               # full mode

CLAUSE_TEST_MODE=fast (los presets *-fast, make test, make-test.bat) ejecuta una matriz reducida de optimización/driver y omite las pruebas full_only; full (el valor por defecto si no se define, make test-full, TEST_MODE=full) lo ejecuta todo. Cada prueba reserva dos slots de CTest, de modo que -j N ejecuta N/2 pruebas a la vez.

Control de calidad

Lizard y clang-tidy, fijados en tools/requirements-quality.txt e instalados en .venv-quality/ (fuera de Windows se usa .venv-quality/bin/python):

python -m venv .venv-quality
.venv-quality/Scripts/python -m pip install -r tools/requirements-quality.txt
cmake --build build/debug --target check-quality       # changed files
cmake --build build/debug --target check-quality-all   # whole tree

check-quality comprueba los archivos modificados desde HEAD (o desde CLAUSE_QUALITY_BASE) más una unidad de traducción por cabecera modificada (check-quality-all cubre todos sus dependientes) y necesita una compilación con el compilador y el runtime activados; check-complexity-all y check-clang-tidy-all ejecutan una sola herramienta. cmake/CheckClangTidy.cmake acepta QUALITY_SHARD=K/N para dividir una ejecución larga.

Pruebas de rendimiento y listados

make benchmark / make-benchmark.bat compilan un clau Release en build/bench y comparan los programas benchmarks/bench_*.erl con el OTP del anfitrión y un commit anterior de Clause; benchmarks/run.py --help enumera las opciones (pruebas de rendimiento). Nunca forman parte de las pruebas.

benchmarks/compile_times.py mide los tiempos del propio clau: ejecuta una carga de compilación (--workload W1, o argumentos de clau después de --) varias veces en los núcleos de rendimiento con --no-cache --print-stage-times, e informa de la mediana, el mínimo y la dispersión de cada fase y pasada de inferencia, los componentes de inferencia más lentos y si los contadores de pasadas y la salida estándar coinciden entre ejecuciones. Con --baseline <clau.exe> se alternan las dos compilaciones y el resumen muestra su proporción. Se niega a medir mientras se ejecutan compilaciones, pruebas u otro clau, salvo que se indique --force-noisy, y escribe JSON en build/bench/compile-times/.

decompile-debug.bat <module> y decompile-release.bat <module> escriben el ensamblador Debug o Release de un fuente C++ de Clause en <module>.debug.asm / <module>.release.asm, con líneas del fuente y nombres sin decoración (tools/asm.py, compilaciones con clang-cl; --function TEXT filtra).