Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Manual de Referencia: crowe

Crowe — Linter de Portabilidad Multi-Arquitectura, Endianness y Tipos de Ancho Fijo

Crowe — Linter de Portabilidad Multi-Arquitectura, Endianness y Tipos de Ancho Fijo


1. Propósito y Filosofía Pedagógica

La herramienta crowe forma parte del ecosistema oficial de software de la cátedra. Su diseño sigue principios pedagógicos rigurosos:

  1. Evidencia Técnica Directa: Todo diagnóstico se fundamenta en la norma ISO C (C11/C23), en el modelo de memoria del sistema o en convenciones arquitectónicas formales.

  2. Acción Correctiva Concreta: Cada advertencia incluye la prescripción técnica inmediata para resolver el defecto sin recurrir a conjeturas.

  3. Autonomía del Estudiante: Facilita la autoevaluación local antes de la entrega final del trabajo práctico.

  4. Objetividad Docente: Estandariza la corrección automática removiendo discrepancias subjetivas en la evaluación.


2. Instalación y Verificación del Entorno

2.1 Requisitos Previos del Sistema

Instalá los paquetes del sistema requeridos según tu distribución o entorno:

Ubuntu / Debian
Arch Linux / Manjaro
Fedora / RHEL
macOS (Homebrew)
Windows (MSYS2 / WSL2)

sudo apt update && sudo apt install -y
build-essential
gcc
gdb
valgrind
clang-format
libclang-dev
bubblewrap
typst
graphviz
python3-pip
python3-venv


2.2 Métodos de Instalación de crowe

Podés instalar crowe mediante cualquiera de los siguientes métodos estándar:

uv tool (Recomendado)
pip / venv
pipx

Instalación aislada de alta velocidad con uv

uv tool install . --editable

O instalar todo el ecosistema de herramientas de la cátedra en lote:

source ./install_tools.sh


2.3 Autocompletado en la Shell

La interfaz CLI de crowe cuenta con autocompletado nativo para comandos, flags y archivos. Para configurarlo permanentemente en tu shell:

# Configuración automática en Bash / Zsh / Fish
crowe --install-completion

# Para cargar el autocompletado en la sesión actual de inmediato:
source ./install_tools.sh

2.4 Verificación del Entorno con doctor

Toda herramienta del ecosistema cuenta con el subcomando unificado doctor. Ejecutalo para auditar el estado del entorno:

crowe doctor
Comprobaciones Ejecutadas por el Diagnóstico:
Matriz de Resolución de Problemas:
Síntoma / Alerta de doctorCausa RaízAcción Correctiva
❌ gcc / clang no encontradoToolchain C faltanteInstalá build-essential o base-devel.
❌ bwrap permisos insuficientesUser namespaces desactivadosHabilitá sysctl kernel.unprivileged_userns_clone=1.
❌ typst no disponibleMotor de PDF faltanteDescargá Typst vía cargo install typst-cli o gestor de paquetes.
❌ gdb no respondeGDB sin interfaz MI/PythonReinstalá gdb completo desde el repositorio oficial.

3. Referencia Completa de Comandos CLI

A continuación se detallan los subcomandos principales disponibles en crowe:

Sintaxis del ComandoDescripción y Efecto
crowe audit src/Audita el código fuente buscando incompatibilidades entre x86_64, ARM64 y 32-bit.
crowe endianness src/serializador.cDetecta casteo directo de punteros o desplazamientos dependientes de Little Endian.
crowe fix-types src/Sustituye tipos dependientes de plataforma por <stdint.h> (int32_t, uint64_t, size_t).
crowe doctorVerifica toolchains cruzadas disponibles (GCC multiarch, QEMU user).

4. Tutorial Paso a Paso con Ejemplos Reales

Caso de Estudio

Considerá el siguiente fragmento de código representativo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdint.h>

// Código no portable: asume que sizeof(long) == sizeof(void*) y Little Endian
void serializar_mal(unsigned long valor, char *buf) {
    *(unsigned long*)buf = valor; // Peligro de alineación y endianness
}

// Código portable auditado por Crowe
void serializar_bien(uint32_t valor, uint8_t *buf) {
    buf[0] = (uint8_t)(valor >> 24);
    buf[1] = (uint8_t)(valor >> 16);
    buf[2] = (uint8_t)(valor >> 8);
    buf[3] = (uint8_t)(valor);
}

Ejecución de la Herramienta

Ejecutá el análisis desde tu terminal:

crowe audit src/

Salida Obtenida en Consola

[!] src/serializador.c:5:5: ALERTA DE PORTABILIDAD [CROWE-001]
    Casteo de puntero a tipo 'unsigned long*' asume tamaño de 8 bytes (falla en arquitecturas de 32 bits y Windows x64 donde sizeof(long)==4).
    Sugerencia: Utilizá uint32_t o uint64_t de <stdint.h> con serialización explícita byte a byte.

5. Ejercicios Prácticos y Desafíos

Practicá el uso avanzado de crowe resolviendo los siguientes ejercicios:


6. Integración en el Flujo de Trabajo y Makefile

Para incorporar crowe de forma automática a tu flujo de desarrollo, agregá la siguiente regla en el Makefile de tu proyecto:

check-crowe:
	@echo "=== Ejecutando verificación con crowe ==="
	crowe check src/ include/

.PHONY: check-crowe

Ejecutá make check-crowe antes de cada commit para mantener que tu código conserve el estado de aprobación.


7. Arquitectura Interna y Mecanismo Técnico

La herramienta crowe implementa un motor de alta precisión basado en:


8. Integración y Conexión con el Ecosistema

Diagrama de Flujo e Interoperabilidad

Matriz de Intercambio de Datos

CanalHerramientas ConectadasTipo de Datos Transferidos
Entradas (Inputs)- Código fuente C (.c y .h)Código fuente, AST, binarios, testcases, contratos
Salidas (Outputs)- daedalus (compilación cruzada)

Pipeline de Integración Recomendado

Podés encadenar crowe con otras herramientas del ecosistema en una única línea de comando:

# Pipeline de integración típico
crowe audit src/ && daedalus compile src/*.c -o bin/app

9. Extensión, Desarrollo de Plugins y API Python

Para crear tus propias reglas, conectores de evaluación o integrar crowe programáticamente en pipelines de CI/CD: