|
|||||||
| PowerRustCOBOL Nuevo entorno RAD de Cobol, con características muy interesantes, como llamadas nativas a APIs (REST) y soporte de la IA Generativa. Creado y mantenido por nuestro forero Eslopes |
|||||||
![]() |
|
Creador de
PowerRustCOBOL ![]()
|
EXEC RUST deja de ser una imitación interpretada y pasa a ser Rust real, compilado dentro del binario de su programa.
Lo que había antes EXEC RUST interpretaba un micro-lenguaje de cuatro formas: asignación compuesta, asignación simple, "let" como operación nula, y aritmética entera. Lo que no reconocía lo escribía en un log de depuración y continuaba. Un bloque de Rust auténtico "funcionaba" sin hacer absolutamente nada: sin error, sin salida, sin nada que diagnosticar. Esa rama se ha eliminado, no rodeado. Lo que hay ahora Cada bloque se compila como una función Rust real dentro del mismo crate que la aplicación ya construía. No hay un compilador nuevo ni carga dinámica: una aplicación compilada de PowerRustCOBOL siempre fue un crate de Rust generado, así que esto es un módulo generado más. Dispone del lenguaje completo: cierres, genéricos, cadenas de iteradores, match, el operador ? y toda la biblioteca std. Dos clases de bloque
Por eso los 48 tipos CLASS RUST-* son un suelo y no un techo: defina su propio tipo en un bloque de items, nómbrelo con un CLASS y declare elementos de él. CATCH RUST-EXCEPTION Un panic dentro de un bloque se captura con TRY ... CATCH RUST-EXCEPTION e ... END-TRY: DISPLAY e imprime su texto en claro y el programa continúa. Un CATCH EXCEPTION corriente NO lo captura, y un THROW de COBOL nunca llega a la cláusula de Rust. Un mismo TRY puede llevar las dos cláusulas y cada clase va a la suya. Los errores se informan en sus términos Un error de tipos dentro de un bloque detiene la compilación en SU línea y SU columna de EXEC RUST, nunca en el código generado. Un diagnóstico que no se pueda atribuir a algo que usted escribió se muestra tal cual, en lugar de culpar a una línea inocente de COBOL. Qué puede cruzar a un bloque Solo un elemento USAGE OBJECT REFERENCE cuya CLASS nombre un tipo de Rust. Un elemento PIC se rechaza por su nombre: su valor es un decimal escalado o un campo de anchura fija, y no existe un tipo de Rust que sea eso. El nombre en Rust es su nombre COBOL en minúsculas con los guiones convertidos en subrayados: WS-USER-NAME es ws_user_name. Y es una referencia mutable, así que se asigna a través de él: Código:
*contador = 10;
texto.push_str("x");
Código:
REPOSITORY.
CLASS RUST-STRING IS "Rust.String"
CLASS RUST-I32 IS "Rust.i32"
EXEC RUST
use eframe::egui;
use std::sync::{Arc, Mutex};
pub struct ButtonDialog { pub clicked: Arc<Mutex<i64>> }
impl eframe::App for ButtonDialog {
fn ui(&mut self, ui: &mut egui::Ui, _f: &mut eframe::Frame) {
ui.horizontal(|ui| {
for caption in [1_i64, 2_i64] {
if ui.button(caption.to_string()).clicked() {
*self.clicked.lock().unwrap() = caption;
ui.ctx().send_viewport_cmd(egui::ViewportCommand::Close);
}
}
});
}
}
pub fn ask(title: &str) -> i64 {
let clicked = Arc::new(Mutex::new(0_i64));
let out = clicked.clone();
let _ = eframe::run_native(title, eframe::NativeOptions::default(),
Box::new(move |_cc| Ok(Box::new(ButtonDialog { clicked: out }))));
let v = *clicked.lock().unwrap();
v
}
END-EXEC.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 window-title USAGE IS OBJECT REFERENCE RUST-STRING
VALUE "Hello, From COBOL".
01 clicked-button USAGE IS OBJECT REFERENCE RUST-I32.
01 ws-error PIC X(120).
PROCEDURE DIVISION.
MAIN.
TRY
EXEC RUST
*clicked_button = ask(window_title.as_str());
END-EXEC
CATCH RUST-EXCEPTION ws-error
DISPLAY "Window failed: " ws-error
END-TRY.
DISPLAY clicked-button.
GOBACK.
Abrir una ventana con run_native es cosa de programas de consola: un formulario ya posee su propio bucle de eventos y anidar otro aborta el proceso. Compilar y ejecutar Un programa que contiene un bloque se compila antes de ejecutarse, y Run lo hace por usted; uno sin bloques conserva intacto el camino rápido del intérprete. Compilar necesita la cadena de herramientas de Rust (rustup.rs); el binario que usted entrega, no. Se compila para el sistema anfitrión: Windows en Windows, macOS en macOS, Linux en Linux. La guía del desarrollador y la Base de Conocimiento del sistema incluyen ya la sección completa con este ejemplo. Anthropic Claude Codex Agent |
||||||||
|
|
|
![]() |
| Herramientas | |
|
|
| Archivo - Cobol Foro | Contactar con Nosotros - Cobol Foro | |||||||