gnuCOBOL 3.2

Aplicaciones 17 de mar. de 2024

gnuCobol 3.2 Listo para la Industria

GnuCOBOL "ha alcanzado una madurez industrial y puede competir con ofertas propietarias en todos los ambientes", cuenta con el colaborador Fabrice Le Fessant, en una charla FOSDEM.

20 Years in the Making, GnuCOBOL Is Ready for Industry
GnuCOBOL “has reached an industrial maturity and can compete with proprietary offers in all environments,” boasted contributor Fabrice Le Fessant, in a FOSDEM talk.

Características de gnuCobol

GnuCOBOL produce ejecutables nativos a partir del código fuente COBOL.
Funciona en Linux, BSD, en sistemas Unix propietarios, macOS y Windows, entre otros.

La versión 3.2, es la mejor versión para todos los usuarios.
Se ha probado exhaustivamente en una variedad de plataformas y se utiliza ya en entornos comerciales.

GnuCOBOL 3.2 incluye muchas características nuevas en comparación con la versión anterior, al tiempo que mantiene la compatibilidad total con el código fuente. algunos de los aspectos más destacados:

  • Gestión de dialectos Cobol mejorado, incluidos valores predeterminados para que coincidan mejor con el dialecto seleccionado.
  • Un GCOS de dialecto completamente nuevo y con soporte para más declaraciones COBOL, funciones intrínsecas y sintaxis "antiguas" y para los nuevos dialectos.
  • Se han mejorado enormemente los tiempos de ejecutación para varias declaraciones.
  • Se ha mejorado con un menor uso de memoria, especialmente si se habilita las comprobaciones de tiempo de ejecución.
  • Cambios en fileio para admitir LINE-SEQUENTIAL (COBOL2023) y opciones en tiempo de ejecución para cambiar la forma en que se manejar los archivos.
  • Mejoras de depuracion a nivel de fuente mediante GDB y soporte de coredump.
  • Por supuesto, incluye integración con C.
  • Soporte para 19 dialectos COBOL.
  • Más de 9740 NIST COBOL 85 test pasados y más de 1000 checks internal pasados correctamente.
  • Ahora se dispone de un IDE Integrado para depuración y soporte completo para GNU gdb.

Instalación en Debian 12 -Bookworm-

Actualmente en la versión estable de Debian 12, las versiones disponibles de gnuCOBOL son la version 3.1.2 y la 4.0.early (una pre-release).

Dado que ya desde el 28 de julio de 2023 está disponible la versión 3.2, vamos a explicar como instalar esta versión estable en nuestro Debian 12, a partir del código disponible.

Pasos:

  • Descargar código fuente de Cobol 3.2
  • Compilar el código fuente
  • Instalar en una ruta predeterminada.
  • Configurar variables de entorno COBOL

Descargar el Código Fuente de Cobol 3.2.0

Puedes descargar la última versión simplemente pulsando en el siguiente enlace:

Una vez descargado crea un directorio en el que vayas a realizar la descompresión del codigo fuente y extrae el fichero ahí, puedes hacerlo con el comando:

# Crear y cambiarse al directorio donde vayamos a extraer el codigo:
mkdir -p ~/sourceCobol
cd ~/sourceCobol

# Extraer el código fuente:
tar --lzip -xvf /ruta_descarga/gnucobol-3.2.tar.lz

Compilar el código fuente de Cobol 3.2

Para compilar necesitaremos alguna herramienta, que vamos a instalar de la siguiente forma:

# Instalamos lo mínimo para compilar
sudo apt -y install -y build-essential gcc

Cambiate al directorio en que se ha extraido el código fuente. Allí luego ejecutaremos los comandos necesarios para la compilación.

Nota: En mi caso quiero que toda la instalación quede separada del sistema y se copie todo en /opt/gnuCobol.
Si no indico nada se instalarán los binarios en /usr/local y el resto en la ruta de librerias, ruta de ficheros man, etc.
# Cambiamos a ruta de cod.fuente (gnucobol-3.2)
cd ~/sourceCobol/gnucobol-3.2

# Preparamos todo para la compilación (configure)
# Defino ruta de instalación personalizada
./configure --prefix=/opt/gnuCobol

Se comenzarán a realizar una serie de comprobaciones y se generarán los ficheros necesarios para poder realizar la compilación.
Tras unos breves segundo y unas cuantas línea de texto del proceso verás algo similar a esto:

[...]
configure: GnuCOBOL Configuration:
configure:  CC                gcc
configure:  CFLAGS            -O2 -pipe -finline-functions -fsigned-char -Wall -Wwrite-strings -Wmissing-prototypes -Wno-format-y2k
configure:  LDFLAGS            -Wl,-z,relro,-z,now,-O1
configure:  LIBCOB_LIBS        -lgmp  -lxml2  -lncursesw -ldb-5.3
configure:  COB_CC            gcc
configure:  COB_CFLAGS        -pipe -I/opt/gnuCobol/include -Wno-unused -fsigned-char -Wno-pointer-sign
configure:  COB_LDFLAGS       
configure:  COB_DEBUG_FLAGS   -ggdb3 -fasynchronous-unwind-tables
configure:  COB_LIBS          -L${exec_prefix}/lib -lcob
configure:  COB_CONFIG_DIR    ${datarootdir}/gnucobol/config
configure:  COB_COPY_DIR      ${datarootdir}/gnucobol/copy
configure:  COB_LIBRARY_PATH  ${exec_prefix}/lib/gnucobol
configure:  COB_OBJECT_EXT    o
configure:  COB_MODULE_EXT    so
configure:  COB_EXE_EXT       
configure:  COB_SHARED_OPT    -shared
configure:  COB_PIC_FLAGS     -fPIC -DPIC
configure:  COB_EXPORT_DYN    -Wl,--export-dynamic
configure:  COB_STRIP_CMD     strip --strip-unneeded
configure:  Dynamic loading:                             System
configure:  Use gettext for international messages:      yes
configure:  Use fcntl for file locking:                  yes
configure:  Use math multiple precision library:         gmp
configure:  Use curses library for screen I/O:           ncursesw
configure:  Use Berkeley DB for INDEXED I/O:             yes
configure:  Used for XML I/O:                            libxml2
configure:  JSON I/O (no handler found):                 NO

Ya sólo nos falta realizar la compilación, simplemente desde la terminal, ejecuta el siguiente comando:

# Lanzamos compilación (make)
make

En menos de un par de minutos se compila, verás una serie de mensajes mientras se compila, similares a esto:

make  all-recursive
make[1]: se entra en el directorio '/home/luisgulo/sourceCobol/gnucobol-3.2'
Making all in .
make[2]: se entra en el directorio '/home/luisgulo/sourceCobol/gnucobol-3.2'
make[2]: se sale del directorio '/home/luisgulo/sourceCobol/gnucobol-3.2'
Making all in lib
[...]
Making all in libcob
Making all in bin
Making all in cobc
make  all-am
Making all in config
Making all in copy
Making all in po
Making all in extras
Making all in tests
Making all in cobol85
[...]
make[1]: se sale del directorio '/home/luisgulo/sourceCobol/gnucobol-3.2'

Si no has obtenido ningún error de que te falte alguna librería, ya tienes gnuCobol 3.2 compilado correctamente y listo para su instalación.

Instalación de gnuCOBOL 3.2

Cuando realizamos el configure en la carpeta del código fuente, usamos el parámetro --prefix=/opt/gnuCobol, esto va a hacer que cuando instalemos gnuCobol, se va a instalar en esta ruta.

Para mí esto es mucho "más limpio", ya que en cualquier momento simplemente borrando esa carpeta puedo "desinstalarlo" sin dejar ningún rastro de la instalación en mi sistema.

Ahora, vamos a instalarlo directamente con un comando, pero necesitaremos 'permisos de root' para crear la ruta /opt/gnuCobol y escribir alli, así que usaremos el comando sudo para realizarlo:

# Instalar GnuCOBOL 3.2
sudo make install

Configurar Variables para gnuCOBOL 3.2

Como hemos personalizado la ruta de instalación de los binarios y librerías de gnuCobol, vamos a tener que indicar mediante variables de entorno donde encontrarlo.

# Variables para COBOL (binarios y librerias)
export PATH=$PATH:/opt/gnuCobol/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/gnuCobol/lib

Si quieres que esto quede siempre disponible incluye estas lineas al final de tu fichero .bashrc

Comprobamos la version del compilador de Cobol:

# Ver version del compilador de COBOL
cobc --version

cobc (GnuCOBOL) 3.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
Esto es software libre; vea la fuente para condiciones de copia.  NO hay ninguna
 garantía; ni siquiera para COMERCIALIZACIÓN o UTILIZACIÓN PARA UN PROPÓSITO PARTICULAR.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch, Edward Hart
Compilado  Mar 17 2024 16:43:34
Empaquetado  Jul 28 2023 17:02:56 UTC
C version "12.2.0"

Test con 'holamundo.cbl'

Abrimos nuestro editor de texto favorito y creamos el fichero holamundo.cbl, dentro escribimos (respetando los espacios necesarios) el siguiente código:

       *HOLA-MUNDO en gnuCobol
       IDENTIFICATION DIVISION.
       PROGRAM-ID. holamundo.
       PROCEDURE DIVISION.
            DISPLAY "Hola mundo"
            STOP RUN.
            

También lo puedes escribir en modo más 'retro' indicando las líneas:

000001*HOLA-MUNDO en gnuCobol
000002 IDENTIFICATION DIVISION.
000003 PROGRAM-ID. holamundo.
000004 PROCEDURE DIVISION.
000005      DISPLAY "Hola mundo"
000006      STOP RUN.

Ambos códigos se pueden utilizar.

Vamos a compilar nuestro 'holamundo' desde la terminal (recuerda tener ajustadas las variables para los binarios y librerías):

# Compilar y crear binario final:
cobc -x holamundo.cbl

# Comprobar librerias del binario generado
ldd holamundo
	linux-vdso.so.1 (0x00007ffe8ec75000)
	libcob.so.4 => /opt/gnuCobol/lib/libcob.so.4 (0x00007ffaedec4000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffaedcb1000)
	libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ffaedc30000)
	libxml2.so.2 => /lib/x86_64-linux-gnu/libxml2.so.2 (0x00007ffaeda84000)
	libncursesw.so.6 => /lib/x86_64-linux-gnu/libncursesw.so.6 (0x00007ffaeda4a000)
	libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007ffaeda15000)
	libdb-5.3.so => /lib/x86_64-linux-gnu/libdb-5.3.so (0x00007ffaed853000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ffaedf46000)
	libicuuc.so.72 => /lib/x86_64-linux-gnu/libicuuc.so.72 (0x00007ffaed655000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ffaed636000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007ffaed607000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffaed528000)
	libicudata.so.72 => /lib/x86_64-linux-gnu/libicudata.so.72 (0x00007ffaeb600000)
	libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ffaeb200000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ffaed506000)


# Ejecutar el binario creado (holamundo)
./holamundo
Hola mundo

Recursos de GnuCOBOL

  • Extensión para VSCode y Codium para depuración con GDB
  • GIT de la extensión para GDB y uso de la misma
GitHub - OCamlPro/superbol-studio-oss: Open-Source part of the SuperBOL Studio, including the Vscode mode with LSP
Open-Source part of the SuperBOL Studio, including the Vscode mode with LSP - OCamlPro/superbol-studio-oss
  • Chuleta para el compilador gnuCOBOL
  • Sitio Oficial de gnuCOBOL
GnuCOBOL - GNU Project
Proyecto GnuCOBOL
  • Guía para Programadores de GnuCOBOL
GnuCOBOL Programmer’s Guide
GnuCOBOL Programmer’s Guide

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux