Haciendo el caso para COBOL

Haciendo el caso para COBOL

Tal vez inesperadamente, el 14 de marzo de este año, los angeles lista de correo de GCC recibió una anuncio sobre el lanzamiento de los angeles primera COBOL front-end para el compilador GCC. Para los no iniciados, COBOL vio su primer lanzamiento en 1959, convirtiéndolo con 63 años en uno de los lenguajes de programación más antiguos que todavía se usan regularmente. Los angeles razón de su persistencia se debe principalmente a su enfoque desde el principio como un lenguaje específico de dominio orientado a transacciones (ADSL).

Su acrónimo significa Not unusual Industry-Orientated Language, que claramente hace referencia al dominio al que se dirige. Incluso con el estándar COBOL 2014 exact, sigue siendo esencialmente el mismo lenguaje principalmente orientado a transacciones, al tiempo que agrega soporte para estilos de programación estructurados, procedimentales y orientados a objetos. Derivando los angeles mayor parte de su núcleo de Grace Hopper FLOW-MATIC lenguaje, permite describir de manera eficiente los angeles lógica comercial como se encontraría en instituciones financieras o empresas, en un inglés claro.

A diferencia de los mayores GnuCOBOL proyecto, que traduce COBOL a C, el nuevo GCC-COBOL El proyecto front-end elimina ese paso intermedio y compila directamente el código fuente COBOL en código binario. Todo lo cual puede plantear los angeles pregunta de por qué se invirtió todo un año-hombre en este esfuerzo por un idioma que ha sido declarado ‘muerto’ probablemente durante al menos los angeles mitad de sus 63 años de existencia.

¿Tiene sentido aprender o incluso usar COBOL hoy? ¿Necesitamos un nuevo compilador COBOL?

Conseguir el remate

Un mainframe IBM 704 en uso en NACA en 1957. (Crédito: NASA)
Un mainframe IBM 704 en uso en NACA en 1957. (Crédito: NASA)

Para comprender completamente de dónde proviene COBOL, tenemos que viajar hasta los angeles década de 1950. Este fue un tiempo aún muchos años antes de que las minicomputadoras como los angeles PDP-8, sin importar las computadoras domésticas como los angeles Apple I y otras similares, se convirtieran en una cosa. En estos días, los dinosaurios acechaban en las profundidades de las universidades y las empresas, con mainframes cada vez más transistorizados y arquitecturas de sistemas muy dispares.

Incluso dentro de una serie de mainframes de un solo fabricante existían stories diferencias, por ejemplo, IBM Serie 700 y 7000. Dado que cada mainframe tenía que programarse para el propósito previsto, generalmente tareas científicas o comerciales, y esto a menudo significaba que el instrument para los mainframes más antiguos de una empresa o universidad no se ejecutaría en el {hardware} más nuevo sin modificaciones o reescrituras, lo que aumenta significativamente el costo. .

Incluso antes de que COBOL entrara en escena, este problema fue reconocido por personas como John W. Backus de BNF fama, quien propuso el desarrollo de una alternativa práctica al lenguaje ensamblador a sus superiores en IBM a fines de 1953. Esto resultó en el desarrollo del FORTRAN lenguaje de programación científico, junto con el CECEO lenguaje de programación matemática, ambos dirigidos inicialmente al IBM 704 computadora central científica.

FORTRAN y otros lenguajes de programación de alto nivel ofrecen dos beneficios sobre los angeles escritura de programas en el lenguaje ensamblador del mainframe: portabilidad y desarrollo eficiente. Esto último se debe principalmente a los angeles posibilidad de usar declaraciones singulares en lenguaje de alto nivel que se traducen en un conjunto optimizado de instrucciones de ensamblaje para el {hardware}, proporcionando un sistema modular que permitió a los científicos y a otros crear sus propios programas como parte de su investigación. , estudios u otras aplicaciones en lugar de aprender los angeles arquitectura de un mainframe específico.

Los angeles característica de portabilidad de un lenguaje de alto nivel también permitió a los científicos compartir programas FORTRAN con otros, quienes luego podrían ejecutarlos en los mainframes de su instituto, independientemente de los angeles arquitectura del sistema del mainframe y otros detalles del {hardware}. Todo lo que requería generation un compilador FORTRAN disponible.

Una consola de operador UNIVAC I en el Museo de Ciencias de Boston, EE. UU.
Una consola de operador UNIVAC I en el Museo de Ciencias de Boston, EE. UU.

Mientras que FORTRAN y LISP se centraron en facilitar los angeles programación en los dominios científicos, las empresas tenían necesidades muy diferentes. Las empresas operan con estrictos conjuntos de reglas, de procedimientos que deben seguirse para transformar entradas como transacciones y flujos de ingresos en nóminas y declaraciones trimestrales, siguiendo las reglas establecidas por los angeles oficina de impuestos y otras instancias oficiales. Transformar esas reglas comerciales escritas en algo que funcionara exactamente de los angeles misma manera en un mainframe fue un desafío importante. Aquí es donde Grace Hopper FLOW-MATIC language, anteriormente Industry Language 0, o B-0, brindó una solución dirigida al UNIVAC Ilos angeles primera computadora empresarial dedicada del mundo.

Las experiencias de Grace Hopper indicaron que las empresas preferían el uso de palabras sencillas en inglés, en lugar de símbolos y notación matemática. El papel de los angeles Sra. Hopper como asesora técnica del CODASILO comité que creó el primer estándar COBOL fue un reconocimiento tanto del éxito de FLOW-MATIC como de los angeles experiencia de los angeles Sra. Hopper en el tema. Como diría más tarde en una entrevista de 1980, COBOL 60 es 95% FLOW-MATIC. El otro 5% procedía de lenguajes competidores, como el lenguaje COMTRAN de IBM, que tenía concepts similares, pero una implementación muy diferente.

Curiosamente, una característica de COBOL antes del estándar de 2002 generation su estilo de codificación basado en columnas, que se deriva del uso de tarjetas perforadas de 80 columnas. Esto nos lleva a las muchas actualizaciones de características del estándar COBOL a lo largo de las décadas.

Estándares de su tiempo

Un formulario de codificación IBM COBOL de la década de 1960.
Un formulario de codificación IBM COBOL de los angeles década de 1960.

Un aspecto interesante de los lenguajes especialmente específicos de dominio es que reflejan el estado tanto de dicho dominio como de los angeles tecnología en ese momento. Cuando se puso en uso COBOL en los angeles década de 1960, los angeles programación no se hacía directamente en el sistema informático, sino que normalmente se proporcionaba el código al mainframe en forma de tarjetas perforadas o, con suerte, cinta magnética. Durante los angeles década de 1960, esto significaba que “ejecutar un programa” implicaba entregar una pila de tarjetas perforadas o un formulario de codificación especial para los angeles gente que disputa el mainframe, que ejecutaría el programa por usted y le devolvería los resultados.

Estos pasos intermedios significaron una complejidad adicional al desarrollar nuevos programas COBOL, y el estilo basado en columnas también generation los angeles única opción con los angeles actualización COBOL-85. Sin embargo, con los angeles próxima actualización estándar en 2002, se realizaron muchos cambios, incluida los angeles eliminación de los angeles alineación basada en columnas, adoptando código de forma libre. Esta actualización también agregó programación orientada a objetos y otras características, incluidos más tipos de datos a las representaciones de datos numéricos y de cadena algo limitadas anteriormente.

Lo que permaneció sin cambios fue los angeles falta de bloques de código de COBOL. En cambio, los angeles fuente COBOL se divide en cuatro divisiones:

  • División de identificación
  • división de medio ambiente
  • división de datos
  • División de procedimientos

Los angeles división de identificación especifica el nombre y los angeles metainformación sobre el programa, además de las especificaciones de clase e interfaz. Los angeles división de entorno especifica cualquier característica del programa que dependa del sistema que lo ejecuta, como archivos y juegos de caracteres. Los angeles división de datos se utiliza para declarar variables y parámetros. Los angeles división de procedimiento contiene las sentencias del programa. Finalmente, cada división se subdivide en secciones, cada una de las cuales se compone de párrafos.

Un mainframe IBM z14 de 2017, basado en IBM z/Architecture CISC ISA.
Un mainframe IBM z14 de 2017, basado en IBM z/Structure CISC ISA.

Con los angeles última actualización de COBOL de 2014, el formato de tipo de punto flotante se cambió a IEEE754, para mejorar aún más su interoperabilidad con los formatos de datos. Sin embargo, como Charles R. Martin señaló en The Overflow en su sólida introducción a COBOL, los angeles comparación correcta de COBOL sería con otro lenguaje específico de dominio como sql (introducido en 1974). Uno podría agregar como PosdataFortran o Lisp a esa comparación también.

Si bien es técnicamente posible usar SQL y PostScript para los angeles programación common y emular las funciones de DSL en un lenguaje de programación genérico (sistema), hacerlo no es un uso rápido ni eficiente del tiempo. Todo lo cual ilustra más bien los angeles razón de ser para estos DSL: hacer que los angeles programación dentro de un dominio específico sea lo más eficiente y directa posible.

Este punto se ilustra sucintamente en Program Language One de IBM (PL/I) – presentado en 1964 – que es un lenguaje de programación genérico que pretendía competir con todo, desde FORTRAN hasta COBOL, pero al ultimate no logró superar a ninguno de ellos, sin que los programadores de FORTRAN ni COBOL estuvieran convencidos de los méritos de PL/I para cambiar a él.

Es importante darse cuenta de que no escribe sistemas operativos ni procesadores de texto en ninguno de estos DSL. Esta falta de genéricos scale back su complejidad y también es los angeles razón por los angeles que debemos juzgarlos únicamente por sus méritos como DSL para su dominio previsto.

Los angeles herramienta adecuada

Un aspecto interesante de COBOL fue que el comité que lo produjo no estaba compuesto por informáticos, sino por personas dentro de los angeles comunidad empresarial, impulsadas fuertemente por las necesidades de fabricantes como IBM, RCA, Sylvania, Basic Electrical, Philco y Caja Registradora Nacional, para quienes generation primordial una buena experiencia por parte de los empresarios y organismos gubernamentales con los que negociaban.

Como resultado, al igual que SQL está conformado por los angeles necesidad de definir de manera eficiente las consultas de los angeles base de datos y lo relacionado, COBOL también se formó durante décadas por los angeles necesidad de hacer que las transacciones comerciales y los angeles administración funcionen sin problemas. Incluso hoy en día, gran parte de los angeles banca y el comercio de acciones del mundo es manejado por mainframes que ejecutan código escrito en COBOL, en gran parte debido a décadas de refinamiento del lenguaje para eliminar ambigüedades y otros problemas que podrían generar errores muy costosos.

Como han demostrado los intentos de portar aplicaciones comerciales escritas en COBOL, el problema de mover declaraciones de un DSL a un lenguaje genérico es que este último no tiene ninguna de las suposiciones, protecciones y características que es los angeles razón por los angeles que se crearon los DSL en primer lugar. . Cuanto más genérico es un lenguaje, más consecuencias no deseadas pueden ocurrir de una declaración, lo que significa que, en lugar de los angeles migración literal de una declaración COBOL o FORTRAN (o SQL), también debe tener en cuenta todas las comprobaciones, limitaciones y seguridades. del idioma authentic y replicarlos.

En última instancia, cualquier intento de portar dicho código a un idioma genérico inevitablemente dará como resultado que el DSL se replique en el idioma de destino, aunque con una probabilidad mucho mayor de errores por una variedad de razones. Lo que quiere decir que si bien un lenguaje de programación genérico puede implementar los angeles misma funcionalidad que esos DSL, los angeles verdadera pregunta es si esto es deseable. Particularmente cuando el costo del tiempo de inactividad y los errores tienden a medirse en millones de dólares por segundo, como en el sistema financiero de una nación.

El atractivo de un DSL aquí es que evita muchos casos y problemas potenciales de esquina simplemente no implementando las características que permitirían esos problemas.

Donde encaja GCC-COBOL

Actualmente todavía hay una grave falta de desarrolladores COBOL, aunque los angeles demanda es fuerte. Aunque GCC-COBOL no es, como GnuCOBOL, un compilador validado oficialmente que se aceptaría en ningún lugar cerca de un mainframe que ejecuta IBM z/OS en un instituto financiero, sin embargo, proporciona el papel priceless de permitir un fácil acceso a una cadena de herramientas COBOL. Esto permite que los aficionados y los estudiantes se desarrollen en COBOL, ya sea por diversión o para una posible carrera.

Una empresa también podría usar una cadena de herramientas de código abierto de este tipo para reemplazar Java heredado o aplicaciones de procesamiento de nómina similares con COBOL, sin tener que invertir en cadenas de herramientas propietarias y ecosistemas asociados. Según el desarrollador detrás de GCC-COBOL en el anuncio de los angeles lista de correo, este es uno de los objetivos: permitir que las aplicaciones COBOL de mainframe se ejecuten en sistemas Linux.

Aunque es muy possible que las instituciones financieras opten por un mainframe del sistema IBM Z (los angeles ‘Z’ significa ‘Tiempo de inactividad cero’) y el contrato de servicio a prueba de balas asociado, se siente bien ver que un DSL tan importante esté más disponible para todos, con sin ataduras.

Pasaporte En Linea