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
requiresqué le exige a quien lo llama y conensuresqué 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
matchcon exhaustividad verificada, sobre valores, rangos y enumeraciones.whenpara condiciones independientes, y bucles que devuelven valor.- Una condición seguida de un bloque ya es un
ifsinelse, y una guarda de una sola salida se escribe como cortocircuito. deferpara 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
comptimey 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.