COBOL IDE — Registro de Cambios (Changelog)
Reglas de Versionado
- PATCH (0.0.x): Correcciones de errores, mejoras menores y correcciones de compilación.
- MINOR (0.x.0): Nuevas funcionalidades — reinicia el PATCH a 0.
- MAJOR (x.0.0): Cualquier cambio en el intérprete — reinicia MINOR y PATCH a 0.
[hr]
[0.0.1] — 2026-05-29 (versión inicial etiquetada)
Fundación (pre-etiqueta, post-parser)
Todo el trabajo que aparece a continuación se completó antes de aplicar la etiqueta 0.0.1. Se cataloga aquí como el conjunto base de características.
Runtime y Toolchain
- cobol-semantic — Estructura base del crate de análisis semántico; resolución de identificadores y comprobación básica de tipos.
- cobol-runtime / intérprete — Intérprete de recorrido de árbol para todos los tipos de sentencias del Árbol de Sintaxis Abstracta, incluyendo Try/Catch y Throw.
- cobol-stdlib — Biblioteca estándar con funciones auxiliares de COBOL.
- cobol-cli — Binario de línea de comandos (cobol run <archivo>).
- Palabra clave INVOKE añadida.
- Verbos PLAY ANIMATION y STOP ANIMATION añadidos.
- Soporte completo de TRY / CATCH EXCEPTION / FINALLY.
IDE Shell (cobol-ide)
- Shell basado en eframe/egui con efecto de vidrio líquido y paleta azul marino.
- Icono de dock para macOS generado programáticamente.
- Editor de código con resaltado de sintaxis y autocompletado.
- Panel de consola con salida en tiempo real.
- Sistema de proyectos con archivo cobol.toml.
- Soporte de atajos de teclado (Guardar, Deshacer, Rehacer).
Diseñador de Formularios
- Modelo completo de formularios con serialización y deserialización en formato XML.
- Generador de código COBOL automático desde los formularios.
- Veintinueve (29) tipos de controles soportados:
Button,
Label,
TextBox,
CheckBox,
RadioButton,
ComboBox,
ListBox,
NumericUpDown,
DateTimePicker,
GroupBox,
Panel,
TabControl,
Splitter,
DataGrid,
TreeView,
PictureBox,
ProgressBar,
Slider,
Line,
Shape,
MenuBar,
ToolBar,
StatusBar,
Timer,
AgentObject,
RestClient,
SqlDatabase (no visual),
ModalWindow.
- Caja de herramientas con iconos vectoriales.
- Inspector de propiedades avanzado.
- Sistema completo de animaciones por control.
- Vista previa en ventana separada con efectos de vidrio.
- Soporte de fondo con imagen y transparencia.
- Deshacer y Rehacer completo.
- Preajustes de dispositivos (iPhone, iPad, Apple Watch, teléfonos Android, tabletas Android, relojes Android y personalizado).
Recursos en Implementación
- Soporte de localización para el IDE y el Diseñador de Formularios: Inglés, Español, Portugués, Japonés y Chino.
- Ejemplos prácticos para cada uno de los controles.
- Documentación completa.
- Pruebas NIST COBOL-85.
Otros cambios
Se renombraron los identificadores COBOLT-* a COBOL-* en todo el código.
Tengo que reconocer que los japoneses fueron geniales, hace 35 años, cuando crearon el PowerCOBOL. Empecé con un concepto simple: un formulario, un programa. Pero pronto comencé a encontrar dificultades en la organización del código, además de conflictos con nombres de variables y un aumento exponencial de la complejidad del código final.
Decidí dar un paso atrás y utilizar programas anidados, exactamente como lo hacía el añorado PowerCOBOL. El código quedó más limpio y el modelo está generando código de manera mucho más fácil.
El resultado final se acerca conceptualmente al Power, aunque mantiene una buena distinción, además de ser infinitamente superior en términos de recursos. Aun así, me quito el sombrero ante los diseñadores de Japón. ¡Hicieron un trabajo excelente y primoroso!
COBOL IDE — Registro de Cambios (Changelog)
[1.0.0] — 2026-05-29
Major — Arquitectura de programas anidados (modelo Opción C de PowerCOBOL)
Esta es la primera actualización importante de versión. Todo el modelo de generación de código y almacenamiento de formularios ha sido rediseñado para coincidir con el enfoque de Fujitsu PowerCOBOL 3.0: cada manejador de eventos se convierte en un programa anidado COBOL-85; el archivo .cfrm es la única fuente de verdad; el archivo .cbl generado es un artefacto de compilación que el usuario nunca edita.
Formato de archivo .cfrm (v1.0 — carga compatible con versiones anteriores)
Se añadieron tres nuevas secciones XML al archivo .cfrm:
[*] <working-storage><![CDATA[...]]></working-storage> — declaraciones de datos COBOL en bruto emitidas literalmente en la WORKING-STORAGE del programa exterior; soporta cláusulas GLOBAL y EXTERNAL para compartir datos a nivel de formulario y entre formularios.
[*] <form-events> — manejadores de ciclo de vida OnLoad y OnClose almacenados como elementos hijos <Event> con cuerpos CDATA.
[*] <deleted-controls> — papelera de reciclaje: el código de eventos de controles eliminados se conserva aquí (nunca se emite al .cbl) para poder restaurarlo posteriormente.
Los elementos <Event> ahora utilizan formato de inicio/fin con cuerpo CDATA para las sentencias COBOL del usuario. Las etiquetas antiguas de autocierre <Event .../> todavía se cargan correctamente (el código estará vacío).
Cambios en el modelo (cobol-forms)
[*] EventBinding gana el campo code: String — sentencias COBOL en bruto para este manejador.
[*] EventBinding::for_control(ctrl_id, event) — deriva automáticamente el nombre del párrafo como "CTRL-ID--EVENT-NAME" (separador de doble guion).
[*] EventBinding::has_code(), code_line_count() — funciones auxiliares para la interfaz de usuario.
[*] derive_paragraph_name(ctrl_id, event) -> String — función de utilidad pública.
[*] Form gana los campos: user_ws_source: String, form_events: Vec<EventBinding>, deleted_code: Vec<DeletedControlCode>.
[*] Form::new() pre-popula form_events con stubs vacíos de OnLoad / OnClose.
[*] Form::recycle_control(id, timestamp) — mueve el código de eventos a la papelera de reciclaje antes de eliminar; restore_from_recycle(timestamp, target_id) lo recupera.
[*] Form::control_has_code(id) — devuelve [(event, line_count)] para el diálogo de la interfaz.
[*] Control::ensure_event(event) — vinculación idempotente de evento con nombre derivado automáticamente.
[*] Estructura DeletedControlCode — control_id, deleted_at (marca de tiempo ISO), events.
Panel de Propiedades (cobol-ide)
[*] La sección "Event Bindings" fue reemplazada por una sección de solo lectura "Events" que muestra puntos de estado ●/○ y conteo de líneas por evento soportado; el usuario es dirigido a la Vista de Código para editar.
[*] Se eliminó la sección "COBOL Paragraphs" de los controles de gráficos (fue reemplazada por la Vista de Código).
[*] Se eliminaron los campos de preparación new_ev_name / new_ev_para del PropertiesPanel.
Generación de Código (cobol-codegen) — Fase 3 (pendiente)
La reescritura de PROCEDURE DIVISION para emitir programas anidados es el siguiente paso.
Runtime (cobol-runtime) — Fase 4 (pendiente)
La herencia de ámbito GLOBAL y el envío de programas anidados es el siguiente paso.
Panel Vista de Código del IDE — Fase 5 (pendiente)
Navegador de eventos + editor COBOL por evento es el siguiente paso.
[hr]
[0.2.2] — 2026-05-29
Corrección — Chart SET-TABLE genera COBOL inválido cuando DataSource/DataCount no están configurados
La función write_chart_stubs() utilizaba .map().unwrap_or_else(fallback) para establecer valores predeterminados vacíos para las propiedades DataSource / DataCount, pero si la propiedad existía como cadena vacía Some(""), unwrap_or_else nunca se ejecutaba. El resultado era código COBOL generado inválido:
```cobol
MOVE TO WS-LIN-13-SELECTED-IDX *> missing source
CALL "COBOL-CHART-SET-TABLE" USING "LIN-13" *> missing args