Eslopes
18 de junio de 2026, 23:14
Hemos completado una funcionalidad mayor: la Estructura COBOL de los formularios, el modelo de datos compartidos (GLOBAL/EXTERNAL) y un puente FFI hacia Rust.
1. Editor de Estructura COBOL
El inspector de propiedades del formulario lista ahora las cinco secciones COBOL compartidas del módulo (SPECIAL-NAMES, REPOSITORY, FILE-CONTROL, FILE SECTION y WORKING-STORAGE), además de los procedimientos de usuario. Al seleccionar una se abre un editor emergente. Cada bloque se teje literalmente en el programa generado, en el orden correcto de divisiones y secciones.
2. Datos compartidos: GLOBAL, EXTERNAL y GLOBAL EXTERNAL
- GLOBAL: visible para los programas contenidos (manejadores de eventos y procedimientos de usuario).
- EXTERNAL: una única copia física compartida en toda la unidad de ejecución por su nombre real (válido solo en niveles 01/77 y FD; el verificador marca cualquier otro uso).
- GLOBAL EXTERNAL: ambas a la vez.
3. Procedimientos de usuario
Programas anidados con nombre que los manejadores pueden llamar con CALL "nombre". Se generan IS COMMON para que un manejador (programa hermano) pueda llamarlos, y ven los datos GLOBAL del formulario.
4. Puente Rust-FFI (vista previa)
REPOSITORY declara tipos de Rust como clases COBOL; cada formulario nuevo viene precargado con el conjunto curado (primitivos y clases estándar comunes): CLASS RUST-STRING IS "Rust.String", etc. Un dato 05 NOMBRE USAGE IS OBJECT REFERENCE RUST-STRING VALUE "..." crea un objeto Rust real, e INVOKE NOMBRE "metodo" [USING ...] [RETURNING ...] llama al método de Rust, convirtiendo argumentos y resultados. Los objetos se liberan sin fugas.
Ejemplo: INVOKE S "len" sobre un Rust.String "hello" devuelve 5; "to_uppercase" devuelve "HELLO"; también funcionan i64/f64/bool/Vec (add, pow, sqrt, push, etc.).
5. Un único editor con IntelliSense en todas partes
Las tres superficies de edición de código (editor principal, editor de manejadores de eventos y editor de Estructura COBOL) usan ahora el mismo motor: IntelliSense, coloreado de sintaxis y buscar/reemplazar. Además, las palabras reservadas de COBOL-2002 se incluyen en el autocompletado, y las comillas dobles vuelven a ser literales de cadena (el acceso a propiedades/métodos pasa a la sintaxis obj::propiedad / obj::metodo()).
Proyecto de prueba
Incluimos examples/repository-test: un formulario con un botón "Run REPOSITORY tests" y un ListBox que ejecuta una batería de llamadas INVOKE y añade cada resultado como una nueva línea.
Pruebas
- crates/cobolt-runtime/tests/test_external.rs: datos EXTERNAL compartidos en la unidad de ejecución.
- crates/cobolt-runtime/tests/test_user_proc.rs: CALL a un procedimiento COMMON que actualiza un dato GLOBAL.
- crates/cobolt-runtime/tests/test_rust_ffi.rs: INVOKE hacia Rust (len, to_uppercase, USING).
- crates/cobolt-runtime/src/rust_bridge.rs: pruebas unitarias del puente (creación, drop sin fugas, panic capturado).
- crates/cobolt-ide/src/panels/editor.rs: comillas como literal y autocompletado.
Resultado: cargo test --workspace en verde (66 binarios de prueba, 0 fallos).
Anthropic Code Agent
1. Editor de Estructura COBOL
El inspector de propiedades del formulario lista ahora las cinco secciones COBOL compartidas del módulo (SPECIAL-NAMES, REPOSITORY, FILE-CONTROL, FILE SECTION y WORKING-STORAGE), además de los procedimientos de usuario. Al seleccionar una se abre un editor emergente. Cada bloque se teje literalmente en el programa generado, en el orden correcto de divisiones y secciones.
2. Datos compartidos: GLOBAL, EXTERNAL y GLOBAL EXTERNAL
- GLOBAL: visible para los programas contenidos (manejadores de eventos y procedimientos de usuario).
- EXTERNAL: una única copia física compartida en toda la unidad de ejecución por su nombre real (válido solo en niveles 01/77 y FD; el verificador marca cualquier otro uso).
- GLOBAL EXTERNAL: ambas a la vez.
3. Procedimientos de usuario
Programas anidados con nombre que los manejadores pueden llamar con CALL "nombre". Se generan IS COMMON para que un manejador (programa hermano) pueda llamarlos, y ven los datos GLOBAL del formulario.
4. Puente Rust-FFI (vista previa)
REPOSITORY declara tipos de Rust como clases COBOL; cada formulario nuevo viene precargado con el conjunto curado (primitivos y clases estándar comunes): CLASS RUST-STRING IS "Rust.String", etc. Un dato 05 NOMBRE USAGE IS OBJECT REFERENCE RUST-STRING VALUE "..." crea un objeto Rust real, e INVOKE NOMBRE "metodo" [USING ...] [RETURNING ...] llama al método de Rust, convirtiendo argumentos y resultados. Los objetos se liberan sin fugas.
Ejemplo: INVOKE S "len" sobre un Rust.String "hello" devuelve 5; "to_uppercase" devuelve "HELLO"; también funcionan i64/f64/bool/Vec (add, pow, sqrt, push, etc.).
5. Un único editor con IntelliSense en todas partes
Las tres superficies de edición de código (editor principal, editor de manejadores de eventos y editor de Estructura COBOL) usan ahora el mismo motor: IntelliSense, coloreado de sintaxis y buscar/reemplazar. Además, las palabras reservadas de COBOL-2002 se incluyen en el autocompletado, y las comillas dobles vuelven a ser literales de cadena (el acceso a propiedades/métodos pasa a la sintaxis obj::propiedad / obj::metodo()).
Proyecto de prueba
Incluimos examples/repository-test: un formulario con un botón "Run REPOSITORY tests" y un ListBox que ejecuta una batería de llamadas INVOKE y añade cada resultado como una nueva línea.
Pruebas
- crates/cobolt-runtime/tests/test_external.rs: datos EXTERNAL compartidos en la unidad de ejecución.
- crates/cobolt-runtime/tests/test_user_proc.rs: CALL a un procedimiento COMMON que actualiza un dato GLOBAL.
- crates/cobolt-runtime/tests/test_rust_ffi.rs: INVOKE hacia Rust (len, to_uppercase, USING).
- crates/cobolt-runtime/src/rust_bridge.rs: pruebas unitarias del puente (creación, drop sin fugas, panic capturado).
- crates/cobolt-ide/src/panels/editor.rs: comillas como literal y autocompletado.
Resultado: cargo test --workspace en verde (66 binarios de prueba, 0 fallos).
Anthropic Code Agent