codexivo 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,11 +1,47 @@
1
1
  # Historial de cambios
2
2
 
3
+ ## 1.0.0
4
+
5
+ Primera versión completa del lenguaje según la [especificación v1](./docs/especificacion-v1.md) (#24). Todo lo que funciona
6
+ está en [`docs/lenguaje.md`](./docs/lenguaje.md).
7
+
8
+ ### Lenguaje
9
+
10
+ - **Nivel principiante** (#25, #43): `para i desde a hasta b con_paso p`, `repetir n veces`, `constante`, `div`, `mod`
11
+ (`%`), `^`, `%=`, `i++`/`i--` como sentencias, comparaciones en palabras (`es_igual_a`, `es_menor_que`…), `1_000_000`
12
+ y `PI`.
13
+ - **Nivel intermedio** (#26, #27): procedimientos con nombre (se pueden usar antes de declararse), `para_cada`, `romper`,
14
+ `continuar`, asignación por índice (`lista[i] = …`), diccionarios con `d["clave"]` y `d.campo`, y
15
+ `para_cada clave, valor en d`.
16
+ - **Dominios** (#19): `dominio nombre { … }` agrupa declaraciones en un espacio de nombres que se usa con `.`.
17
+ - **Biblioteca** (#28, #29): texto, listas, diccionarios, matemáticas con `aleatorio` de semilla fija, `afirmar`,
18
+ `mapear`/`filtrar`/`reducir`/`alguno`/`todos`/`buscar`, `ordenar` con comparador estable, pilas y colas.
19
+ - **Modo mundo** (#30): el robot de Karel, con mundos en JSON, eventos `robot` y objetivos de reto (`checkGoal`).
20
+
21
+ ### Para el sitio
22
+
23
+ - Costo por operación de la biblioteca en una sola tabla (`n`, `n · ⌈log₂ n⌉`) (#29).
24
+ - `catalog`: palabras reservadas, operadores, biblioteca con ejemplos ejecutables y códigos de error como datos (#31).
25
+ - `flowGraph`: diagrama de flujo generado desde el AST, con los `nodeId` de los eventos (#32).
26
+ - `codexivo/worker`, `createSandbox` y `evaluarReto`: ejecución en Web Worker por tandas, retroceso por re-ejecución y
27
+ retos estilo HackerRank y LeetCode (#33).
28
+
29
+ ### Cambios que rompen compatibilidad
30
+
31
+ - Palabras reservadas nuevas: `constante`, `dominio`, `repetir`, `veces`, `desde`, `hasta`, `con_paso`, `para_cada`,
32
+ `en`, `romper`, `continuar`, `mod`, `div` y las comparaciones en palabras ya no sirven como nombres.
33
+ - Sin `;`, el salto de línea termina la expresión: una línea que empieza con `-`, `(` o `[` ya no continúa la anterior,
34
+ y una expresión partida antes de un operador es un error.
35
+ - `Snapshot.heap` acepta también diccionarios (`{ entries }`) y dominios (`{ domain, members }`).
36
+ - `ordenar` deja de ser un nativo (`natives.ordenar`) y pasa a la biblioteca escrita en Codexivo.
37
+ - Las llamadas a la biblioteca cobran su costo en operaciones, así que la cuenta de operaciones de los programas cambia.
38
+
3
39
  ## 0.2.0
4
40
 
5
41
  - Núcleo reescrito como lexer, parser, compilador y máquina reanudable (#23).
6
42
  - Ejecución paso a paso, eventos, snapshots, límites deterministas y entrada interactiva.
7
43
  - API de biblioteca para navegador y Bun, con tipos publicados como fuentes TypeScript.
8
- - Comando `codexivo` instalable desde npm, que ejecuta el binario nativo del sistema sin depender de Node.js ni Bun durante la ejecución.
44
+ - Comando `codexivo` instalable desde npm como `@codexivo/cli`, separado de la biblioteca web `codexivo`, que ejecuta el binario nativo del sistema sin depender de Node.js ni Bun durante la ejecución.
9
45
  - Ejecutables autónomos para Linux (glibc y musl), macOS y Windows, en x64 y ARM64.
10
46
  - Publicación desde tags `v*` mediante GitHub Actions, con OIDC, provenance y artefactos en GitHub Releases.
11
47
  - Formato integrado con `bun fmt` y configuración en `bunfig.toml`.
package/README.md CHANGED
@@ -16,24 +16,24 @@ Inspirado por esta idea, me embarqué en este proyecto con la determinación de
16
16
 
17
17
  ```codexivo
18
18
  // La suma de los números del 1 al 10
19
- variable suma = 0;
20
- para (variable i = 1; i <= 10; i += 1) {
21
- suma += i;
19
+ variable suma = 0
20
+ para i desde 1 hasta 10 {
21
+ suma = suma + i
22
22
  }
23
- imprimir("La suma es", suma);
23
+ imprimir("La suma es", suma)
24
24
  ```
25
25
 
26
26
  ```codexivo
27
- variable clasificar = procedimiento(edad) {
28
- si (edad >= 18) {
29
- regresa "adulto";
30
- } pero_si (edad >= 13) {
31
- regresa "adolescente";
27
+ procedimiento clasificar(edad) {
28
+ si (edad es_mayor_o_igual_a 18) {
29
+ regresa "adulto"
30
+ } pero_si (edad es_mayor_o_igual_a 13) {
31
+ regresa "adolescente"
32
32
  } si_no {
33
- regresa "niño";
33
+ regresa "niño"
34
34
  }
35
- };
36
- imprimir(clasificar(16));
35
+ }
36
+ imprimir(clasificar(16))
37
37
  ```
38
38
 
39
39
  Lo que funciona hoy está en [`docs/lenguaje.md`](./docs/lenguaje.md), y todos sus ejemplos se ejecutan tal cual. Hacia dónde va
@@ -63,22 +63,24 @@ console.log(resultado.output); // "Hola desde Codexivo\n"
63
63
  ```
64
64
 
65
65
  El paquete incluye un bundle ESM compatible con navegador y los tipos como fuentes TypeScript. Importar la biblioteca no
66
- inicia el REPL ni necesita Bun. El principal declara `bin` y las variantes nativas en `optionalDependencies`; cada variante
66
+ inicia el REPL, no necesita Bun y no instala binarios ni ejecuta scripts de instalación.
67
+
68
+ El CLI se instala por separado como `@codexivo/cli`. Este paquete declara `bin` y las variantes nativas en `optionalDependencies`; cada variante
67
69
  incluye los campos `os`, `cpu` y, en Linux, `libc`. El gestor instala la variante compatible y `postinstall` verifica su versión
68
- y enlaza o copia el ejecutable a `bin/codexivo.exe` del principal. El nombre interno también funciona en Linux y macOS.
70
+ y enlaza o copia el ejecutable a `bin/codexivo.exe` del CLI. El nombre interno también funciona en Linux y macOS.
69
71
 
70
72
  ```sh
71
- npm install --global codexivo@0.2.0
73
+ npm install --global @codexivo/cli@0.2.0
72
74
  codexivo # REPL
73
75
  codexivo programa.cdx # ejecutar un archivo
74
76
  ```
75
77
 
76
- Con Bun, usa `bun add --global --trust codexivo@0.2.0` para permitir el script de instalación. Node se usa únicamente durante
78
+ Con Bun, usa `bun add --global --trust @codexivo/cli@0.2.0` para permitir el script de instalación. Node se usa únicamente durante
77
79
  la instalación con npm; el comando resultante es el ejecutable nativo y funciona sin Node.js ni Bun en el `PATH`.
78
80
 
79
- Si bloqueas scripts, puedes usar la biblioteca normalmente. Para preparar el comando tras una instalación local, ejecuta
80
- `node node_modules/codexivo/postinstall.mjs` una vez. El instalador toma el paquete opcional ya instalado por el gestor y exige
81
- que su versión coincida con la del principal; no descarga ni compila binarios.
81
+ Si bloqueas scripts al instalar el CLI, para preparar el comando tras una instalación local ejecuta
82
+ `node node_modules/@codexivo/cli/postinstall.mjs` una vez. El instalador toma el paquete opcional ya instalado por el gestor y exige
83
+ que su versión coincida con la del CLI; no descarga ni compila binarios.
82
84
 
83
85
  Las variantes publicadas son:
84
86
 
@@ -126,8 +128,7 @@ dispara otra publicación. El workflow toma el estado más reciente de `main`, p
126
128
  Desde **Actions → Publicar → Run workflow**, en `main`, se puede elegir `patch`, `minor` o `major` para una publicación manual.
127
129
 
128
130
  También se admiten tags `v*` creados manualmente: deben coincidir con `package.json` y no incrementan la versión otra vez.
129
- Todas las compilaciones usan el SHA del commit de la versión. Los paquetes nativos se publican antes que el paquete
130
- principal y sus versiones se sincronizan con `bun pm version`. El principal declara `bin` y su `postinstall` coloca allí el ejecutable del paquete nativo compatible. Las versiones preliminares se publican con el dist-tag `next`;
131
+ Todas las compilaciones usan el SHA del commit de la versión. Los paquetes nativos se publican primero, después `@codexivo/cli` y finalmente `codexivo`. Las diez versiones se sincronizan con `bun pm version`. Solo el CLI declara `bin` y su `postinstall` coloca allí el ejecutable del paquete nativo compatible. Las versiones preliminares se publican con el dist-tag `next`;
131
132
  las estables, con `latest`. Los ejecutables y sus sumas SHA-256 se adjuntan a la release. Los binarios no están firmados ni
132
133
  notarizados.
133
134
 
@@ -136,10 +137,10 @@ notarizados.
136
137
  - [x] Lexer, parser y máquina con posiciones exactas, errores con pistas y límites deterministas
137
138
  - [x] Ejecución paso a paso, eventos y fotografías del estado para visualización
138
139
  - [x] `imprimir`, `leer`, `leer_número`, comentarios, `nulo`
139
- - [ ] Nivel principiante de la v1: `repetir … veces`, `++`/`--`, `mod`/`div`, operadores en palabras, `constante`
140
- - [ ] Nivel intermedio: procedimientos con nombre, `para_cada`, `romper`/`continuar`, diccionarios, más biblioteca
141
- - [ ] Nivel avanzado: procedimientos como valores en la biblioteca, pilas y colas
142
- - [ ] Modo mundo (Karel)
140
+ - [x] Nivel principiante de la v1: `repetir … veces`, `++`/`--`, `mod`/`div`, operadores en palabras, `constante`
141
+ - [x] Nivel intermedio: procedimientos con nombre, `para_cada`, `romper`/`continuar`, diccionarios, más biblioteca
142
+ - [x] Nivel avanzado: procedimientos como valores en la biblioteca, pilas y colas
143
+ - [x] Modo mundo (Karel)
143
144
  - [ ] Sitio con documentación y sandbox: `codexivo.urielcuriel.dev`
144
145
 
145
146
  ## Cómo contribuir