codexivo 0.0.0-stage → 0.2.3
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 +15 -0
- package/README.md +159 -2
- package/dist/index.js +154 -0
- package/dist/index.js.map +30 -0
- package/dist/worker.js +153 -0
- package/dist/worker.js.map +25 -0
- package/docs/README.md +27 -0
- package/docs/arquitectura.md +174 -0
- package/docs/especificacion-v1.md +701 -0
- package/docs/guia-aprender-desde-el-codigo.md +91 -0
- package/docs/integracion.md +104 -0
- package/docs/lenguaje.md +537 -0
- package/docs/modo-mundo.md +128 -0
- package/docs/recetario.md +159 -0
- package/docs/repl.md +64 -0
- package/package.json +66 -4
- package/src/catalog.ts +256 -0
- package/src/challenge.ts +138 -0
- package/src/engine.ts +104 -0
- package/src/error-codes.ts +427 -0
- package/src/errors.ts +56 -0
- package/src/flow.ts +385 -0
- package/src/index.ts +81 -0
- package/src/printer.ts +133 -0
- package/src/runtime/builtins.ts +1426 -0
- package/src/runtime/compiler.ts +499 -0
- package/src/runtime/costs.ts +96 -0
- package/src/runtime/machine.ts +1521 -0
- package/src/runtime/prelude.ts +230 -0
- package/src/runtime/suggest.ts +33 -0
- package/src/runtime/values.ts +241 -0
- package/src/sandbox-host.ts +310 -0
- package/src/sandbox.ts +95 -0
- package/src/syntax/ast.ts +344 -0
- package/src/syntax/lexer.ts +266 -0
- package/src/syntax/parser.ts +1090 -0
- package/src/syntax/token.ts +215 -0
- package/src/worker.ts +18 -0
- package/src/world.ts +518 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Historial de cambios
|
|
2
|
+
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
- Núcleo reescrito como lexer, parser, compilador y máquina reanudable (#23).
|
|
6
|
+
- Ejecución paso a paso, eventos, snapshots, límites deterministas y entrada interactiva.
|
|
7
|
+
- API de biblioteca para navegador y Bun, con tipos publicados como fuentes TypeScript.
|
|
8
|
+
- 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
|
+
- Ejecutables autónomos para Linux (glibc y musl), macOS y Windows, en x64 y ARM64.
|
|
10
|
+
- Publicación desde tags `v*` mediante GitHub Actions, con OIDC, provenance y artefactos en GitHub Releases.
|
|
11
|
+
- Formato integrado con `bun fmt` y configuración en `bunfig.toml`.
|
|
12
|
+
- Incremento automático `patch` con `bun pm version` al integrar cambios en `main`, y publicación manual `patch`/`minor`/`major`.
|
|
13
|
+
|
|
14
|
+
Esta versión reemplaza el núcleo anterior. La sintaxis implementada se describe en
|
|
15
|
+
[`docs/lenguaje.md`](./docs/lenguaje.md).
|
package/README.md
CHANGED
|
@@ -1,3 +1,160 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Codexivo
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Bienvenido al proyecto de nuestro nuevo y emocionante lenguaje de programación: Codexivo. Durante las últimas semanas, he estado inmerso en esta apasionante tarea de crear una herramienta que facilite el aprendizaje de la programación. En un principio, mi objetivo era desarrollar un intérprete de pseudocódigo con una visualización de diagrama de flujo integrada, pero a medida que investigaba, surgió una idea aún más emocionante: crear un "lenguaje de programación" similar al que solía utilizar en mi infancia con el emulador de robot llamado Karel.
|
|
4
|
+
|
|
5
|
+
Inspirado por esta idea, me embarqué en este proyecto con la determinación de crear una plataforma que permita a los principiantes aprender sobre lógica, algoritmos básicos, bucles y mucho más. Para lograrlo, definí una serie de características clave que el lenguaje debía poseer:
|
|
6
|
+
|
|
7
|
+
1. **Simplicidad**: Con el aprendizaje en mente, decidí que nuestro lenguaje solo incluirá tipos de datos simples como números, cadenas y arreglos, y posiblemente diccionarios en el futuro.
|
|
8
|
+
|
|
9
|
+
2. **Verbalidad**: Para hacer el código más comprensible y legible, he optado por utilizar más palabras que símbolos en la sintaxis del lenguaje.
|
|
10
|
+
|
|
11
|
+
3. **En español**: Creo firmemente que el aprendizaje se facilita cuando se utiliza el idioma nativo, así que he elegido el español como el idioma principal de nuestro lenguaje. Incluso estoy considerando permitir el uso de la "ñ" y acentos dentro del código.
|
|
12
|
+
|
|
13
|
+
4. **Fácil acceso**: Quiero que nuestro lenguaje sea fácil de usar para todos, por lo que he diseñado una solución que se puede ejecutar directamente en un navegador, sin necesidad de instalaciones adicionales ni acceso a internet.
|
|
14
|
+
|
|
15
|
+
## Un ejemplo
|
|
16
|
+
|
|
17
|
+
```codexivo
|
|
18
|
+
// La suma de los números del 1 al 10
|
|
19
|
+
variable suma = 0
|
|
20
|
+
para i desde 1 hasta 10 {
|
|
21
|
+
suma = suma + i
|
|
22
|
+
}
|
|
23
|
+
imprimir("La suma es", suma)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```codexivo
|
|
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
|
+
} si_no {
|
|
33
|
+
regresa "niño"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
imprimir(clasificar(16))
|
|
37
|
+
```
|
|
38
|
+
|
|
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
|
|
40
|
+
el lenguaje, nivel por nivel, está en la [especificación v1](./docs/especificacion-v1.md).
|
|
41
|
+
|
|
42
|
+
## Cómo usarlo
|
|
43
|
+
|
|
44
|
+
Para desarrollar o ejecutar el código fuente necesitas [Bun](https://bun.com) 1.4.4 o más reciente.
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
bun install
|
|
48
|
+
bun run repl # REPL interactivo
|
|
49
|
+
bun run src/cli.ts programa.cdx # ejecutar un archivo; la entrada estándar alimenta a leer()
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Como biblioteca, en el navegador o en Bun (una vez publicada la versión):
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
npm install codexivo@0.2.0
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { run } from 'codexivo';
|
|
60
|
+
|
|
61
|
+
const resultado = run('imprimir("Hola desde Codexivo");');
|
|
62
|
+
console.log(resultado.output); // "Hola desde Codexivo\n"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
El paquete incluye un bundle ESM compatible con navegador y los tipos como fuentes TypeScript. Importar la biblioteca no
|
|
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
|
|
69
|
+
incluye los campos `os`, `cpu` y, en Linux, `libc`. El gestor instala la variante compatible y `postinstall` verifica su versión
|
|
70
|
+
y enlaza o copia el ejecutable a `bin/codexivo.exe` del CLI. El nombre interno también funciona en Linux y macOS.
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
npm install --global @codexivo/cli@0.2.0
|
|
74
|
+
codexivo # REPL
|
|
75
|
+
codexivo programa.cdx # ejecutar un archivo
|
|
76
|
+
```
|
|
77
|
+
|
|
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
|
|
79
|
+
la instalación con npm; el comando resultante es el ejecutable nativo y funciona sin Node.js ni Bun en el `PATH`.
|
|
80
|
+
|
|
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.
|
|
84
|
+
|
|
85
|
+
Las variantes publicadas son:
|
|
86
|
+
|
|
87
|
+
| Sistema | Arquitectura | libc | Paquete |
|
|
88
|
+
| -------------- | ------------ | ----- | --------------------------- |
|
|
89
|
+
| Linux | x64 | glibc | `codexivo-linux-x64` |
|
|
90
|
+
| Linux | ARM64 | glibc | `codexivo-linux-arm64` |
|
|
91
|
+
| Linux (Alpine) | x64 | musl | `codexivo-linux-x64-musl` |
|
|
92
|
+
| Linux (Alpine) | ARM64 | musl | `codexivo-linux-arm64-musl` |
|
|
93
|
+
| macOS | x64 | — | `codexivo-darwin-x64` |
|
|
94
|
+
| macOS | ARM64 | — | `codexivo-darwin-arm64` |
|
|
95
|
+
| Windows | x64 | — | `codexivo-windows-x64` |
|
|
96
|
+
| Windows | ARM64 | — | `codexivo-windows-arm64` |
|
|
97
|
+
|
|
98
|
+
También puedes descargar un ejecutable autónomo desde [Releases](https://github.com/UrielCuriel/codexivo/releases), sin
|
|
99
|
+
instalar Node.js ni Bun. Hay versiones x64 y ARM64 para Linux, macOS y Windows; Linux ofrece glibc y musl (Alpine).
|
|
100
|
+
En Linux y macOS, dale permiso de ejecución con `chmod +x codexivo-*` antes de usarlo.
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
./codexivo-linux-x64 programa.cdx
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
En Windows, por ejemplo: `.\codexivo-windows-x64.exe programa.cdx`.
|
|
107
|
+
|
|
108
|
+
El intérprete compila el programa a instrucciones para una máquina propia que se puede pausar, ejecutar paso a paso y que
|
|
109
|
+
reporta cada decisión, asignación y llamada. Eso es lo que permite visualizar cómo piensa un programa. Los detalles están en la
|
|
110
|
+
[arquitectura](./docs/arquitectura.md).
|
|
111
|
+
|
|
112
|
+
## Scripts
|
|
113
|
+
|
|
114
|
+
- `bun test` — pruebas.
|
|
115
|
+
- `bun check` — revisión de tipos.
|
|
116
|
+
- `bun fmt` / `bun fmt --check` — aplicar o comprobar formato; configuración en `bunfig.toml`.
|
|
117
|
+
- `bun run repl` — REPL.
|
|
118
|
+
- `bun run build` — biblioteca ESM y ejecutable autónomo para el sistema actual.
|
|
119
|
+
- `bun run build:lib` — construir solamente la biblioteca para navegador.
|
|
120
|
+
- `bun run build:binary` — ejecutable autónomo para el sistema actual en `dist/binaries/`.
|
|
121
|
+
- `bun run build:binary bun-windows-x64` — compilación cruzada para un destino específico.
|
|
122
|
+
- `bun run build:binaries` — los ocho destinos de Linux/macOS/Windows, x64/ARM64.
|
|
123
|
+
- `bun run test:package` — instalar los tarballs reales con npm, compilar con Vite y probar el comando nativo sin Node.js ni Bun en el `PATH`.
|
|
124
|
+
|
|
125
|
+
Al integrar cambios en `main` (por merge o push), el workflow incrementa automáticamente la versión con `bun pm version patch`,
|
|
126
|
+
crea el commit y el tag y continúa con las validaciones y la publicación en la misma ejecución. El commit automático no
|
|
127
|
+
dispara otra publicación. El workflow toma el estado más reciente de `main`, por lo que merges muy próximos pueden agruparse.
|
|
128
|
+
Desde **Actions → Publicar → Run workflow**, en `main`, se puede elegir `patch`, `minor` o `major` para una publicación manual.
|
|
129
|
+
|
|
130
|
+
También se admiten tags `v*` creados manualmente: deben coincidir con `package.json` y no incrementan la versión otra vez.
|
|
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`;
|
|
132
|
+
las estables, con `latest`. Los ejecutables y sus sumas SHA-256 se adjuntan a la release. Los binarios no están firmados ni
|
|
133
|
+
notarizados.
|
|
134
|
+
|
|
135
|
+
## Qué sigue
|
|
136
|
+
|
|
137
|
+
- [x] Lexer, parser y máquina con posiciones exactas, errores con pistas y límites deterministas
|
|
138
|
+
- [x] Ejecución paso a paso, eventos y fotografías del estado para visualización
|
|
139
|
+
- [x] `imprimir`, `leer`, `leer_número`, comentarios, `nulo`
|
|
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)
|
|
144
|
+
- [ ] Sitio con documentación y sandbox: `codexivo.urielcuriel.dev`
|
|
145
|
+
|
|
146
|
+
## Cómo contribuir
|
|
147
|
+
|
|
148
|
+
- Reportando errores o problemas
|
|
149
|
+
- Sugiriendo nuevas características
|
|
150
|
+
- Contribuyendo con código (lee [`AGENTS.md`](./AGENTS.md))
|
|
151
|
+
- Mejorando la documentación
|
|
152
|
+
- Compartiendo el proyecto con otras personas
|
|
153
|
+
|
|
154
|
+
## ¿Quién está detrás de este proyecto?
|
|
155
|
+
|
|
156
|
+
Mi nombre es [Uriel Curiel](https://twitter.com/UrielCuriel), soy un desarrollador de software con más de 8 años de
|
|
157
|
+
experiencia en el desarrollo de aplicaciones web y móviles. Me apasiona la tecnología y el aprendizaje, y me encanta compartir mis conocimientos con los demás. Puedes encontrarme en [Twitter](https://twitter.com/UrielCuriel) y [LinkedIn](https://www.linkedin.com/in/urielcuriel/).
|
|
158
|
+
|
|
159
|
+
Puedes seguir las actualizaciones de este proyecto en mi blog [urielcuriel.dev](https://urielcuriel.dev/blog), en la serie
|
|
160
|
+
«Construyendo Codexivo».
|