Crimson
arena Fase {
    PASOS   := 3
    CORTES  := 1    ;; recortar cada lectura
    CRUZAR  := 2    ;; cruzar los dos mates
    CIERRE  := 3
}
predicate corriendo(j :Job) = j.fase >= Fase.CORTES
                          && j.fase <= Fase.CIERRE
;; el denominador se SUMA: agregar una fase
;; no puede dejarlo viejo
pesoTotal -> n :Z {
    n = 0
    for f in 1..Fase.PASOS { n += pesoDe(f) }
}

Punk

Un lenguaje de programación. Casi todo lo demás de esta página está escrito en él.

Estado
En uso diario
Desarrollo
645 h

Un lenguaje de programación con su transpilador. Un archivo se traduce a C y de ahí sale un binario nativo.

Sirve para dos cosas que suelen pedir lenguajes distintos. Aplicaciones de escritorio con ventana y gráficos en 3D, como catalejo, AirGlobe o vigía. Y programas que hacen cuentas pesadas y tienen que ir rápido.

Funcionalidades

Los tipos

  • Enteros con y sin signo, reales, complejos con literal imaginario, caracteres, puntos de código Unicode y cadenas UTF-8.
  • Opcionales con tres estados. Tiene valor, está vacío, o trae un error con su mensaje. Se preguntan con una sola marca y se les da un valor de reserva con dos.
  • Todo es inmutable si no se dice lo contrario. Si algo se declara mutable y nunca se muta, el verificador lo dice.
  • Fuera de las funciones sólo hay constantes. No existe la variable global mutable.
  • Los campos de un record y los elementos de una tupla se desarman en variables de una línea, y se puede descartar lo que no interesa.

Los subprogramas

  • Cinco formas, y cada una dice de entrada qué se permite adentro. La función pura no toca entrada y salida. El subprograma con nombre pelado sí, y puede recibir por referencia. El método vive dentro del record y muta lo suyo.
  • El predicado es una función booleana con nombre. Se escribe una vez y se lee en el if, en vez de meter la condición ahí.
  • La entrada del programa es orquestación y nada más. El verificador rechaza bucles, variables mutables y llamadas a la biblioteca adentro de ella.
  • Los parámetros van con paréntesis o sin ellos, y el cuerpo puede ser un bloque o una sola expresión.

Los contratos

  • Un subprograma declara con requires qué le exige a quien lo llama y con ensures qué garantiza al volver.
  • Los records se declaran inmutables y se abre la mutabilidad campo por campo, o al revés, cerrando los que no se tocan.
  • Un record se copia con campos sobrescritos sin mutar el original.
  • Hay records genéricos.

El control

  • match con exhaustividad verificada, sobre valores, rangos y enumeraciones.
  • when para condiciones independientes, y bucles que devuelven valor.
  • Una condición seguida de un bloque ya es un if sin else, y una guarda de una sola salida se escribe como cortocircuito.
  • defer para lo que hay que hacer al salir del alcance, pase lo que pase, y manejo de recursos que se cierran solos.
  • Resultados fallibles, con propagación por una marca y con conversiones que pueden fallar.

Las colecciones

  • Arreglos con dimensiones calculadas en ejecución, colecciones dinámicas, mapas y conjuntos.
  • Los operadores de conjunto se escriben con sus símbolos de verdad.
  • Funciones de orden superior sobre colecciones, tubería para encadenarlas, conversión de tipo al final de la expresión y reducciones de varios argumentos.
  • Arenas de records, que se recorren filtrando por el tipo del elemento.
  • Iteradores propios, que cruzan de módulo.

El texto

  • Interpolación adentro de la cadena, subcadenas, y un constructor para armar texto por pedazos.

En tiempo de compilación

  • Cálculo en comptime y reflexión de los campos de un record.
  • Constantes de biblioteca resueltas antes de compilar.

La biblioteca, escrita en el mismo lenguaje

  • Astronomía y tiempo. Propagación de satélites por SGP4, efemérides, geodesia, campo geomagnético, óvalo auroral.
  • Mecánica orbital. Kepler, Lambert, asistencia gravitatoria, ascenso y presupuesto de masa, con una tabla de lanzadores.
  • Radio. Los decodificadores de ADS-B, VDL Mode 2, los textos de ACARS, FT8 y FT4, y Morse.
  • Audio. Filtros, compuerta, compresor, limitador, de-esser, saturador y la sonoridad de la BS.1770.
  • Formatos leídos a mano. Shapefile y DBF, GRIB2, HDF5, TIFF grande, PNG, ZIP, STL, y los algoritmos de compresión que hacen falta para abrirlos.
  • Estadística descriptiva y pruebas, transformada rápida de Fourier, constantes de física y de química.
  • Biología. Genoma, proteínas, codones, enzimas de restricción, alineamiento, k-meros y pangenoma.

Lo que trae enchufado

  • RayLib para ventana, 3D e interfaz.
  • El dongle RTL-SDR, que es lo que hace posibles torre, punk_band y aeronaves.
  • Bluetooth de baja energía, para escuchar lo que hay en el aire y para que dos teléfonos se pasen datos sin conectarse.
  • JSON con su modelo en memoria, tiempo, archivos por tipo, y una salida de escape a C cuando hace falta.

A fines de julio de 2026 las aplicaciones que vivían dentro del repositorio salieron cada una al suyo. Lo que quedó es el lenguaje, la biblioteca, los ejemplos y las pruebas.

← todos los proyectos