COBOL ( Common Business-Oriented Language ; / ˈ k oʊ b ɒ l , - b ɔː l / ) [ 11 ] es un lenguaje de programación compilado similar al inglés, diseñado para uso empresarial. Es un lenguaje imperativo , procedimental y, desde 2002, orientado a objetos . COBOL se utiliza principalmente en sistemas empresariales, financieros y administrativos para empresas y gobiernos. Todavía se usa ampliamente en aplicaciones implementadas en mainframes , como trabajos de procesamiento de transacciones y por lotes a gran escala . Muchas grandes instituciones financieras desarrollaron nuevos sistemas en este lenguaje hasta 2006, [ 12 ] pero la mayor parte de la programación en COBOL hoy en día se centra exclusivamente en el mantenimiento de aplicaciones existentes. Los programas se trasladan a nuevas plataformas, se reescriben en lenguajes modernos o se reemplazan por otro software. [ 13 ]
El diseño de COBOL fue iniciado en 1959 por CODASYL y se basó parcialmente en el lenguaje de programación FLOW-MATIC , diseñado por Grace Hopper . Fue creado como parte de un esfuerzo del Departamento de Defensa de los Estados Unidos para crear un lenguaje de programación portátil para el procesamiento de datos. Inicialmente se consideró una solución provisional, pero el Departamento de Defensa presionó rápidamente a los fabricantes de computadoras para que lo proporcionaran, lo que resultó en su adopción generalizada. [ 14 ] Fue estandarizado en 1968 y ha sido revisado cinco veces. Las expansiones incluyen soporte para programación estructurada y orientada a objetos . El estándar actual es ISO / IEC 1989:2023. [ 15 ]
Las sentencias COBOL tienen una sintaxis en prosa , como , diseñada para ser autodocumentada y muy legible. Sin embargo, es prolija y utiliza más de 300 palabras reservadas en comparación con la sintaxis concisa e inspirada en las matemáticas de otros lenguajes.MOVExTOy
El código COBOL se divide en cuatro secciones (identificación, entorno, datos y procedimiento), con una jerarquía rígida de secciones, párrafos y sentencias. Al carecer de una amplia biblioteca estándar , el estándar especifica 43 sentencias, 87 funciones y una sola clase.
COBOL ha sido criticado por su verbosidad, su proceso de diseño y su escaso soporte para la programación estructurada . Estas deficiencias suelen dar como resultado programas monolíticos difíciles de comprender en su conjunto, a pesar de su legibilidad local.
Durante años, COBOL ha sido considerado un lenguaje de programación para operaciones comerciales en mainframes, [ 16 ] aunque en los últimos años, muchas operaciones de COBOL se han trasladado a la computación en la nube . [ 17 ]
Historia y especificaciones
Fondo
A finales de la década de 1950, los usuarios y fabricantes de computadoras comenzaron a preocuparse por el creciente costo de la programación. Un estudio de 1959 reveló que, en cualquier instalación de procesamiento de datos, la programación costaba en promedio 800 000 dólares estadounidenses y que la traducción de programas para que se ejecutaran en hardware nuevo costaría 600 000 dólares estadounidenses. En un momento en que proliferaban los nuevos lenguajes de programación , el mismo estudio sugería que, si se utilizara un lenguaje común orientado a los negocios, la conversión sería mucho más económica y rápida. [ 18 ]
El 8 de abril de 1959, Mary K. Hawes , científica informática de Burroughs Corporation , convocó una reunión de representantes del mundo académico, usuarios de computadoras y fabricantes en la Universidad de Pensilvania para organizar una reunión formal sobre lenguajes comerciales comunes. [ 19 ] Entre los representantes se encontraban Grace Hopper (inventora del lenguaje de procesamiento de datos similar al inglés FLOW-MATIC ), Jean Sammet y Saul Gorn . [ 20 ] [ 21 ]
En la reunión de abril, el grupo solicitó al Departamento de Defensa (DoD) que patrocinara una iniciativa para crear un lenguaje empresarial común. La delegación impresionó a Charles A. Phillips, director del personal de investigación de sistemas de datos del DoD, [ 22 ] quien consideró que comprendían a la perfección los problemas del DoD. El DoD operaba 225 computadoras, tenía 175 más encargadas y había gastado más de 200 millones de dólares en la implementación de programas para ejecutarlas. Los programas portátiles ahorrarían tiempo, reducirían costos y facilitarían la modernización. [ 23 ]
Charles Phillips accedió a patrocinar la reunión y encargó a la delegación la elaboración del orden del día. [ 24 ]
COBOL 60
Los días 28 y 29 de mayo de 1959 se celebró una reunión en el Pentágono para debatir la creación de un lenguaje de programación común para empresas (exactamente un año después de la reunión ALGOL 58 de Zúrich ). Asistieron 41 personas y la presidió Phillips. [ 25 ] Al Departamento de Defensa le preocupaba si podría ejecutar los mismos programas de procesamiento de datos en diferentes ordenadores. FORTRAN , el único lenguaje de uso generalizado en aquel momento, carecía de las características necesarias para escribir dichos programas. [ 26 ]
Los representantes describieron con entusiasmo un lenguaje que podría funcionar en una amplia variedad de entornos, desde la banca y los seguros hasta los servicios públicos y el control de inventarios. Coincidieron unánimemente en que más personas deberían poder programar y que el nuevo lenguaje no debería estar limitado por las restricciones de la tecnología actual. La mayoría estuvo de acuerdo en que el lenguaje debería aprovechar al máximo el inglés, ser adaptable, independiente de la máquina y fácil de usar, incluso a costa de un mayor consumo de energía. [ 27 ]
La reunión dio como resultado la creación de un comité directivo y comités de corto, mediano y largo plazo. Al comité de corto plazo se le concedió hasta septiembre (tres meses) para elaborar las especificaciones de un lenguaje provisional, que posteriormente sería mejorado por los demás comités. [ 28 ] [ 29 ] Sin embargo, su misión oficial era identificar las fortalezas y debilidades de los lenguajes de programación existentes; no se les encomendó explícitamente la creación de un nuevo lenguaje. [ 26 ]
El plazo fue recibido con incredulidad por el comité de corto plazo. [ 30 ] Una miembro, Betty Holberton , describió el plazo de tres meses como un «optimismo desmedido» y dudó de que el lenguaje realmente fuera una solución provisional. [ 31 ] El comité directivo se reunió el 4 de junio y acordó denominar a toda la actividad Comité de Lenguajes de Sistemas de Datos , o CODASYL , y formar un comité ejecutivo. [ 32 ]
Los miembros del comité de corto alcance representaban a seis fabricantes de computadoras y tres agencias gubernamentales. Los fabricantes de computadoras eran Burroughs Corporation , IBM , Minneapolis-Honeywell (Honeywell Labs), RCA , Sperry Rand y Sylvania Electric Products . Las agencias gubernamentales eran la Fuerza Aérea de los Estados Unidos , el Centro de Modelado David Taylor de la Armada y la Oficina Nacional de Estándares (ahora Instituto Nacional de Estándares y Tecnología). [ 33 ] El comité fue presidido por Joseph Wegstein de la Oficina Nacional de Estándares de los Estados Unidos. El trabajo comenzó con la investigación de descripciones de datos, declaraciones, aplicaciones existentes y experiencias de usuario. [ 34 ]
El comité examinó principalmente los lenguajes de programación FLOW-MATIC , AIMACO y COMTRAN . [ 26 ] [ 35 ] El lenguaje FLOW-MATIC fue particularmente influyente porque había sido implementado y porque AIMACO era un derivado del mismo con solo cambios menores. [ 36 ] [ 37 ] La inventora de FLOW-MATIC, Grace Hopper, también se desempeñó como asesora técnica del comité. [ 30 ] Las principales contribuciones de FLOW-MATIC a COBOL fueron los nombres de variables largos, las palabras en inglés para los comandos y la separación de las descripciones de datos y las instrucciones. [ 38 ] A Hopper a veces se la llama "la madre de COBOL" o "la abuela de COBOL", [ 39 ] [ 40 ] [ 41 ] aunque Jean Sammet , un diseñador principal de COBOL, dijo que Hopper "no fue la madre, creadora ni desarrolladora de COBOL". [ 42 ] [ 1 ]
El lenguaje COMTRAN de IBM, inventado por Bob Bemer , fue considerado un competidor de FLOW-MATIC [ 43 ] [ 44 ] por un comité de corto alcance compuesto por colegas de Grace Hopper. [ 45 ] Algunas de sus características no se incorporaron a COBOL para que no pareciera que IBM había dominado el proceso de diseño, [ 28 ] y Jean Sammet dijo en 1981 que había habido un "fuerte sesgo anti-IBM" por parte de algunos miembros del comité (incluida ella misma). [ 46 ] En un caso, después de que Roy Goldfinger, autor del manual de COMTRAN y miembro del comité de alcance intermedio, asistiera a una reunión del subcomité para apoyar su lenguaje y fomentar el uso de expresiones algebraicas, Grace Hopper envió un memorando al comité de corto alcance reiterando los esfuerzos de Sperry Rand para crear un lenguaje basado en el inglés. [ 47 ]
En 1980, Grace Hopper comentó que "COBOL 60 es 95% FLOW-MATIC" y que COMTRAN había tenido una influencia "extremadamente pequeña". Además, afirmó que alegaría que el trabajo estaba influenciado tanto por FLOW-MATIC como por COMTRAN solo para "mantener contentos a los demás [para que] no intentaran echarnos". [ 48 ]
Las características de COMTRAN incorporadas a COBOL incluyeron fórmulas, [ 49 ] la PICTUREcláusula , [ 50 ] una instrucción mejorada IFque eliminó la necesidad de GO TO , y un sistema de gestión de archivos más robusto. [ 43 ]
La utilidad del trabajo del comité fue objeto de un intenso debate. Mientras que algunos miembros consideraban que el lenguaje presentaba demasiadas concesiones y era el resultado de un diseño realizado por el comité , otros opinaban que era mejor que los tres lenguajes examinados. Algunos lo consideraban demasiado complejo; otros, demasiado simple. [ 51 ]
Entre las características controvertidas se encontraban aquellas que algunos consideraban inútiles o demasiado avanzadas para los usuarios de procesamiento de datos. Estas características incluían expresiones booleanas , fórmulas e índices de tablas . [ 52 ] [ 53 ] Otro punto de controversia fue si hacer que las palabras clave fueran sensibles al contexto y el efecto que esto tendría en la legibilidad. [ 52 ] Aunque se rechazaron las palabras clave sensibles al contexto, el enfoque se utilizó posteriormente en PL/I y parcialmente en COBOL a partir de 2002. [ 54 ] Se prestó poca atención a la interactividad , la interacción con los sistemas operativos (pocos existían en ese momento) y las funciones (consideradas puramente matemáticas y sin utilidad en el procesamiento de datos). [ 55 ] [ 56 ]
Las especificaciones se presentaron al comité ejecutivo el 4 de septiembre. No cumplieron con las expectativas: Joseph Wegstein señaló que «contienen deficiencias y requieren algunas adiciones», y Bob Bemer las describió posteriormente como una «mezcolanza». Se le dio al comité hasta diciembre para mejorarlas. [ 30 ]
En una reunión a mediados de septiembre, el comité discutió el nombre del nuevo lenguaje. Entre las sugerencias se incluyeron "BUSY" (Business System), "INFOSYL" (Information System Language) y "COCOSYL" (Common Computer Systems Language). [ 57 ] No está claro quién acuñó el nombre "COBOL", [ 58 ] [ 59 ] aunque Bob Bemer afirmó posteriormente que había sido su sugerencia. [ 60 ] [ 61 ] [ 62 ]
En octubre, el comité de rango intermedio recibió copias de la especificación del lenguaje FACT creada por Roy Nutt . Sus características impresionaron tanto al comité que aprobaron una resolución para basar COBOL en ella. [ 63 ]
Esto supuso un revés para el comité de corto plazo, que había avanzado considerablemente en la especificación. A pesar de su superioridad técnica, FACT no se había creado teniendo en cuenta la portabilidad ni mediante el consenso de fabricantes y usuarios. Además, carecía de una implementación demostrable, [ 30 ] lo que permitió a los partidarios de un COBOL basado en FLOW-MATIC revocar la resolución. El representante de RCA, Howard Bromberg, también bloqueó FACT para que el trabajo de RCA en una implementación de COBOL no se desperdiciara. [ 64 ]
Pronto se hizo evidente que el comité era demasiado grande para avanzar con rapidez. Un frustrado Howard Bromberg compró una lápida de 15 dólares (en 1959; equivalente a 170 dólares en 2025 ) [ 65 ] con la inscripción "COBOL" y se la envió a Charles Phillips para demostrar su descontento. [ b ] [ 67 ] [ 68 ]
Se formó un subcomité para analizar los idiomas existentes y estaba compuesto por seis personas: [ 26 ] [ 69 ]
- William Selden y Gertrude Tierney de IBM,
- Howard Bromberg y Howard Discount de RCA,
- Vernon Reeves y Jean E. Sammet de Sylvania Electric Products.
El subcomité realizó la mayor parte del trabajo de creación de la especificación, dejando al comité de corto plazo la tarea de revisar y modificar su trabajo antes de producir la especificación final. [ 26 ]
Las especificaciones fueron aprobadas por el comité ejecutivo el 8 de enero de 1960 y enviadas a la imprenta del gobierno, que las imprimió como COBOL 60. Los objetivos declarados del lenguaje eran permitir la escritura sencilla de programas eficientes y portátiles, facilitar la migración de los usuarios a nuevos sistemas con un mínimo esfuerzo y coste, y ser adecuado para programadores sin experiencia. [ 70 ]
El Comité Ejecutivo de CODASYL creó posteriormente el Comité de Mantenimiento de COBOL para responder a las preguntas de los usuarios y proveedores y para mejorar y ampliar las especificaciones. [ 71 ]
Durante 1960, la lista de fabricantes que planeaban desarrollar compiladores de COBOL creció. En septiembre, cinco fabricantes más se unieron a CODASYL ( Bendix , Control Data Corporation , General Electric (GE), National Cash Register y Philco ), y todos los fabricantes representados anunciaron compiladores de COBOL. GE e IBM planearon integrar COBOL en sus propios lenguajes, GECOM y COMTRAN, respectivamente. Por el contrario, International Computers and Tabulators planeó reemplazar su lenguaje, CODEL, con COBOL. [ 72 ]
Mientras tanto, RCA y Sperry Rand trabajaron en la creación de compiladores COBOL. El primer programa COBOL se ejecutó el 17 de agosto en un RCA 501. [ 73 ] El 6 y 7 de diciembre, el mismo programa COBOL (aunque con cambios menores) se ejecutó en una computadora RCA y en una computadora Remington-Rand Univac , demostrando que se podía lograr la compatibilidad. [ 74 ]
La influencia relativa de los lenguajes que se utilizaron todavía se indica en la recomendación impresa en todos los manuales de referencia de COBOL:
COBOL es un lenguaje de programación de la industria y no es propiedad de ninguna empresa o grupo de empresas, ni de ninguna organización o grupo de organizaciones.
Ningún colaborador ni el Comité CODASYL COBOL ofrecen garantía alguna, expresa o implícita, sobre la exactitud y el funcionamiento del sistema y el lenguaje de programación. Asimismo, ningún colaborador ni el comité asumen responsabilidad alguna al respecto. Los autores y titulares de los derechos de autor del material protegido por derechos de autor utilizado en este documento son los siguientes:
FLOW-MATIC (marca comercial de Unisys Corporation ), Programación para UNIVAC (R) I y II, Sistemas de automatización de datos, con derechos de autor de 1958, 1959, por Unisys Corporation; Formulario de traductor comercial de IBM n.° F28-8013, con derechos de autor de 1959 por IBM; FACT, DSI 27A5260-2760, con derechos de autor de 1960 por Minneapolis-Honeywell.Han autorizado específicamente el uso de este material, en su totalidad o en parte, en las especificaciones de COBOL. Dicha autorización se extiende a la reproducción y el uso de las especificaciones de COBOL en manuales de programación o publicaciones similares. [ 75 ]
COBOL-61 a COBOL-65
Es bastante improbable que Cobol siga existiendo a finales de la década.
Se encontraron muchos fallos lógicos en COBOL 60 , lo que llevó a Charles Katz de General Electric a advertir que no podía interpretarse de forma inequívoca. Un comité temporal, aunque reacio, llevó a cabo una limpieza completa y, en marzo de 1963, se informó de que la sintaxis de COBOL era tan definible como la de ALGOL , si bien persistían algunas ambigüedades semánticas. [ 72 ]
Los primeros compiladores de COBOL eran primitivos y lentos. COBOL es un lenguaje difícil para escribir un compilador, debido a su extensa sintaxis y a la gran cantidad de elementos opcionales dentro de las construcciones sintácticas, así como a la necesidad de generar código eficiente para un lenguaje con muchas representaciones de datos posibles, conversiones de tipo implícitas y configuraciones necesarias para las operaciones de E/S. [ 77 ] Una evaluación de la Marina de los EE. UU. de 1962 encontró velocidades de compilación de 3 a 11 sentencias por minuto. A mediados de 1964, habían aumentado a 11 a 1000 sentencias por minuto. Se observó que aumentar la memoria incrementaría drásticamente la velocidad y que los costos de compilación variaban enormemente: los costos por sentencia estaban entre $0.23 y $18.91. [ 78 ]
A finales de 1962, IBM anunció que COBOL sería su lenguaje de desarrollo principal y que el desarrollo de COMTRAN cesaría. [ 78 ]
La especificación COBOL se revisó tres veces en los cinco años posteriores a su publicación. COBOL-60 fue reemplazado en 1961 por COBOL-61. Este último fue reemplazado posteriormente por las especificaciones COBOL-61 Extended en 1963, que introdujeron las funciones de ordenación y generación de informes. [ 79 ] Las funciones añadidas corrigieron fallos identificados por Honeywell a finales de 1959 en una carta al comité de corto alcance. [ 73 ] COBOL Edition 1965 aportó más aclaraciones a las especificaciones e introdujo funciones para el manejo de archivos y tablas de almacenamiento masivo . [ 80 ]
COBOL-68
Se iniciaron esfuerzos para estandarizar COBOL y superar las incompatibilidades entre versiones. A finales de 1962, tanto la ISO como el Instituto de Estándares de los Estados Unidos (ahora ANSI ) formaron grupos para crear estándares. ANSI produjo el estándar USA COBOL X3.23 en agosto de 1968, que se convirtió en la piedra angular de las versiones posteriores. [ 81 ] Esta versión se conoció como el estándar nacional estadounidense (ANS) COBOL y fue adoptada por la ISO en 1972. [ 82 ]
COBOL-74
Para 1970, COBOL se había convertido en el lenguaje de programación más utilizado en el mundo. [ 83 ]
Independientemente del comité ANSI, el Comité del Lenguaje de Programación CODASYL trabajaba en la mejora del lenguaje. Describieron nuevas versiones en 1968, 1969, 1970 y 1973, incluyendo cambios como nuevas funciones de comunicación entre programas, depuración y fusión de archivos, así como mejoras en el manejo de cadenas y la inclusión de bibliotecas . [ 84 ]
Aunque CODASYL era independiente del comité ANSI, ANSI utilizó la revista CODASYL Journal of Development para identificar características lo suficientemente populares como para justificar su implementación. [ 85 ] El Comité de Lenguajes de Programación también se puso en contacto con ECMA y el comité japonés de estándares COBOL. [ 84 ]
Sin embargo, el Comité de Lenguaje de Programación no era muy conocido. El vicepresidente, William Rinehuls, se quejó de que dos tercios de la comunidad COBOL desconocían su existencia. Además, carecía de fondos para que los documentos públicos, como las actas de las reuniones y las propuestas de cambio, estuvieran disponibles gratuitamente. [ 86 ]
En 1974, ANSI publicó una versión revisada de (ANS) COBOL, que contenía nuevas características como organizaciones de archivos , la DELETEinstrucción [ 87 ] y el módulo de segmentación . [ 88 ] Las características eliminadas incluyeron la NOTEinstrucción, la EXAMINEinstrucción (que fue reemplazada por INSPECT), y el módulo de acceso aleatorio definido por el implementador (que fue reemplazado por los nuevos módulos de E/S secuencial y relativo). Estos conformaron 44 cambios, que hicieron que las instrucciones existentes fueran incompatibles con el nuevo estándar. [ 89 ] El escritor de informes estaba programado para ser eliminado de COBOL, pero fue reinstaurado antes de que se publicara el estándar. [ 90 ] [ 91 ] ISO adoptó posteriormente el estándar actualizado en 1978. [ 82 ]
COBOL-85
En junio de 1978, se inició el trabajo de revisión de COBOL-74. El estándar propuesto (conocido comúnmente como COBOL-80) difería significativamente del anterior, lo que generó preocupación por la incompatibilidad y los costos de conversión. En enero de 1981, Joseph T. Brophy, vicepresidente sénior de Travelers Insurance , amenazó con demandar al comité de estandarización porque no era compatible con COBOL-74. El Sr. Brophy describió las conversiones anteriores de su base de código de 40 millones de líneas como "improductivas" y un "desperdicio total de nuestros recursos de programadores". [ 92 ] Más tarde ese mismo año, la Data Processing Management Association (DPMA) declaró que se oponía firmemente al nuevo estándar, citando costos de conversión "prohibitivos" y mejoras que se "imponían al usuario". [ 93 ] [ 94 ]
Durante el primer período de revisión pública, el comité recibió 2200 respuestas, de las cuales 1700 fueron cartas modelo negativas. [ 95 ] Otras respuestas fueron análisis detallados del efecto que COBOL-80 tendría en sus sistemas; se predijo que los costos de conversión serían de al menos 50 centavos por línea de código. Menos de una docena de las respuestas fueron favorables al estándar propuesto. [ 96 ]
En 1979, el comité técnico ISO TC97-SC5 creó el Grupo Internacional de Expertos en COBOL, por iniciativa de Wim Ebbinkhuijsen . El grupo estaba integrado por expertos en COBOL de numerosos países, incluidos los Estados Unidos. Su objetivo era fomentar el entendimiento y el respeto mutuos entre ANSI y el resto del mundo respecto a la necesidad de nuevas funcionalidades para COBOL. Tres años después, ISO transformó el grupo en un Grupo de Trabajo formal: el Grupo de Trabajo 4 de COBOL (WG 4 COBOL) . Este grupo asumió la responsabilidad principal del desarrollo del estándar COBOL, en el que ANSI presentó la mayoría de las propuestas.
En 1983, la DPMA retiró su oposición al estándar, citando la capacidad de respuesta del comité a las inquietudes públicas. Ese mismo año, un estudio de la Oficina Nacional de Estándares concluyó que el estándar propuesto presentaría pocos problemas. [ 94 ] [ 97 ] Un año después, DEC publicó VAX/VMS COBOL-80 y señaló que la conversión de programas COBOL-74 planteaba pocos problemas. La nueva EVALUATEinstrucción y la instrucción en línea PERFORMfueron particularmente bien recibidas y mejoraron la productividad, gracias a la simplificación del flujo de control y la depuración . [ 98 ]
La segunda revisión pública obtuvo otras 1.000 respuestas (principalmente negativas), mientras que la última obtuvo solo 25, momento en el que muchas de las preocupaciones ya se habían abordado. [ 94 ]
En 1985, el Grupo de Trabajo 4 de la ISO aceptó la versión vigente de la norma propuesta por la ANSI, introdujo varios cambios y la estableció como la nueva norma ISO COBOL 85. Su publicación tuvo lugar a finales de 1985.
Sesenta características fueron modificadas o descontinuadas y 115 [ 99 ] fueron añadidas, tales como: [ 100 ] [ 101 ]
- Terminadores de ámbito (
END-IF,END-PERFORM,END-READ, etc.) - Subprogramas anidados
CONTINUEuna declaración de no operaciónEVALUATE, una instrucción switchINITIALIZE, una instrucción que puede establecer grupos de datos a sus valores predeterminados.- Cuerpos de bucle en línea
PERFORM: anteriormente, los cuerpos de bucle debían especificarse en un procedimiento separado. - Modificación de referencia, que permite el acceso a subcadenas
- Códigos de estado de E/S.
La nueva norma fue adoptada por todos los organismos nacionales de normalización, incluido ANSI. [ 82 ]
En 1989 y 1993 se introdujeron dos enmiendas. La primera introdujo el Módulo de función intrínseca y la segunda proporcionó correcciones. [ 82 ]
COBOL 2002 y COBOL orientado a objetos
En 1997, Gartner Group estimó que existían un total de 200 mil millones de líneas de COBOL, que ejecutaban el 80% de todos los programas empresariales. [ c ] [ 102 ]
A principios de la década de 1990, se comenzó a trabajar en la incorporación de la programación orientada a objetos en la siguiente revisión completa de COBOL. Las características orientadas a objetos se tomaron de C++ y Smalltalk . [ 4 ] [ 5 ]
La estimación inicial era que esta revisión estuviera terminada para 1997, y un borrador del Comité ISO (CD) estuvo disponible para ese año. Algunos proveedores (entre ellos Micro Focus , Fujitsu e IBM ) introdujeron sintaxis orientada a objetos basada en borradores de la revisión completa. La norma ISO final aprobada se publicó a finales de 2002. [ 103 ]
Fujitsu/GTSoftware, [ 104 ] Micro Focus introdujo compiladores COBOL orientados a objetos dirigidos al .NET Framework .
Hubo muchas otras características nuevas, muchas de las cuales habían estado en el CODASYL COBOL Journal of Development desde 1978 y habían perdido la oportunidad de ser incluidas en COBOL-85. [ 105 ] Estas otras características incluyeron: [ 106 ] [ 107 ]
- Código de formato libre
- Funciones definidas por el usuario
- Recursión
- Procesamiento basado en la configuración regional
- Compatibilidad con conjuntos de caracteres extendidos como Unicode.
- Tipos de datos de punto flotante y binarios (hasta entonces, los elementos binarios se truncaban según la especificación en base 10 de su declaración).
- Resultados aritméticos portátiles
- Tipos de datos de bits y booleanos
- Punteros y sintaxis para obtener y liberar almacenamiento
- Para interfaces
SCREEN SECTIONde usuario basadas en texto - Las
VALIDATEinstalaciones - Mayor interoperabilidad con otros lenguajes de programación y entornos de desarrollo como .NET y Java .
Se publicaron tres correcciones para la norma: dos en 2006 y una en 2009. [ 108 ]
COBOL 2014
Entre 2003 y 2009, se produjeron tres Informes Técnicos (TR) que describían la finalización de objetos , el procesamiento XML y las clases de colección para COBOL. [ 108 ]
COBOL 2002 sufrió de un soporte deficiente: ningún compilador era totalmente compatible con el estándar. Micro Focus descubrió que esto se debía a la falta de demanda por parte de los usuarios de las nuevas características y a la eliminación del conjunto de pruebas NIST , que se había utilizado para comprobar la conformidad de los compiladores. También se constató que el proceso de estandarización era lento y carecía de recursos suficientes. [ 109 ]
COBOL 2014 incluye los siguientes cambios: [ 110 ]
- Las funciones principales se han convertido en opcionales, como la
VALIDATEinstalación, el generador de informes y la función de manejo de pantallas. - Tablas de capacidad dinámicas (una característica eliminada del borrador de COBOL 2002) [ 111 ]
- Los resultados aritméticos portátiles han sido reemplazados por tipos de datos IEEE 754.
- Sobrecarga de métodos
COBOL 2023
El estándar COBOL 2023 añadió algunas características nuevas:
- Sintaxis de mensajería asíncrona utilizando las sentencias
SENDy [ 112 ]RECEIVE - Una instalación de procesamiento de transacciones
COMMITcon yROLLBACK[ 112 ] XORoperador lógico [ 112 ]- La
CONTINUEinstrucción puede extenderse para pausar el programa durante una duración específica [ 113 ]. - Una
DELETE FILEdeclaración [ 113 ] LINE SEQUENTIALorganización de archivos [ 114 ]- Bucle infinito definido con
PERFORM UNTIL EXIT[ 113 ] SUBSTITUTEfunción intrínseca que permite la sustitución de subcadenas de diferente longitud [ 113 ]CONVERTfunción para la conversión de bases [ 113 ]- Operadores de desplazamiento booleano [ 115 ]
Legado
Los programas COBOL se utilizan a nivel mundial en gobiernos y diversas industrias, incluyendo el comercio minorista, los viajes, las finanzas y la atención médica. El testimonio ante el Comité de Supervisión y Reforma Gubernamental de la Cámara de Representantes de los Estados Unidos en 2016 indicó que COBOL todavía es utilizado por muchas agencias federales como el Departamento de Agricultura de los Estados Unidos (USDA), el Departamento de Seguridad Nacional (DHS), el Departamento de Salud y Servicios Humanos (HHS), el Departamento de Justicia de los Estados Unidos , el Departamento del Tesoro de los Estados Unidos y el Departamento de Asuntos de Veteranos de los Estados Unidos (VA), [ 117 ] así como el Servicio de Impuestos Internos (IRS). [ 118 ]
COBOL actualmente se ejecuta en diversos sistemas operativos como z/OS , z/VSE , VME , Unix , NonStop OS, OpenVMS y Windows . En 1997, el Grupo Gartner informó que el 80% de las empresas del mundo se ejecutaban en COBOL con más de 200 mil millones de líneas de código [ c ] y 5 mil millones de líneas más que se escribían anualmente. [ 119 ] A partir de 2020, COBOL ejecutaba procesos en segundo plano el 95% de las veces que se deslizaba una tarjeta de crédito o débito. [ 120 ]
Efecto 2000
Hacia finales del siglo XX, el problema del año 2000 (Y2K) fue el foco de un esfuerzo significativo de programación en COBOL, a veces por los mismos programadores que habían diseñado los sistemas décadas antes. El nivel particular de esfuerzo requerido para corregir el código COBOL se ha atribuido a la gran cantidad de COBOL orientado a los negocios, ya que las aplicaciones comerciales utilizan fechas con frecuencia, y a los campos de datos de longitud fija. [ 121 ] Algunos estudios atribuyen hasta "el 24% de los costos de reparación de software del Y2K a COBOL". [ 122 ] Después del esfuerzo de limpieza realizado en estos programas para el Y2K, una encuesta de 2003 encontró que muchos seguían en uso. [ 123 ] Los autores dijeron que los datos de la encuesta sugieren "una disminución gradual en la importancia de COBOL en el desarrollo de aplicaciones durante los [siguientes] 10 años a menos que... se pueda adoptar la integración con otros lenguajes y tecnologías". [ 124 ]
esfuerzos de modernización
En 2006 y 2012, encuestas de Computerworld (a 352 lectores) revelaron que más del 60% de las organizaciones utilizaban COBOL (más que C++ y Visual Basic .NET ) y que, para la mitad de ellas, COBOL se utilizaba para la mayor parte de su software interno. [ 12 ] [ 125 ] El 36% de los gerentes afirmó que planeaba migrar de COBOL, y el 25% indicó que lo haría si no fuera por el costo de reescribir el código heredado . Como alternativa, algunas empresas han migrado sus programas COBOL de mainframes a hardware más económico y rápido. [ 12 ]
Para 2019, el número de programadores de COBOL se reducía rápidamente debido a las jubilaciones, lo que generaba una inminente escasez de profesionales cualificados en organizaciones empresariales y gubernamentales que aún utilizaban sistemas mainframe para el procesamiento de transacciones de alto volumen. Los esfuerzos por reescribir los sistemas COBOL en lenguajes más modernos han resultado costosos y problemáticos, al igual que la externalización del mantenimiento del código; por lo tanto, se aboga por propuestas para capacitar a más personas en COBOL. [ 126 ]
Varios bancos han emprendido esfuerzos de modernización de COBOL que duran varios años, lo que en ocasiones ha provocado interrupciones generalizadas del servicio que han dado lugar a multas. [ 127 ]
Durante la pandemia de COVID-19 y el consiguiente aumento del desempleo, varios estados de EE. UU. informaron de una escasez de programadores COBOL cualificados para dar soporte a los sistemas heredados utilizados para la gestión de las prestaciones por desempleo. Muchos de estos sistemas se encontraban en proceso de conversión a lenguajes de programación más modernos antes de la pandemia, pero el proceso se suspendió. [ 128 ] De manera similar, el Servicio de Impuestos Internos de EE. UU. se apresuró a parchear su Archivo Maestro Individual basado en COBOL para poder desembolsar las decenas de millones de pagos exigidos por la Ley de Ayuda, Alivio y Seguridad Económica ante el Coronavirus . [ 129 ]
En 2024, el IRS anunció una transición de COBOL a Java gracias a la Iniciativa Digital First . [ 118 ]
Características
Sintaxis
COBOL tiene una sintaxis similar al inglés, que se utiliza para describir casi todo en los programas COBOL. Por ejemplo, una condición se puede expresar como o de forma más concisa como o . Las condiciones más complejas se pueden abreviar eliminando condiciones y variables repetidas. Por ejemplo, se puede acortar a . Para admitir esta sintaxis, COBOL tiene más de 300 palabras clave . [ 130 ] [ d ] Algunas de las palabras clave son simples alternativas o plurales de la misma palabra, lo que proporciona declaraciones y cláusulas más apropiadas gramaticalmente; por ejemplo, las palabras clave y se pueden usar indistintamente, como y , y y . xISGREATERTHANy xGREATERy x>y a>bANDa>cORa=d a>bANDcOR =dINOFTIMETIMESVALUEVALUES
Cada programa COBOL se compone de cuatro elementos léxicos básicos : palabras, literales, cadenas de caracteres de imágenes y separadores. Las palabras incluyen palabras reservadas e identificadores definidos por el usuario. Tienen hasta 31 caracteres de longitud y pueden incluir letras, dígitos, guiones y guiones bajos. Los literales incluyen números (p. ej. 12) y cadenas (p. ej. 'Hello!'). [ 132 ] Los separadores incluyen el espacio y las comas y los puntos y comas seguidos de un espacio. [ 133 ]
Un programa COBOL se divide en cuatro divisiones: la división de identificación, la división de entorno, la división de datos y la división de procedimientos. La división de identificación especifica el nombre y el tipo del elemento fuente y es donde se especifican las clases e interfaces. La división de entorno especifica las características del programa que dependen del sistema en el que se ejecuta, como archivos y conjuntos de caracteres . La división de datos se utiliza para declarar variables y parámetros . La división de procedimientos contiene las instrucciones del programa . Cada división se subdivide en secciones, que a su vez se componen de párrafos.
Metalenguaje
La sintaxis de COBOL se suele describir con un metalenguaje único que utiliza llaves, corchetes, barras y subrayado. [ 134 ] El metalenguaje se desarrolló para las especificaciones originales de COBOL.
Como ejemplo, considere la siguiente descripción de una ADDafirmación:
Esta descripción permite las siguientes variantes:
SUMAR 1 A x SUMAR 1 , a , b A x REDONDEADO , y , z REDONDEADOAGREGAR a , b A c EN CASO DE ERROR DE TAMAÑO MOSTRAR "Error" FIN-AGREGARAGREGAR a A b NO TAMAÑO ERROR MOSTRAR "Sin error" EN TAMAÑO ERROR MOSTRAR "Error"Formato de código


El apogeo de la popularidad de COBOL coincidió con la era de las perforadoras de tarjetas y las tarjetas perforadas . El programa en sí se escribía en tarjetas perforadas, luego se leía y compilaba, y los datos que se introducían en el programa a veces también estaban en tarjetas. [ 135 ]
COBOL se puede escribir en dos formatos: fijo (el predeterminado) o libre. En formato fijo, el código debe alinearse para ajustarse a ciertas áreas (un vestigio del uso de tarjetas perforadas). Hasta COBOL 2002, estas eran:
En COBOL 2002, las áreas A y B se fusionaron para formar el área de texto del programa, que ahora termina en una columna definida por el implementador. [ 136 ]
COBOL 2002 también introdujo el código de formato libre. Este código puede ubicarse en cualquier columna del archivo, al igual que en los lenguajes de programación más recientes. Los comentarios se especifican mediante *>, que puede colocarse en cualquier lugar y también utilizarse en código fuente de formato fijo. No existen líneas de continuación, y la >>PAGEdirectiva reemplaza al /indicador. [ 136 ]
División de identificación
La sección de identificación identifica la siguiente entidad de código y contiene la definición de una clase o interfaz.
Programación orientada a objetos
Las clases e interfaces existen en COBOL desde 2002. Las clases tienen objetos de fábrica, que contienen métodos y variables de clase, y objetos de instancia, que contienen métodos y variables de instancia. [ 137 ] La herencia y las interfaces proporcionan polimorfismo . El soporte para la programación genérica se proporciona a través de clases parametrizadas, que pueden instanciarse para usar cualquier clase o interfaz. Los objetos se almacenan como referencias que pueden estar restringidas a un tipo determinado. Hay dos maneras de llamar a un método: la INVOKEinstrucción, que actúa de forma similar a CALL, o a través de la invocación de métodos en línea, que es análoga al uso de funciones. [ 138 ]
*> Son equivalentes. INVOKE my-class "foo" RETURNING var MOVE my-class :: "foo" TO var *> Invocación de método en líneaCOBOL no proporciona una forma de ocultar métodos. Sin embargo, los datos de clase se pueden ocultar declarándolos sin una PROPERTYcláusula, lo que impide que el código externo acceda a ellos. [ 139 ] La sobrecarga de métodos se añadió en COBOL 2014. [ 140 ]
división de medio ambiente
La sección de entorno contiene la sección de configuración y la sección de entrada/salida. La sección de configuración se utiliza para especificar características variables como símbolos de moneda, configuraciones regionales y conjuntos de caracteres. La sección de entrada/salida contiene información relacionada con los archivos.
Archivos
COBOL admite tres formatos u organizaciones de archivos : secuenciales, indexados y relativos. En los archivos secuenciales, los registros son contiguos y deben recorrerse secuencialmente , de forma similar a una lista enlazada . Los archivos indexados tienen uno o más índices que permiten el acceso aleatorio a los registros y su ordenación. Cada registro debe tener una clave única , pero otras claves alternativas no tienen por qué ser únicas. Las implementaciones de archivos indexados varían entre proveedores, aunque las implementaciones comunes, como C-ISAM y VSAM , se basan en ISAM de IBM . Otras implementaciones son Record Management Services en OpenVMS y Enscribe en HPE NonStop (Tandem). Los archivos relativos, al igual que los indexados, tienen una clave de registro única, pero no tienen claves alternativas. La clave de un registro relativo es su posición ordinal; por ejemplo, el décimo registro tiene la clave 10. Esto significa que la creación de un registro con la clave 5 puede requerir la creación de registros precedentes (vacíos). Los archivos relativos también permiten tanto el acceso secuencial como el aleatorio. [ 141 ]
Una extensión no estándar común es la organización secuencial de líneas , utilizada para procesar archivos de texto. Los registros de un archivo terminan con un salto de línea y pueden tener longitud variable. [ 142 ]
División de datos
La división de datos se divide en seis secciones que declaran diferentes elementos: la sección de archivos, para registros de archivos; la sección de almacenamiento de trabajo, para variables estáticas ; la sección de almacenamiento local, para variables automáticas ; la sección de enlace, para parámetros y el valor de retorno; la sección de informes y la sección de pantalla, para interfaces de usuario basadas en texto .
Datos agregados
En COBOL, los elementos de datos se declaran jerárquicamente mediante números de nivel que indican si un elemento de datos forma parte de otro. Un elemento con un número de nivel superior es subordinado a uno con un número de nivel inferior. Los elementos de datos de nivel superior, con un número de nivel de 1, se denominan registros . Los elementos que tienen datos agregados subordinados se denominan elementos de grupo ; los que no los tienen se denominan elementos elementales . Los números de nivel utilizados para describir los elementos de datos estándar están entre 1 y 49. [ 143 ] [ 144 ]
01 algún registro . *> Elemento de registro de grupo agregado 05 num PIC 9(10) . *> Elemento elemental 05 la fecha . *> Elemento de registro de (sub)grupo agregado 10 el año PIC 9(4) . *> Elemento elemental 10 el mes PIC 99 . *> Elemento elemental 10 el día PIC 99 . *> Elemento elementalEn el ejemplo anterior, el elemento elemental numy el elemento de grupo the-dateestán subordinados al registro some-record, mientras que los elementos elementales the-year, the-month, y the-dayforman parte del elemento de grupo the-date.
Los elementos subordinados se pueden desambiguar con la palabra clave IN(o OF). Por ejemplo, considere el código de ejemplo anterior junto con el siguiente ejemplo:
01 fecha de venta . 05 el año PIC 9(4) . 05 el mes PIC 99 . 05 el día PIC 99 .Los nombres the-year, the-month, y the-dayson ambiguos por sí mismos, ya que se define más de un elemento de datos con esos nombres. Para especificar un elemento de datos en particular, por ejemplo, uno de los elementos contenidos en el sale-dategrupo, el programador usaría the-year IN sale-date(o su equivalente the-year OF sale-date). Esta sintaxis es similar a la notación de puntos que admiten la mayoría de los lenguajes contemporáneos.
Otros niveles de datos
Se utiliza un nivel numérico de 66 para declarar una reagrupación de elementos previamente definidos, independientemente de cómo estén estructurados. Este nivel de datos, también conocido por la RENAMEScláusula asociada , se usa raramente [ 145 ] y, alrededor de 1988, se encontraba generalmente en programas antiguos. Su capacidad para ignorar los datos de estructura jerárquica y lógica hacía que su uso no fuera recomendable y muchas instalaciones lo prohibían. [ 146 ]
01 registro-cliente . 05 clave-cliente PIC X(10) . 05 nombre-cliente . 10 nombre-cliente PIC X(30) . 10 apellido-cliente PIC X(30) . 05 fecha -nacimiento-cliente PIC 9(8) . 05 saldo-cliente PIC 9(7)V99 . 66 detalles-personales-cliente RENOMBRAN nombre-cliente HASTA fecha- nacimiento-cliente . 66 todos-detalles-cliente RENOMBRAN nombre-cliente HASTA saldo-cliente .Un número de nivel 77 indica que el elemento es independiente y, en tales situaciones, es equivalente al número de nivel 01. Por ejemplo, el siguiente código declara dos elementos de datos de nivel 77, property-namey sales-region, que son elementos de datos que no pertenecen a ningún grupo y que son independientes (no subordinados) a ningún otro elemento de datos:
77 nombre-propiedad PIC X(80) . 77 región-ventas PIC 9(5) .Un número de nivel 88 declara un nombre de condición (un llamado nivel 88) que es verdadero cuando su elemento de datos padre contiene uno de los valores especificados en su VALUEcláusula. [ 147 ] Por ejemplo, el siguiente código define dos elementos de nombre de condición de nivel 88 que son verdaderos o falsos dependiendo del valor de datos de caracteres actual del wage-typeelemento de datos. Cuando el elemento de datos contiene un valor de 'H', el nombre de condición wage-is-hourlyes verdadero, mientras que cuando contiene un valor de 'S'o 'Y', el nombre de condición wage-is-yearlyes verdadero. Si el elemento de datos contiene algún otro valor, ambos nombres de condición son falsos.
01 tipo de salario PIC X . 88 salario-es-por-hora VALOR "H" . 88 salario-es-anual VALOR "S" , "Y" .Tipos de datos
COBOL estándar proporciona los siguientes tipos de datos: [ 148 ]
La seguridad de tipos es variable en COBOL. Los datos numéricos se convierten entre diferentes representaciones y tamaños de forma silenciosa, y los datos alfanuméricos se pueden colocar en cualquier elemento de datos que se pueda almacenar como una cadena, incluidos los datos numéricos y de grupo. [ 149 ] En cambio, las referencias a objetos y los punteros solo se pueden asignar desde elementos del mismo tipo y sus valores pueden estar restringidos a un tipo determinado. [ 150 ]
cláusula IMAGEN
Una cláusula PICTURE(o PIC) es una cadena de caracteres, cada uno de los cuales representa una parte del elemento de datos y lo que puede contener. Algunos caracteres de imagen especifican el tipo de elemento y cuántos caracteres o dígitos ocupa en la memoria. Por ejemplo, un 9indica un dígito decimal, y un Sindica que el elemento tiene signo . Otros caracteres de imagen (llamados caracteres de inserción y edición ) especifican cómo debe formatearse un elemento. Por ejemplo, una serie de +caracteres define las posiciones de los caracteres, así como la posición de un carácter de signo inicial dentro de los datos de caracteres finales; el carácter no numérico más a la derecha contendrá el signo del elemento, mientras que otras posiciones de caracteres correspondientes a un +a la izquierda de esta posición contendrán un espacio. Los caracteres repetidos se pueden especificar de forma más concisa especificando un número entre paréntesis después de un carácter de imagen; por ejemplo, 9(7)es equivalente a 9999999. Las especificaciones de imagen que contienen solo caracteres de dígito ( 9) y signo ( S) definen elementos de datos puramente numéricos , mientras que las especificaciones de imagen que contienen caracteres alfabéticos ( A) o alfanuméricos ( ) definen elementos de datos alfanuméricos . La presencia de otros caracteres de formato define elementos de datos numéricos o alfanuméricos editados . [ 151 ]X
cláusula de USO
La USAGEcláusula declara el formato en el que se almacenan los datos. Dependiendo del tipo de datos, puede complementar o sustituir una PICTUREcláusula. Si bien puede utilizarse para declarar punteros y referencias a objetos, está orientada principalmente a especificar tipos numéricos. Estos formatos numéricos son: [ 152 ]
- Binario, donde un tamaño mínimo se especifica mediante la
PICTUREcláusula o mediante unaUSAGEcláusula comoBINARY-LONG USAGECOMPUTATIONALdonde los datos pueden almacenarse en cualquier formato que proporcione la implementación; a menudo equivalente aUSAGEBINARYUSAGEDISPLAY, el formato predeterminado, donde los datos se almacenan como una cadena- Punto flotante, ya sea en un formato dependiente de la implementación o según IEEE 754.
USAGENATIONALdonde los datos se almacenan como una cadena utilizando un conjunto de caracteres extendido.USAGEPACKED-DECIMALdonde los datos se almacenan en el formato decimal más pequeño posible (normalmente decimal codificado en binario empaquetado ).
Redactor de informes
El generador de informes es una herramienta declarativa para crear informes. El programador solo necesita especificar el diseño del informe y los datos necesarios para generarlo, lo que le evita tener que escribir código para gestionar aspectos como los saltos de página, el formato de datos y los encabezados y pies de página. [ 153 ]
Los informes están asociados a archivos de informe, que son archivos en los que solo se puede escribir mediante instrucciones de redacción de informes.
Informe de salida FD INFORME de ventas .Cada informe se define en la sección de informes de la división de datos. Un informe se divide en grupos de informes que definen los encabezados, pies de página y detalles del informe. Los informes funcionan con saltos de control jerárquicos . Los saltos de control ocurren cuando una variable clave cambia de valor; por ejemplo, al crear un informe que detalla los pedidos de los clientes, podría producirse un salto de control cuando el programa llega a los pedidos de otro cliente. A continuación, se muestra un ejemplo de descripción de un informe que muestra las ventas de un vendedor y advierte sobre cualquier registro no válido:
Informe de ventas RD LÍMITES DE PÁGINA 60 LÍNEAS PRIMER DETALLE 3 CONTROLES nombre-del-vendedor .01 TIPO ENCABEZADO DE PÁGINA . 03 COL 1 VALOR "Informe de ventas" . 03 COL 74 VALOR "Página" . 03 COL 79 PIC Z9 ORIGEN CONTADOR DE PÁGINAS .01 ventas-en-día TIPO DETALLE , LÍNEA + 1. 03 COL 3 VALOR "Ventas en" . 03 COL 12 PIC 99/99/9999 ORIGEN fecha-ventas . 03 COL 21 VALOR "fueron" . 03 COL 26 PIC $$$$9.99 ORIGEN importe-ventas .01 invalid-sales TIPO DETALLE , LÍNEA + 1. 03 COL 3 VALOR "REGISTRO NO VÁLIDO:" . 03 COL 19 PIC X(34) ORIGEN registro -de-ventas .01 TIPO CONTROL ENCABEZADO nombre-vendedor , LÍNEA + 2. 03 COL 1 VALOR " Vendedor:" . 03 COL 9 PIC X(30) ORIGEN nombre-vendedor .La descripción del informe anterior describe el siguiente diseño:
Informe de ventas Página 1Vendedor: Howard Bromberg Ventas el 10/12/2008: $1000.00 Ventas el 12/12/2008: $0.00 Ventas el 13/12/2008: $31.47 REGISTRO NO VÁLIDO: Howard Bromberg XXXXYYVendedor: Howard Discount ... Informe de ventas Página 12 Las ventas del 08/05/2014 fueron de $543.98 REGISTRO NO VÁLIDO: William Selden 12052014FOOFOO Las ventas del 30/05/2014 fueron de $0.00Cuatro instrucciones controlan el generador de informes: INITIATE, que prepara el generador de informes para la impresión; GENERATE, que imprime un grupo de informes; SUPPRESS, que suprime la impresión de un grupo de informes; y TERMINATE, que finaliza el procesamiento del informe. Para el ejemplo del informe de ventas anterior, la división del procedimiento podría verse así:
ABRIR ENTRADA ventas , SALIDA informe-salida INICIALIZAR informe-ventas EJECUTAR HASTA 1 <> 1 LEER ventas AL FINAL SALIR EJECUTAR FIN-LECTURA VALIDAR registro-ventas SI registro-válido GENERAR ventas-en-día SINO GENERAR ventas-inválidas FIN-SI FIN-EJECUTAR TERMINAR informe-ventas CERRAR ventas , informe-salida .El uso de la función Report Writer tiende a variar considerablemente; algunas organizaciones la utilizan ampliamente y otras no la utilizan en absoluto. [ 154 ] Además, las implementaciones de Report Writer variaban en calidad, y las de menor calidad a veces utilizaban cantidades excesivas de memoria en tiempo de ejecución. [ 154 ]
División de procedimientos
Procedimientos
Las secciones y los párrafos de la división de procedimientos (denominados colectivamente procedimientos) pueden utilizarse como etiquetas y como subrutinas simples . A diferencia de otras divisiones, los párrafos no necesitan estar en secciones. [ 155 ]
La ejecución continúa a través de los procedimientos de un programa hasta que se termina. [ 156 ] Para usar procedimientos como subrutinas, PERFORMse usa el verbo.
Una PERFORMinstrucción se asemeja en cierto modo a una llamada a procedimiento en lenguajes más recientes, en el sentido de que la ejecución regresa al código que sigue a la PERFORMinstrucción al final del código llamado; sin embargo, no proporciona un mecanismo para pasar parámetros ni para devolver un valor de resultado. Si se invoca una subrutina usando una instrucción simple como , entonces el control regresa al final del procedimiento llamado. Sin embargo, es inusual porque puede usarse para llamar a un rango que abarca una secuencia de varios procedimientos adyacentes. Esto se hace con la construcción:PERFORMsubroutinePERFORMPERFORMsub-1THRUsub-n
PROCEDIMIENTO tal y cual . EJECUTAR ALPHA EJECUTAR ALPHA A TRAVÉS DE GAMMA DETENER EJECUTAR . ALPHA . MOSTRAR 'A' . BETA . MOSTRAR 'B' . GAMMA . MOSTRAR 'C' .El resultado de este programa será: "AABC".
PERFORMTambién se diferencia de las llamadas a procedimientos convencionales en que, al menos tradicionalmente, no existe la noción de pila de llamadas. En consecuencia, son posibles las invocaciones anidadas (una secuencia de código que se PERFORMestá ejecutando puede ejecutar una PERFORMinstrucción por sí misma), pero se requiere especial cuidado si partes del mismo código son ejecutadas por ambas invocaciones. El problema surge cuando el código de la invocación interna alcanza el punto de salida de la invocación externa. Más formalmente, si el control pasa por el punto de salida de una PERFORMinvocación que se llamó anteriormente pero que aún no ha finalizado, el estándar COBOL 2002 estipula que el comportamiento es indefinido .
La razón es que COBOL, en lugar de una "dirección de retorno", opera con lo que se denomina una dirección de continuación. Cuando el flujo de control llega al final de cualquier procedimiento, se busca la dirección de continuación y el control se transfiere a esa dirección. Antes de que se ejecute el programa, la dirección de continuación de cada procedimiento se inicializa con la dirección de inicio del siguiente procedimiento en el texto del programa, de modo que, si no PERFORMse ejecuta ninguna instrucción, el control fluye de arriba abajo a través del programa. Pero cuando PERFORMse ejecuta una instrucción, modifica la dirección de continuación del procedimiento llamado (o del último procedimiento del rango llamado, si PERFORM THRUse utilizó), de manera que el control regresa al punto de llamada al final. El valor original se guarda y se restaura posteriormente, pero solo hay una posición de almacenamiento. Si dos invocaciones anidadas operan sobre código superpuesto, pueden interferir en la gestión de la dirección de continuación de la otra de varias maneras. [ 157 ] [ 158 ]
El siguiente ejemplo (tomado de Veerman y Verhoeven, 2006 ) ilustra el problema:
ETIQUETA1 . MOSTRAR '1' EJECUTAR ETIQUETA2 HASTA ETIQUETA3 DETENER EJECUTAR . ETIQUETA2 . MOSTRAR '2' EJECUTAR ETIQUETA3 HASTA ETIQUETA4 . ETIQUETA3 . MOSTRAR '3' . ETIQUETA4 . MOSTRAR '4' .Cabría esperar que el resultado de este programa fuera "1 2 3 4 3": Después de mostrar "2", la segunda PERFORMcausa "3" y "4" para ser mostrado, y luego la primera invocación continúa con "3". En las implementaciones tradicionales de COBOL, esto no sucede. En cambio, la primera PERFORMinstrucción establece la dirección de continuación al final de LABEL3para que vuelva al sitio de llamada dentro de LABEL1. La segunda PERFORMinstrucción establece el retorno al final de LABEL4pero no modifica la dirección de continuación de LABEL3, esperando que sea la continuación predeterminada. Por lo tanto, cuando la invocación interna llega al final de LABEL3, vuelve a la PERFORMinstrucción externa y el programa deja de haber impreso solo "1 2 3". Por otro lado, en algunas implementaciones de COBOL, como el compilador de código abierto TinyCOBOL, las dos PERFORMinstrucciones no interfieren entre sí y la salida es efectivamente "1 2 3 4 3". Por lo tanto, el comportamiento en tales casos no solo es (quizás) sorprendente, sino que tampoco es portable. [ 158 ]
Una consecuencia especial de esta limitación es que PERFORMno se puede utilizar para escribir código recursivo. Para escribir rutinas recursivas, se debe utilizar un subprograma anidado. Otro ejemplo sencillo para ilustrar esto (ligeramente simplificado de Veerman y Verhoeven, 2006 ):
MOVER 1 A UNA ETIQUETA DE EJECUCIÓN DETENER EJECUCIÓN . ETIQUETA . MOSTRAR A SI A < 3 SUMAR 1 A UNA ETIQUETA DE EJECUCIÓN FIN -SI MOSTRAR 'FIN' .Cabría esperar que el resultado fuera "1 2 3 FIN FIN FIN", y de hecho eso es lo que producirán algunos compiladores COBOL. Pero otros compiladores, como IBM COBOL, producirán código que imprime "1 2 3 FIN FIN FIN FIN ..."y así sucesivamente, imprimiendo"FIN"una y otra vez en un bucle infinito. Dado que hay un espacio limitado para almacenar direcciones de continuación de respaldo, las copias de seguridad se sobrescriben en el curso de las invocaciones recursivas, y todo lo que se puede restaurar es el salto de regreso a DISPLAY 'END'. [ 158 ]
Declaraciones
COBOL 2014 tiene 47 sentencias (también llamadas verbos ), [ 159 ] que se pueden agrupar en las siguientes categorías generales: flujo de control, E/S, manipulación de datos y el escritor de informes. Las sentencias del escritor de informes se tratan en la sección del escritor de informes .
Flujo de control
Las sentencias condicionales de COBOL son IFy EVALUATE. EVALUATEes una sentencia similar a una instrucción switch con la capacidad adicional de evaluar múltiples valores y condiciones. Esto se puede utilizar para implementar tablas de decisión . Por ejemplo, lo siguiente podría usarse para controlar un torno CNC :
EVALUAR VERDADERO TAMBIÉN velocidad deseada TAMBIÉN velocidad actual CUANDO tapa cerrada TAMBIÉN velocidad mínima HASTA velocidad máxima TAMBIÉN MENOR QUE la velocidad deseada REALIZAR aceleración de la máquina CUANDO tapa cerrada TAMBIÉN velocidad mínima HASTA velocidad máxima TAMBIÉN MAYOR QUE la velocidad deseada REALIZAR desaceleración de la máquina CUANDO tapa abierta TAMBIÉN CUALQUIERA TAMBIÉN NO CERO REALIZAR parada de emergencia CUANDO OTRO CONTINUAR FIN DE EVALUACIÓNLa PERFORMinstrucción se utiliza para definir bucles que se ejecutan hasta que una condición sea verdadera (no while true, que es más común en otros lenguajes). También se utiliza para llamar a procedimientos o rangos de procedimientos (consulte la sección de procedimientos para obtener más detalles). CALLy INVOKEllamar a subprogramas y métodos, respectivamente. El nombre del subprograma/método está contenido en una cadena que puede ser un literal o un elemento de datos. [ 160 ] Los parámetros se pueden pasar por referencia , por contenido (donde se pasa una copia por referencia) o por valor (pero solo si hay un prototipo disponible). [ 161 ]CANCEL descarga subprogramas de la memoria. GO TOhace que el programa salte a un procedimiento especificado.
La GOBACKinstrucción es una instrucción de retorno y STOPdetiene el programa. La EXITinstrucción tiene seis formatos diferentes: puede usarse como instrucción de retorno, instrucción de interrupción , instrucción de continuación , marcador de fin o para salir de un procedimiento. [ 162 ]
Las excepciones se generan mediante una RAISEinstrucción y se capturan con un manejador, o declarativo , definido en la DECLARATIVESsección de la división del procedimiento. Los declarativos son secciones que comienzan con una USEinstrucción que especifica los errores que se deben manejar. Las excepciones pueden ser nombres u objetos. RESUMESe utiliza en un declarativo para saltar a la instrucción siguiente a la que generó la excepción o a un procedimiento fuera del DECLARATIVES. A diferencia de otros lenguajes, las excepciones no capturadas pueden no terminar el programa y este puede continuar sin verse afectado.
E/S
La E/S de archivos se maneja mediante las instrucciones autodescriptivas OPEN, CLOSE, READ, y WRITEjunto con otras tres: REWRITE, que actualiza un registro; START, que selecciona los registros subsiguientes a los que acceder buscando un registro con una clave determinada; y UNLOCK, que libera un bloqueo en el último registro al que se accedió.
La interacción del usuario se realiza mediante ACCEPTy DISPLAY.
Manipulación de datos
Los siguientes verbos manipulan datos:
INITIALIZE, que establece los elementos de datos a sus valores predeterminados.MOVE, que asigna valores a los elementos de datos ; MOVE CORRESPONDING asigna campos correspondientes con el mismo nombre .SET, que tiene 15 formatos: puede modificar índices, asignar referencias de objetos y alterar capacidades de tablas, entre otras funciones. [ 163 ]ADD,SUBTRACT,MULTIPLY,DIVIDE, yCOMPUTE, que manejan aritmética (conCOMPUTEla asignación del resultado de una fórmula a una variable).ALLOCATEyFREE, que manejan la memoria dinámica .VALIDATE, que valida y distribuye los datos según lo especificado en la descripción de un elemento en la división de datos.STRINGyUNSTRING, que concatenan y dividen cadenas , respectivamente.INSPECT, que contabiliza o reemplaza instancias de subcadenas específicas dentro de una cadena.SEARCH, que busca en una tabla la primera entrada que cumpla una condición.
Los archivos y las tablas se ordenan mediante SORTy el MERGEverbo combina y ordena archivos. El RELEASEverbo proporciona registros para ordenar y RETURNrecupera los registros ordenados en el orden correcto.
Terminación del alcance
Algunas sentencias, como IFy READ, pueden contener sentencias. Dichas sentencias pueden terminarse de dos maneras: mediante un punto ( terminación implícita ), que termina todas las sentencias no terminadas que contiene, o mediante un terminador de ámbito, que termina la sentencia abierta coincidente más cercana.
*> Periodo de terminación ("terminación implícita") SI registro inválido SI no hay más registros SIGUIENTE FRASE SI NO LEER archivo de registro AL FINAL ESTABLECER no -more-records EN VERDADERO .*> Terminadores de ámbito ("terminación explícita") SI registro inválido SI no hay más registros CONTINUAR SINO LEER archivo de registro AL FINAL ESTABLECER no-more-records EN VERDADERO FIN-LECTURA FIN-SI FIN-SILas sentencias anidadas que terminan con un punto son una fuente común de errores. [ 164 ] [ 165 ] Por ejemplo, examine el siguiente código:
SI x MOSTRAR y . MOSTRAR z .Aquí, la intención es mostrar yy zsi la condición xes verdadera. Sin embargo, zse mostrará independientemente del valor de xporque la IFinstrucción termina con un punto erróneo después de .DISPLAYy
Otro error es el resultado del problema del else colgante , cuando dos IFdeclaraciones pueden asociarse con un ELSE.
SI x SI y MOSTRAR a SINO MOSTRAR b .En el fragmento anterior, se ELSEasocia con la instrucción en lugar de la instrucción, lo que provoca un error. Antes de la introducción de los terminadores de ámbito explícitos, evitarlo requeriría colocarse después del . [ 165 ] IFy IFx ELSENEXTSENTENCE IF
Código automodificable
La especificación COBOL original (1960) admitía la infame instrucción, para la cual muchos compiladores generaban código automodificable . y son etiquetas de procedimiento, y la única instrucción en el procedimiento ejecutada después de dicha instrucción significa en su lugar. Muchos compiladores aún la admiten, [ 166 ] pero se consideró obsoleta en el estándar COBOL 1985 y se eliminó en 2002. [ 167 ] ALTERXTOPROCEEDTOY XY GOTO XALTER GOTOY
La ALTERdeclaración fue mal vista porque socavaba la "localidad del contexto" y dificultaba la comprensión de la lógica general del programa. [ 168 ] Como escribió el autor del libro de texto Daniel D. McCracken en 1976, cuando "alguien que nunca ha visto el programa antes debe familiarizarse con él lo más rápido posible, a veces bajo una presión de tiempo crítica porque el programa ha fallado... la visión de una instrucción GO TO en un párrafo aislado, que señala la existencia de un número desconocido de instrucciones ALTER en ubicaciones desconocidas a lo largo del programa, infunde temor en el corazón del programador más valiente". [ 168 ]
Hola Mundo
Un programa "¡Hola, mundo!" en COBOL:
DIVISIÓN DE IDENTIFICACIÓN . ID DE PROGRAMA . hola-mundo . DIVISIÓN DE PROCEDIMIENTO . MOSTRAR "¡Hola, mundo!" .Cuando el ahora famoso ejemplo de programa "Hello, World!" en The C Programming Language se publicó por primera vez en 1978, un ejemplo de programa COBOL similar para mainframe se habría enviado a través de JCL , muy probablemente usando un lector de tarjetas perforadas y tarjetas perforadas de 80 columnas. El listado a continuación, con un vacíoDATA DIVISION , se probó usando Linux y el emulador System/370 Hercules ejecutando MVS 3.8J. El JCL, escrito en julio de 2015, se deriva de los tutoriales y ejemplos de Hercules alojados por Jay Moseley. [ 169 ] En consonancia con la programación COBOL de esa época,HOLA MUNDOse muestra en mayúsculas.
// COBUCLG JOB ( 001 ), 'COBOL BASE TEST' ,// CLASS = A , MSGCLASS = A , MSGLEVEL = ( 1 , 1 )// COBRO DE EJECUCIÓN DE BASETEST// COB . SYSIN DD *00000 * VALIDACIÓN DE LA INSTALACIÓN BASE DE COBOL01000 DIVISIÓN DE IDENTIFICACIÓN .01100 ID DE PROGRAMA . 'HOLA' .02000 DIVISIÓN DE MEDIO AMBIENTE .02100 SECCIÓN DE CONFIGURACIÓN .02110 ORDENADOR DE ORIGEN . GNULINUX .02120 OBJETO-COMPUTADOR . HÉRCULES .02200 NOMBRES ESPECIALES .02210 LA CONSOLA ES CONSL .03000 DIVISIÓN DE DATOS .04000 DIVISIÓN DE PROCEDIMIENTOS .04100 00 - PRINCIPAL .04110 MOSTRAR 'HOLA, MUNDO' AL ENCENDER LA CONSOLA .04900 PARAR EJECUTAR .// LKED . SYSLIB DD DSNAME = SYS1 . COBLIB , DISP = SHR// DD DSNAME = SYS1 . LINKLIB , DISP = SHR// IR . SYSPRINT DD SYSOUT = A//Tras enviar el JCL, la consola MVS mostró lo siguiente:
19.52.48 TRABAJO 3 $HASP100 COBUCLG EN LECTOR1 PRUEBA BASE DE COBOL 19.52.48 TRABAJO 3 IEF677I MENSAJE(S) DE ADVERTENCIA EMITIDO(S) PARA EL TRABAJO COBUCLG 19.52.48 TRABAJO 3 $HASP373 COBUCLG INICIADO - INICIAL 1 - CLASE A - SISTEMA BSP1 19.52.48 TRABAJO 3 IEC130I SYSPUNCH FALTA LA INSTRUCCIÓN DD 19.52.48 TRABAJO 3 IEC130I SYSLIB FALTA LA DECLARACIÓN DD 19.52.48 TRABAJO 3 IEC130I SYSPUNCH FALTA LA INSTRUCCIÓN DD 19.52.48 TRABAJO 3 IEFACTRT - Nombre del paso Paso del proceso Código de retorno del programa 19.52.48 TRABAJO 3 COBUCLG BASETEST COB IKFCBL00 RC= 0000 19.52.48 TRABAJO 3 COBUCLG BASETEST LKED IEWL RC= 0000 19.52.48 TRABAJO 3 +HOLA, MUNDO 19.52.48 TRABAJO 3 COBUCLG BASETEST GO PGM=*.DD RC= 0000 19.52.48 TRABAJO 3 $HASP395 COBUCLG FINALIZADOLa línea 10 del listado de la consola anterior está resaltada para mayor efecto; el resaltado no forma parte de la salida real de la consola .
El listado del compilador asociado generó más de cuatro páginas de detalles técnicos e información sobre la ejecución del trabajo, para la única línea de salida de las 14 líneas de COBOL.
Recepción
Falta de estructura
En la década de 1970, la adopción del paradigma de programación estructurada se generalizó cada vez más. Edsger Dijkstra , un eminente científico informático, escribió una carta al editor de Communications of the ACM , publicada en 1975, titulada "¿Cómo decimos verdades que podrían doler?", en la que criticaba COBOL y otros lenguajes contemporáneos, señalando que "el uso de COBOL paraliza la mente". [ 170 ]
En una disidencia publicada a los comentarios de Dijkstra, el científico informático Howard E. Tompkins afirmó que el COBOL no estructurado tendía a ser "escrito por programadores que nunca se habían beneficiado de una buena enseñanza del COBOL estructurado", argumentando que el problema era principalmente de capacitación. [ 171 ]
Una causa del código espagueti fue la GO TOinstrucción. Sin embargo, los intentos de eliminar GO TOlas instrucciones del código COBOL dieron como resultado programas complejos y una calidad de código reducida. [ 172 ]GO TO Las instrucciones fueron reemplazadas en gran medida por la PERFORMinstrucción y los procedimientos, lo que promovió la programación modular [ 172 ] y dio fácil acceso a potentes funciones de bucle. Sin embargo, PERFORMsolo se podía usar con procedimientos, por lo que los cuerpos de los bucles no se ubicaban donde se usaban, lo que hacía que los programas fueran más difíciles de entender. [ 173 ] Desde la adopción del estándar de 1985, la necesidad de GO TOse ha eliminado por completo gracias a las ricas características del PERFORMverbo; sin embargo, GO TOse mantiene para la compatibilidad con versiones anteriores, como sucede en muchos otros lenguajes.
Los programas COBOL eran conocidos por ser monolíticos y carecer de modularización. [ 174 ] El código COBOL solo podía modularizarse mediante procedimientos, que resultaron inadecuados para sistemas grandes. De lo contrario, era necesario CALLcompilar programas por separado para lograr la modularidad. Era imposible restringir el acceso a los datos hasta el estándar COBOL-85, lo que significaba que un procedimiento podía acceder y modificar cualquier elemento de datos. Además, no había forma de pasar parámetros a un procedimiento, una omisión que Jean Sammet consideró el mayor error del comité. [ 175 ] Este problema se solucionó en el estándar COBOL-85 con la introducción del subprograma anidado, que permitió la modularidad y el aislamiento local de elementos de datos.
Otra complicación surgió de la posibilidad de ejecutar PERFORM THRUuna secuencia específica de procedimientos. Esto significaba que el control podía saltar a cualquier procedimiento y regresar de él, creando un flujo de control complejo y permitiendo que un programador rompiera la regla de entrada única y salida única . [ 176 ]
Esta situación mejoró a medida que COBOL incorporó más funcionalidades. COBOL-74 añadió subprogramas, lo que permitió a los programadores controlar los datos a los que podía acceder cada parte del programa. Posteriormente, COBOL-85 añadió subprogramas anidados, lo que permitió a los programadores ocultar subprogramas. [ 177 ] En 2002 se logró un mayor control sobre los datos y el código con la inclusión de la programación orientada a objetos, las funciones definidas por el usuario y los tipos de datos definidos por el usuario. [ 178 ]
Sin embargo, gran parte del software COBOL heredado importante utiliza código no estructurado, que se ha vuelto prácticamente imposible de mantener. Modificar incluso una sección simple de código puede ser demasiado arriesgado y costoso, ya que puede utilizarse desde lugares desconocidos y de maneras desconocidas. [ 179 ]
Problemas de compatibilidad
COBOL fue concebido como un lenguaje "común" y altamente portable. Sin embargo, para 2001, se habían creado alrededor de 300 dialectos. [ 180 ] Una fuente de dialectos fue el propio estándar: el estándar de 1974 estaba compuesto por un núcleo obligatorio y once módulos funcionales, cada uno con dos o tres niveles de soporte. Esto permitió 104.976 variantes posibles. [ 181 ]
COBOL-85 no era totalmente compatible con versiones anteriores y su desarrollo fue controvertido. Joseph T. Brophy, CIO de Travelers Insurance , lideró una iniciativa para informar a los usuarios de COBOL sobre los elevados costos de reprogramación que implicaba la implementación del nuevo estándar. [ 182 ] Como resultado, el Comité ANSI COBOL recibió más de 2200 cartas del público, en su mayoría negativas, lo que obligó al comité a realizar cambios. Por otro lado, se creía que la conversión a COBOL-85 aumentaría la productividad en los años venideros, justificando así los costos de la conversión. [ 183 ]
Sintaxis verbosa
Un lenguaje débil, verboso y blando, usado por programadores para realizar tareas aburridas y sin sentido en ordenadores centrales obsoletos. [...] Su nombre rara vez se pronuncia sin expresiones rituales de disgusto u horror.
La sintaxis de COBOL ha sido criticada con frecuencia por su verbosidad. Sus defensores afirman que esto se pretendía para que el código fuera autodocumentado , facilitando así el mantenimiento del programa. [ 185 ] COBOL también se diseñó para que fuera fácil de aprender y usar para los programadores, [ 186 ] sin dejar de ser legible para personal no técnico, como los gerentes. [ 187 ] [ 188 ] [ 189 ] [ 190 ]
El deseo de legibilidad llevó al uso de una sintaxis y elementos estructurales similares a los del inglés, como sustantivos, verbos, cláusulas, oraciones, secciones y divisiones. Sin embargo, en 1984, los mantenedores de programas COBOL tenían dificultades para lidiar con código "incomprensible" [ 189 ] y los principales cambios en COBOL-85 estaban destinados a facilitar el mantenimiento. [ 95 ]
Jean Sammet, miembro del comité de corto alcance, señaló que "se hizo poco esfuerzo por satisfacer al programador profesional; de hecho, las personas cuyo principal interés es la programación tienden a estar muy descontentas con COBOL", lo cual atribuyó a la sintaxis verbosa de COBOL. [ 191 ]
El mundo académico tiende a considerar COBOL como verboso, torpe y poco elegante, y trata de ignorarlo, aunque probablemente existan más programas y programadores de COBOL en el mundo que de FORTRAN, ALGOL y PL/I juntos. En general, solo las instituciones con un objetivo vocacional inmediato imparten formación en COBOL.
Más tarde, COBOL sufrió una escasez de material que lo cubriera; no fue hasta 1963 que aparecieron los primeros libros introductorios (Richard D. Irwin publicó un libro de texto universitario sobre COBOL en 1966). [ 193 ] Donald Nelson, presidente del comité CODASYL COBOL, dijo en 1984 que "los académicos... odian COBOL" y que a los graduados en ciencias de la computación "les habían inculcado el odio a COBOL". [ 194 ]
A mediados de la década de 1980, también existía una condescendencia significativa hacia COBOL en la comunidad empresarial por parte de usuarios de otros lenguajes, por ejemplo FORTRAN o ensamblador , lo que implicaba que COBOL solo podía utilizarse para problemas que no supusieran un desafío. [ 195 ]
En 2003, COBOL figuraba en el 80 % de los planes de estudio de sistemas de información en Estados Unidos, la misma proporción que C++ y Java . [ 196 ] Diez años después, una encuesta de Micro Focus reveló que el 20 % de los académicos universitarios consideraba que COBOL estaba obsoleto o muerto, y que el 55 % creía que sus estudiantes pensaban lo mismo. La misma encuesta también reveló que solo el 25 % de los académicos incluía la programación en COBOL en sus planes de estudio, a pesar de que el 60 % opinaba que deberían enseñarla. [ 197 ]
Preocupaciones sobre el proceso de diseño
Se han planteado dudas sobre la competencia del comité de normas. Howard Bromberg, miembro del comité por un corto período, afirmó que había "poco control" sobre el proceso de desarrollo y que este estaba "plagado de discontinuidad de personal y... falta de talento". [ 83 ] Jean Sammet y Jerome Garfunkel también señalaron que los cambios introducidos en una revisión de la norma se revertían en la siguiente, debido tanto a los cambios en la composición del comité de normas como a la evidencia objetiva. [ 198 ]
Los estándares COBOL han sufrido repetidos retrasos: COBOL-85 llegó cinco años más tarde de lo previsto, [ 199 ] COBOL 2002 se retrasó cinco años, [ 4 ] y COBOL 2014 se retrasó seis años. [ 103 ] [ 200 ] Para combatir los retrasos, el comité de estándares permitió la creación de adendas opcionales que añadirían características más rápidamente que esperando la siguiente revisión del estándar. Sin embargo, algunos miembros del comité plantearon inquietudes sobre las incompatibilidades entre las implementaciones y las frecuentes modificaciones del estándar. [ 201 ]
Influencias en otros idiomas
Las estructuras de datos de COBOL influyeron en lenguajes de programación posteriores. Su estructura de registros y archivos influyó en PL/I y Pascal , y la REDEFINEScláusula fue precursora de los registros variantes de Pascal. Las definiciones explícitas de la estructura de archivos precedieron al desarrollo de sistemas de gestión de bases de datos , y los datos agregados representaron un avance significativo con respecto a los arreglos de Fortran. [ 202 ]
PICTURELas declaraciones de datos se incorporaron a PL/I, con modificaciones menores.
La funcionalidad de COBOL COPY, aunque considerada "primitiva", [ 203 ] influyó en el desarrollo de las directivas include . [ 202 ]
El énfasis en la portabilidad y la estandarización significó que los programas escritos en COBOL fueran portables y facilitó la difusión del lenguaje a una amplia variedad de plataformas de hardware y sistemas operativos. [ 204 ] Además, la estructura de división bien definida restringe la definición de referencias externas a la División de Entorno, lo que simplifica los cambios de plataforma en particular. [ 205 ]
Véase también
Notas
- ↑ Influyó específicamente en las características orientadas a objetos de COBOL 2002. [ 4 ] [ 5 ] [ 6 ]
- ↑ La lápida se encuentra actualmente en el Museo de Historia de la Computación . [ 66 ]
- 1 2 Se debe advertir al lector que, si bien el estudio de Gartner Group de 1997 se cita de forma generalizada con la famosa frase "200 mil millones de líneas de COBOL", el informe real es difícil de encontrar. [ 206 ] Además, algunos especulan [ 207 ] que "la única participación de Gartner en estas cifras" fue el estudio de 1995 [ 208 ] que "proyectó que solucionar el error Y2K costaría $1 por línea o $300 mil millones en total", lo que causó la mala interpretación del informe.
- ↑ Las extensiones específicas del proveedor hacen que muchas implementaciones tengan muchas más: una implementación reconoce más de 1100 palabras clave. [ 131 ]
Referencias
Citas
- 1 2 Sammet, Jean E. (marzo de 2000). "Los verdaderos creadores de Cobol". IEEE Software . 17 (2): 30– 32. Bibcode : 2000ISoft..17b..30S . doi : 10.1109/52.841602 . ISSN 1937-4194 .
El Comité de Corto Alcance trabajó diligentemente desde junio de 1959 en adelante, pero hubo grandes dificultades para que un comité bastante grande intentara crear un lenguaje de programación. En noviembre, el presidente del Comité de Corto Alcance nombró a seis personas para desarrollar especificaciones para su consideración: William Selden y Gertrude Tierney (IBM), Howard Bromberg y Norman Discount (RCA), y Vernon Reeves y Jean E. Sammet (Sylvania Electric Products). Trabajamos durante dos semanas completas (incluyendo algunas sesiones ininterrumpidas) en noviembre de 1959 y enviamos las especificaciones propuestas al Comité de Corto Alcance, que las aceptó casi todas. Tras algunas correcciones (realizadas por las mismas seis personas), presentamos las especificaciones como informe final en diciembre al Comité Ejecutivo, que las aceptó en enero de 1960. Después de algunas correcciones adicionales, la Oficina de Imprenta del Gobierno publicó Cobol 60. [...] [Grace Hopper] no participó en su desarrollo salvo a través de la orientación general que impartió a su personal, que formaba parte del comité. Por lo tanto, si bien su influencia indirecta fue muy importante, lamentablemente las frecuentes afirmaciones de que "Grace Hopper desarrolló Cobol", "Grace Hopper fue codesarrolladora de Cobol" o "Grace Hopper es la madre de Cobol" simplemente no son correctas.
- ↑ "Serie de lanzamientos de GCC 15: cambios, nuevas características y correcciones" . GCC, la colección de compiladores GNU . Consultado el 28 de marzo de 2026 .
- ↑ Norma técnica, lenguaje COBOL (PDF) . X/Open Company Ltd., Reino Unido, diciembre de 1991. ISBN 1-872630-09-X.
- 1 2 3 Saade, Henry; Wallace, Ann (octubre de 1995). "COBOL '97: Un informe de estado" . Dr. Dobb's Journal . Archivado del original el 22 de abril de 2014. Recuperado el 21 de abril de 2014 .
- 1 2 Arranga, Edmund C.; Coyle, Frank P. (febrero de 1998). COBOL orientado a objetos . Cambridge University Press . pág. 15. ISBN 978-0132611404
El estilo de COBOL orientado a objetos refleja la influencia de Smalltalk y C++
. - ↑ Arranga, Edmund C.; Coyle, Frank P. (marzo de 1997). "Cobol: Percepción y Realidad". Computer . 30 (3): 127. doi : 10.1109/2.573683 . ISSN 0018-9162 .
- ↑ Imajo, Tetsuji; et al. (septiembre de 2000). COBOL Script: un lenguaje de scripting orientado a los negocios . Conferencia sobre Computación de Objetos Distribuidos Empresariales . Makuhari, Japón: IEEE. doi : 10.1109/EDOC.2000.882363 . ISBN 0769508650.
- ↑ Ho, Wing Hong (7 de mayo de 2007). "Introducción a EGL" (PDF) . IBM Software Group. Archivado del original (PDF) el 13 de enero de 2019. Recuperado el 12 de enero de 2019 .
- ↑ Radin, George (1978). Wexelblat, Richard L. (ed.). La historia temprana y las características de PL/I . Historia de los lenguajes de programación. Academic Press (publicado en 1981). pág. 572. doi : 10.1145/800025.1198410 . ISBN 0127450408.
- ↑ "¿Qué es PL/B - El lenguaje de programación para negocios?" . sysmaker.com . Infopro, Inc . Consultado el 22 de abril de 2022 .
... la conversión a una versión alternativa y extendida de COBOL o a ANSI COBOL es muy difícil, si es que es posible.
- ↑ "Nuevo en COBOL" .
- 1 2 3 Mitchell, Robert L. (4 de octubre de 2006). "Cobol: Todavía no está muerto" . Computerworld . Recuperado el 10 de diciembre de 2024 .
- ↑ Mitchell, Robert L. (14 de marzo de 2012). "Fuga de cerebros: ¿Hacia dónde se dirigen los sistemas Cobol?" . Computerworld . Recuperado el 9 de febrero de 2015 .
- ↑ Ensmenger, Nathan L. (2009). The Computer Boys Take Over: Computers, Programmers, and the Politics of Technical Expertise . MIT Press . p. 100. ISBN 978-0262050937. LCCN 2009052638 .
- ↑ ISO/IEC JTC 1/SC 22/WG 4 2023 .
- ↑ "Programación COBOL para mainframe" .
- ↑ Groenfeldt, Tom. "El Covid acelera la migración de los mainframes de los bancos a la nube" . Forbes .
- ↑ Beyer 2009 , pág. 282.
- ↑ Gürer, Denise (1 de junio de 2002). "Mujeres pioneras en informática". SIGCSE Bull . 34 (2): 175– 180. doi : 10.1145/543812.543853 . ISSN 0097-8418 . S2CID 2577644 .
- ↑ Beyer 2009 , págs. 281–282.
- ↑ Sammet 1978a , pág. 200.
- ↑ Flahive, Paul (24 de mayo de 2019). "Cómo COBOL sigue impulsando la economía global a los 60 años" . Texas Public Radio . Archivado del original el 24 de mayo de 2019. Recuperado el 19 de julio de 2019.
(Grace Hopper) Apodado Abuela Cobol, el código se basó en algunos de sus trabajos anteriores. Dijo que, después de escuchar los rumores, uno de sus colaboradores salió y compró una lápida de granito. "Hizo grabar la palabra COBOL en la parte delantera. Luego la envió por correo urgente a portes debidos al Sr. Phillips en el Pentágono". La broma a Charles Phillips, un líder del proyecto en el Departamento de Defensa, llamó la atención de los altos mandos y fue un punto de inflexión, dijo. COBOL se convertiría en el lenguaje de programación más utilizado y duradero de la historia.
- ↑ Beyer 2009 , pág. 283.
- ↑ Beyer 2009 , pág. 284.
- ↑ "Primeras reuniones de la Conferencia sobre lenguajes de sistemas de datos". Anales de la historia de la computación del IEEE . 7 (4): 316– 325. 1985. Bibcode : 1985IAHC....7d.316. . doi : 10.1109/MAHC.1985.10047 . S2CID 35625728 .
- ^ Sammet 2004 , pág . 104.
- ↑ Beyer 2009 , pág. 286.
- 1 2 Conner 1984 , pág. ID/9.
- ↑ Sammet 1978a , pág. 201.
- 1 2 3 4 Bemer 1971 , pág. 132.
- ↑ Beyer 2009 , pág. 288.
- ↑ Sammet 1978a , pág. 203.
- ↑ CODASYL 1969 , § I.2.1.1.
- ↑ Sammet 1978a , pág. 204.
- ↑ CODASYL 1969 , § I.1.2.
- ↑ Beyer 2009 , pág. 290.
- ↑ Sammet, Jean (1978). "La historia temprana de COBOL". ACM SIGPLAN Notices . 13 (8): 121– 161. doi : 10.1145/960118.808378 . S2CID 10743643 .
- ↑ Sammet 1978a , pág. 217.
- ↑ Adams, Vicki Porter (5 de octubre de 1981). "Captain Grace M. Hopper: the Mother of COBOL" . InfoWorld . Vol. 3, n.º 20, pág. 33. ISSN 0199-6649 .
- ↑ Betts, Mitch (6 de enero de 1992). "Grace Hopper, madre de Cobol, muere" . Computerworld . Vol. 26, n.º 1, pág. 14.
- ↑ Lohr, Steve (2008). Go To: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Maverick Scientists, and Iconoclasts—The Programmers Who Created the Software Revolution . Basic Books . p. 52. ISBN 978-0786730766.
- ↑ "Ingeniero de software pionero y codiseñador de Cobol" . The Irish Times .
- 1 2 Beyer 2009 , pág. 292.
- ↑ Bemer 1971 , pág. 131.
- ↑ Beyer 2009 , pág. 296.
- ↑ Sammet 1978a , pág. 221.
- ↑ Beyer 2009 , pág. 291.
- ↑ "Historia oral de la capitana Grace Hopper" (PDF) . Museo de Historia de la Computación . Diciembre de 1980. pág. 37. Archivado del original (PDF) el 25 de diciembre de 2017. Consultado el 28 de junio de 2014 .
- ↑ Sammet 1978a , pág. 218.
- ↑ Marcotty 1978a , pág. 268.
- ^ Sammet 1978a , págs .
- 1 2 Sammet 1978a , Figura 8.
- ^ Sammet 1978a , págs .
- ^ ISO/IEC JTC 1/SC 22/WG 4 2001 , pág. 846.
- ↑ Sammet 1978a , pág. 220.
- ↑ Sammet 1978a , pág. 228.
- ↑ Sammet 1978a , pág. 210.
- ↑ Bemer 1971 , p. 132: No podemos encontrar a una sola persona que admita haber acuñado el acrónimo "COBOL" .
- ↑ Sammet 1978a , p. 210: Al día siguiente, finalmente se acordó el nombre COBOL como acrónimo de Common Business Oriented Language (Lenguaje Orientado a Negocios Comunes). Desafortunadamente, mis notas no muestran quién hizo esa sugerencia .
- ↑ Sullivan, Patricia (25 de junio de 2004). "Bob Bemer, pionero de la informática, 84 años" . The Washington Post . pág. B06 . Consultado el 28 de junio de 2014 .
- ↑ "EL INFORME COBOL - Entrevista con Bob Bemer, el padre de COBOL" . Archivado del original el 2 de abril de 2018.
- ↑ "EL INFORME DE COBOL - Entrevista con Bob Bemer, el padre de COBOL" . Archivado del original el 23 de diciembre de 2003.
- ↑ Beyer 2009 , pág. 293.
- ↑ Beyer 2009 , pág. 294.
- ↑ 1634–1699: McCusker, JJ (1997). ¿Cuánto es eso en dinero real? Un índice de precios histórico para usar como deflactor de valores monetarios en la economía de los Estados Unidos: Addenda et Corrigenda (PDF) . American Antiquarian Society .1700–1799: McCusker, JJ (1992). ¿Cuánto es eso en dinero real? Un índice de precios histórico para usar como deflactor de los valores monetarios en la economía de los Estados Unidos (PDF) . American Antiquarian Society .1800–presente: Banco de la Reserva Federal de Minneapolis. "Índice de precios al consumidor (estimación) 1800–" . Consultado el 29 de febrero de 2024 .
- ↑ Lápida de COBOL . Museo de Historia de la Computación. 1960. Consultado el 29 de junio de 2014 .
- ↑ "La historia de la lápida de COBOL" (PDF) . The Computer Museum Report . 13 : 8–9 . Verano de 1985. Archivado (PDF) del original el 3 de abril de 2014. Recuperado el 29 de junio de 2014 .
- ↑ Bemer 1971 , pág. 130.
- ↑ Beyer 2009 , pág. 289.
- ↑ CODASYL 1969 , § I.1.1.
- ↑ Brown 1976 , pág. 47.
- 1 2 Bemer 1971 , pág. 133.
- 1 2 Beyer 2009 , pág. 297.
- ↑ Williams, Kathleen Broome (10 de noviembre de 2012). Grace Hopper: Almirante del Mar Cibernético . US Naval Institute Press. ISBN 978-1612512655OCLC 818867202
- ↑ Compaq Computer Corporation: Manual de referencia de Compaq COBOL , número de pedido: AA–Q2G0F–TK, octubre de 2000, página xviii; Fujitsu Corporation: Referencia del lenguaje Net Cobol , versión 15, enero de 2009; IBM Corporation: Referencia del lenguaje Enterprise COBOL para z/OS , versión 4, lanzamiento 1, SC23-8528-00, diciembre de 2007
- ↑ Garfunkel, Jerome (11 de noviembre de 1984). "En defensa de Cobol" . Computerworld . Vol. 18, n.º 24. p. ID/19.
- ↑ Pratt, Terrence W. (1975). Lenguajes de programación: diseño e implementación . Englewood Cliffs, Nueva Jersey: Prentice Hall. págs. 361–362 , 381–382 . ISBN 0-13-730432-3.
- 1 2 Bemer 1971 , pág. 134.
- ↑ Brown 1976 , pág. 48.
- ↑ CODASYL 1969 , § I.2.2.4.
- ↑ CODASYL 1969 , § I.2.3.
- ^ Follet , Robert H .; Sammet, Jean E. (2003). "Estándares de lenguajes de programación" . En Ralston, Antonio; Reilly, Edwin D.; Hemmendinger, David (eds.). Enciclopedia de Ciencias de la Computación (4ª ed.). Wiley. pag. 1467.ISBN 978-0470864128.
- 1 2 Beyer 2009 , pág. 301.
- 1 2 Brown 1976 , pág. 49.
- ↑ Brown 1976 , pág. 52.
- ↑ Taylor, Alan (2 de agosto de 1972). "Pocos se dan cuenta del desperdicio de recursos en las escuelas locales del programa DP" . Computerworld . Vol. 6, n.º 31, pág. 11.
- ↑ Triance, JM (1974). Programación en COBOL: Un curso de doce conferencias televisivas . Manchester University Press. pág. 87. ISBN 978-0719005923.
- ↑ Klein 2010 , pág. 16.
- ↑ Baird, George N.; Oliver, Paul (mayo de 1977). "Estándar de 1974 (X3.23–1974)". Estándares de lenguajes de programación: ¿quién los necesita? (PDF) (Informe). Departamento de la Marina . págs. 19–21 . Archivado (PDF) del original el 7 de enero de 2014. Recuperado el 7 de enero de 2014 .
- ^ Culleton, John R. Jr. (23 de julio de 1975). "La disponibilidad irregular es un problema... Computerworld . 9 (30): 17.
- ↑ Simmons, Williams B. (18 de junio de 1975). "¿Realmente falla el generador de informes de Cobol?" . Computerworld . 9 (25): 20.
- ↑ Shoor, Rita (26 de enero de 1981). "Usuario amenaza con demandar por Ansi Cobol-80" . Computerworld . Vol. 15, n.º 4, págs. 1, 8.
- ↑ Shoor, Rita (26 de octubre de 1981). "DPMA se posiciona en contra del borrador de Cobol" . Computerworld . Vol. 15, n.º 43, págs. 1-2 .
- 1 2 3 Gallant, John (16 de septiembre de 1985). "El estándar revisado de Cobol podría estar listo a finales del 85" . Computerworld . Vol. 19, n.º 37. págs. 1, 8.
- 1 2 "Experto aborda el estándar Cobol 85" . Computerworld . Vol. 19, n.º 37. 16 de septiembre de 1985. págs. 41, 48.
- ↑ Paul, Lois (15 de marzo de 1982). "Respuestas a Cobol-80 abrumadoramente negativas" . Computerworld . Vol. 16, n.º 11, págs. 1, 5.
- ↑ Paul, Lois (25 de abril de 1983). "Un estudio revela pocos problemas al cambiar a Cobol-8X" . Computerworld . Vol. 17, n.º 17, págs. 1, 6.
- ↑ Gillin, Paul (19 de noviembre de 1984). "Los usuarios de DEC obtienen una ventaja inicial en la implementación de Cobol-80" . Computerworld . Vol. 18, n.º 47, págs. 1, 6.
- ↑ ClearPath Enterprise Servers (abril de 2015). "Manual de referencia de programación COBOL ANSI-85" (PDF) . public.support.unisys.com . Unisys . Consultado el 29 de abril de 2022 .
- ↑ Garfunkel 1987 , pág. 150.
- ↑ Roy, MK; Dastidar, D. Ghost (1 de junio de 1989). «Características de COBOL-85». Programación en COBOL: Problemas y soluciones (2.ª ed.). McGraw-Hill Education. págs. 438–451 . ISBN 978-0074603185.
- ↑ Robinson, Brian (9 de julio de 2009). "Cobol sigue siendo un recurso habitual en las agencias a pesar de mostrar su antigüedad" . FCW . Public Sector Media Group. Archivado del original el 27 de abril de 2014. Recuperado el 26 de abril de 2014 .
- 1 2 "Estándares COBOL" . Micro Focus. Archivado del original el 31 de marzo de 2004. Recuperado el 2 de septiembre de 2014 .
- ↑ "NetCOBOL para .Net" . netcobol.com . GTSoftware. 2013. Archivado del original el 8 de julio de 2014. Consultado el 29 de enero de 2014 .
- ↑ "Lista de características de Codasyl Cobol" . Computerworld . Vol. 18, n.º 37. 10 de septiembre de 1984. pág. ID/28 . Consultado el 8 de junio de 2014 .
- ^ ISO/IEC JTC 1/SC 22/WG 4 2001 , Anexo F.
- ↑ Klein 2010 , pág. 21.
- 1 2 "JTC1/SC22/WG4 – COBOL" . ISO. 30 de junio de 2010. Archivado del original el 14 de febrero de 2014. Recuperado el 27 de abril de 2014 .
- ↑ Billman, John; Klink, Huib (27 de febrero de 2008). "Reflexiones sobre el futuro de la estandarización de COBOL" (PDF) . Archivado del original (PDF) el 11 de julio de 2009. Recuperado el 14 de agosto de 2014 .
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , Anexo E.
- ↑ Schricker, Don (2 de diciembre de 1998). "J4: Estandarización de COBOL" . Micro Focus. Archivado del original el 24 de febrero de 1999. Recuperado el 12 de julio de 2014 .
- 1 2 3 ISO/IEC JTC 1/SC 22/WG 4 2023 , § E.3.1.
- 1 2 3 4 5 ISO/IEC JTC 1/SC 22/WG 4 2023 , § E.3.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2023 , § 12.4.4.9.
- ↑ ISO/IEC JTC 1/SC 22/WG 4 2023 , § 8.7.2.
- ↑ "GCOBOL(1) (compilador COBOL gcc)" . gcc.gnu.org . Estándares.
- ↑ Powner, David A. (25 de mayo de 2016). "Las agencias federales necesitan abordar los sistemas heredados obsoletos" (PDF) . Oficina de Responsabilidad Gubernamental . pág. 18. Archivado del original (PDF) el 15 de junio de 2016. Recuperado el 19 de julio de 2019.
Varias agencias, como el Departamento de Agricultura (USDA), DHS, HHS, Justicia, Tesoro y VA, informaron que utilizaban el Lenguaje Común Orientado a Negocios (COBOL), un lenguaje de programación desarrollado a finales de la década de 1950 y principios de la de 1960, para programar sus sistemas heredados. Es ampliamente conocido que las agencias necesitan migrar a lenguajes más modernos y mantenibles, según corresponda y sea factible.
- 1 2 Leahey, Andrew. "De COBOL y Assembly a Java: modernizando el IRS" . Forbes . Consultado el 29 de septiembre de 2025 .
- ↑ Kizior, Ronald J.; Carr, Donald; Halpern, Paul. "¿Tiene futuro COBOL?" (PDF) . Actas de la Conferencia de Educación en Sistemas de Información 2000. 17 ( 126). Archivado del original (PDF) el 17 de agosto de 2016. Recuperado el 30 de septiembre de 2012 .
- ↑ Thompson, Clive (10 de noviembre de 2020). "El código que controla tu dinero" . www.wealthsimple.com . Consultado el 19 de abril de 2025 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ White, Doug (12 de julio de 1998). "Preguntas frecuentes (FAQ) sobre el problema del Y2K" . homepages.wmich.edu . Archivado del original el 7 de noviembre de 2021. Recuperado el 29 de abril de 2022.
Por lo tanto, el principal problema del Y2K es el problema de los resultados incorrectos cuando se realizan cálculos de fechas.
- ↑ Kappelman, Leon A. (2000). "Algunas ventajas estratégicas del efecto 2000". IEEE Software . 17 (2): 42– 46. Bibcode : 2000ISoft..17b..42K . doi : 10.1109/52.841605 .
- ↑ Carr y Kizior 2003 , pág. 16.
- ↑ Carr y Kizior 2003 , pág. 10.
- ↑ "Fuga de cerebros de Cobol: resultados de la encuesta" . Computerworld . 14 de marzo de 2012. Archivado del original el 27 de abril de 2014. Consultado el 27 de abril de 2014 .
- ↑ Teplitzky, Phil (25 de octubre de 2019). "Cerrando la brecha de habilidades de programación COBOL" . IBM Systems Magazine, IBM Z. Archivado del original el 13 de abril de 2020. Recuperado el 11 de junio de 2020 .
- ↑ Megaw, Nicholas (25 de abril de 2018). "La migración de TI 'impecable' de TSB se convierte en un caos para sus clientes" . Financial Times . Consultado el 19 de abril de 2025 .
- ↑ Lee, Alicia (8 de abril de 2020). "Se buscan urgentemente personas que conozcan un lenguaje informático de medio siglo de antigüedad para que los estados puedan procesar las solicitudes de subsidio por desempleo" . CNN . Consultado el 8 de abril de 2020 .
- ↑ Long, Heather; Stein, Jeff; Rein, Lisa; Romm, Tony (17 de abril de 2020). "Los cheques de estímulo y otras ayudas por el coronavirus se ven obstaculizados por tecnología obsoleta y una implementación gubernamental deficiente" . The Washington Post . Consultado el 19 de abril de 2020 .
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 8.9.
- ↑ "Tabla de palabras reservadas" . Visual COBOL Development Hub 7.0 . Rocket Software . Consultado el 16 de marzo de 2026 .
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 8.3.1.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 8.3.2.
- ↑ "Introducción a COBOL" . Universidad James Madison . Consultado el 10 de diciembre de 2024 .
- ↑ McCracken 1976 , págs. 2, 6–9.
- 1 2 ISO/IEC JTC 1/SC 22/WG 4 2001 , § F.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § D.18.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § D.18.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , pág. 108.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , pág. 896.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § D.2.1.
- ↑ "Organización de archivos" . Manejo de archivos . Micro Focus. 1998. Archivado del original el 4 de marzo de 2016. Recuperado el 27 de junio de 2014 .
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 8.5.1.2.
- ↑ Cutler 2014 , Apéndice A.
- ↑ Hubbell, Thane (1999). Sams Teach Yourself COBOL in 24 hours . SAMS Publishing . pág. 40. ISBN 978-0672314537. LCCN 98087215 .
- ↑ McCracken & Golden 1988 , § 19.9.
- ↑ Cutler 2014 , § 5.8.5.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 8.5.2.
- ^ ISO /IEC JTC 1/SC 22/WG 4 2014 , § 14.9.24.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 14.9.35.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 13.18.40.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 13.18.60.3.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , pág. 855.
- 1 2 McCracken 1976 , pág. 338.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 14.4.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 14.6.3.
- ↑ Field, John; Ramalingam, G. (septiembre de 1999). Identificación de la estructura procedimental en programas Cobol (PDF) . PASTE '99 . doi : 10.1145/381788.316163 . ISBN 1581131372Archivado (PDF) del original el 24 de diciembre de 2010 .
- 1 2 3 Veerman, Niels; Verhoeven, Ernst-Jan (noviembre de 2006). "Detección de campos minados con Cobol" (PDF) . Software: Practice and Experience . 36 (14). doi : 10.1002/spe.v36:14 . S2CID 18619757. Archivado del original (PDF) el 6 de marzo de 2007.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 14.9.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , §§ 14.9.4, 14.9.22.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § D.6.5.2.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , § 14.9.13.1.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , §14.9.35.1.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014 , pág. 899.
- 1 2 McCracken & Golden 1988 , § 8.4.
- ↑ A continuación se muestran ejemplos de compatibilidad del compilador
ALTER- Tiffin, Brian (18 de septiembre de 2013). "Septiembre de 2013" . GNU Cobol . Archivado del original el 5 de mayo de 2014. Recuperado el 5 de enero de 2014 .
- "La instrucción ALTER" . Referencia del lenguaje COBOL de Micro Focus Visual COBOL 2.2 para Visual Studio 2013. Micro Focus . Consultado el 5 de enero de 2014 .
- "Sentencia ALTER (Núcleo)" (PDF) . Manual de referencia de COBOL85 . Fujitsu. Noviembre de 1996. pág. 555. Archivado del original (PDF) el 6 de enero de 2014. Consultado el 5 de enero de 2014 .
- "Sentencia ALTER" . Referencia del lenguaje Enterprise COBOL para z/OS . IBM. Junio de 2013. Consultado el 5 de enero de 2014 .
- ^ ISO/IEC JTC 1/SC 22/WG 4 2001 , § F.1.
- 1 2 McCracken 1976 , pág. 355.
- ↑ Moseley, Jay (17 de enero de 2015). "Compilador COBOL de MVT" . Recuperado el 19 de julio de 2015 .
- ↑ Dijkstra, Edsger W. (18 de junio de 1975). "¿Cómo decimos verdades que podrían doler?" . Universidad de Texas en Austin. EWD498. Archivado del original el 2 de mayo de 2017. Recuperado el 29 de agosto de 2007 .
- ↑ Tompkins, HE (1983). "En defensa de la enseñanza de COBOL estructurado como ciencia de la computación" . ACM SIGPLAN Notices . 18 (4): 86– 94. doi : 10.1145/948176.948186 . S2CID 33803213 .
- 1 2 Riehle 1992 , pág. 125.
- ↑ Shneiderman 1985 , págs. 349–350.
- ↑ Coughlan, Michael (16 de marzo de 2014). Introducción a COBOL para programadores . Apress. pág. 4. ISBN 978-1430262534Consultado el 13 de agosto de 2014 .
- ↑ Sammet 1978b , pág. 258.
- ↑ Riehle 1992 , pág. 126.
- ↑ Riehle 1992 , pág. 127.
- ↑ Schricker 2000 , pág. 51.
- ↑ "COBOL y el código heredado como riesgo sistémico | capitalismo desnudo" . 19 de julio de 2016. Consultado el 23 de julio de 2016 .
- ↑ Lämmel, Ralf; Verhoef, Chris (noviembre-diciembre de 2001). "Resolviendo el problema de los 500 idiomas" (PDF) . IEEE Software . 18 (6): 79. Bibcode : 2001ISoft..18f..78L . doi : 10.1109/52.965809 . hdl : 1871/9853 . Archivado del original (PDF) el 19 de agosto de 2014.
- ↑ Howkins, TJ; Harandi, MT (abril de 1979). "Hacia un COBOL más portable" . The Computer Journal . 22 (4): 290. doi : 10.1093/comjnl/22.4.290 .
- ↑ Garfunkel 1987 , pág. 11.
- ↑ Garfunkel 1987 , pág. 15.
- ↑ Raymond, Eric S. (1 de octubre de 2004). "COBOL" . The Jargon File, versión 4.4.8 . Archivado del original el 30 de agosto de 2014. Recuperado el 13 de diciembre de 2014 .
- ↑ Brown 1976 , pág. 53.
- ↑ CODASYL 1969 , § II.1.1.
- ↑ Shneiderman 1985 , pág. 350.
- ↑ Sammet 1961 , pág. 381.
- 1 2 Conner 1984 , pág. ID/10.
- ↑ Marcotty 1978a , pág. 263.
- ↑ Conner 1984 , pág. ID/14.
- ↑ Conway, Richard; Gries, David (1973). Introducción a la programación: Un enfoque estructurado con PL/1 y PL/C . Cambridge, Massachusetts: Winthrop Publishers. pág. 341. ISBN 0-87626-405-4.
- ↑ "Lógica y programación COBOL, tercera edición 1974" . Archivado del original el 5 de marzo de 2016. Consultado el 25 de febrero de 2016 .
- ↑ "Una entrevista: Cobol defender" . Computerworld . Vol. 18, n.º 37. 10 de septiembre de 1984. pp. ID/29–ID/32 . Consultado el 8 de junio de 2014 .
- ↑ Pratt, Terrence W.; Zelkowitz, Marvin V. (1984). Lenguajes de programación: diseño e implementación (2.ª ed.). Englewood Cliffs, NJ : Prentice Hall. ISBN 0136780121.
- ↑ Carr y Kizior 2003 , pág. 13.
- ↑ "La academia necesita más apoyo para abordar la brecha de habilidades en TI" (Comunicado de prensa). Micro Focus. 7 de marzo de 2013. Consultado el 4 de agosto de 2014 .
- ↑ Sammet, Jean; Garfunkel, Jerome (octubre de 1985). "Resumen de los cambios en COBOL, 1960–1985". Annals of the History of Computing . 7 (4): 342. Bibcode : 1985IAHC....7d.342S . doi : 10.1109/MAHC.1985.10033 . S2CID 17940092 .
- ↑ Cook, Margaret M. (junio de 1978). Ghosh, Sakti P.; Liu, Leonard Y. (eds.). Data Base Facility for COBOL 80 (PDF) . 1978 National Computer Conference. Anaheim, California: AFIPS Press. pp. 1107–1112 . doi : 10.1109/AFIPS.1978.63 . LCCN 55-44701 . Recuperado el 2 de septiembre de 2014.
La fecha más temprana en la que se podría desarrollar y aprobar un nuevo estándar COBOL es el año 1980 [...].
- ↑ "Resoluciones de la reunión del Grupo de Trabajo 4, 24 – 26–28 de junio de 2003, Las Vegas, Nevada, EE. UU." . 11 de julio de 2003. pág. 1. Archivado del original (doc) el 8 de marzo de 2016. Recuperado el 29 de junio de 2014.
Revisión de junio de 2008 del estándar COBOL
. - ↑ Babcock, Charles (14 de julio de 1986). "Los complementos estándar de Cobol, desmantelados" . Computerworld . Vol. 20, n.º 28, págs. 1, 12.
- 1 2 Shneiderman 1985 , pág. 349.
- ↑ Marcotty 1978b , pág. 274.
- ↑ Esto se puede ver en:
- "Visual COBOL" . IBM PartnerWorld . IBM . 21 de agosto de 2013. Archivado del original el 12 de julio de 2014. Consultado el 5 de febrero de 2014.
Micro Focus Visual COBOL ofrece la próxima generación de desarrollo e implementación de COBOL para Linux x86-64, Linux para System z, AIX, HP/UX, Solaris y Windows.
- "Familia de compiladores IBM COBOL" . IBM . 16 de mayo de 2024. Consultado el 11 de septiembre de 2024 .
- "GnuCOBOL - Proyecto GNU" . Consultado el 11 de septiembre de 2024 .
- "Visual COBOL" . IBM PartnerWorld . IBM . 21 de agosto de 2013. Archivado del original el 12 de julio de 2014. Consultado el 5 de febrero de 2014.
- ↑ Coughlan, Michael (2002). "Introducción a COBOL" . Archivado del original el 5 de marzo de 2023.
- "Estudios del Grupo Gartner" . 1997-2001.state.gov . Oficina de Gestión de Programas del Año 2000. 2000. Consultado el 23 de abril de 2022 .
- Engelmann, Viktor (8 de abril de 2021). "COBOL Fact-Check" . cobsolete.de . COBSOLETE . Consultado el 23 de abril de 2022 .
- "¿Qué nos depara el futuro?". CIO . International Data Group. 15 de diciembre de 1995 - 1 de enero de 1996. pág. 82.
Fuentes
- Bemer, Bob (1971). "Una visión de la historia de COBOL" (PDF) . Honeywell Computer Journal . 5 (3). Archivado del original (PDF) el 22 de enero de 2016. Recuperado el 28 de junio de 2014 .
- Beyer, Kurt (2009). Grace Hopper y la invención de la era de la información . MIT Press. ISBN 978-0262013109. LCCN 2008044229 .
- Brown, William R. (1 de diciembre de 1976). «COBOL». En Belzer, Jack; Holzman, Albert G.; Kent, Allen (eds.). Enciclopedia de Ciencias de la Computación y Tecnología: Volumen 5. CRC Press . ISBN 978-0824722555.
- Carr, Donald E.; Kizior, Ronald J. (31 de diciembre de 2003). "Relevancia continua de COBOL en los negocios y la academia: situación actual y comparación con el estudio del año 2000" ( PDF) . Information Systems Education Journal . 1 (52). ISSN 1545-679X . S2CID 62485945. Archivado (PDF) del original el 5 de marzo de 2023. Recuperado el 4 de agosto de 2014 .
- CODASYL (julio de 1969). CODASYL COBOL Journal of Development 1968. National Bureau of Standards . ISSN 0591-0218 . LCCN 73601243. OL 14204153M .
- Conner, Richard L. (14 de mayo de 1984). "Cobol, se te nota la edad" . Computerworld . Vol. 18, n.º 20. págs. ID/7–ID/18. ISSN 0010-4841 .
- Cutler, Gary (9 de abril de 2014). Guía del programador de GNU COBOL (PDF) (3.ª ed.) . Recuperado el 25 de febrero de 2014 .
- Garfunkel, Jerome (1987). El libro de ejemplos de COBOL 85. Wiley . ISBN 978-0471804611.
- ISO/IEC JTC 1/SC 22/WG 4 (4 de diciembre de 2001). "ISO/IEC IS 1989:2001 – Lenguaje de programación COBOL" . ISO . Archivado del original (ZIP de PDF) el 24 de enero de 2002. Recuperado el 2 de septiembre de 2014 .(El enlace lleva al borrador N 0147)
- ISO/IEC JTC 1/SC 22/WG 4 (31 de octubre de 2014). INCITS/ISO/IEC 1989:2014 [2014] – Lenguaje de programación COBOL . INCITS .
- ISO/IEC JTC 1/SC 22/WG 4 (enero de 2023). ISO/IEC 1989:2023 – Lenguaje de programación COBOL . ISO .
- Klein, William M. (4 de octubre de 2010). "La historia de COBOL" (PDF) . Archivado del original (PDF) el 7 de enero de 2014. Recuperado el 7 de enero de 2014 .
- Marcotty, Michael (1978a). Wexelblat, Richard L. (ed.). Transcripción de la sesión de preguntas y respuestas . Historia de los lenguajes de programación. Academic Press (publicado en 1981). pág. 263. doi : 10.1145/800025.1198370 . ISBN 0127450408.
- Marcotty, Michael (1978b). Wexelblat, Richard L. (ed.). Texto completo de todas las preguntas enviadas . Historia de los lenguajes de programación. Academic Press (publicado en 1981). pág. 274. doi : 10.1145/800025.1198371 . ISBN 0127450408.
- McCracken, Daniel D. (1976). Guía simplificada de programación COBOL estructurada . Wiley. ISBN 0-471-58284-0. LCCN 75044399 .
- McCracken, Daniel D.; Golden, Donald G. (1988). Guía simplificada de programación COBOL estructurada (2.ª ed.). Wiley. ISBN 978-0471610540. LCCN 87034608 .
- Riehle, Richard L. (agosto de 1992). "PERFORM considerado perjudicial" . Communications of the ACM . 35 (8): 125– 128. doi : 10.1145/135226.376106 . S2CID 18845698 .
- Sammet, Jean E. (mayo de 1961). Un método para combinar ALGOL y COBOL . Artículos presentados en la conferencia conjunta occidental de informática IRE-AIEE-ACM del 9 al 11 de mayo de 1961. ACM . págs. 379-387 . doi : 10.1145/1460690.1460734 .
- Sammet, Jean E. (1978a). Wexelblat, Richard L. (ed.). La historia temprana de COBOL . Historia de los lenguajes de programación. Academic Press (publicado en 1981). doi : 10.1145/800025.1198367 . ISBN 0127450408.
- Sammet, Jean E. (1978b). Wexelblat, Richard L. (ed.). Transcripción de la presentación . Historia de los lenguajes de programación. Academic Press (publicado en 1981). doi : 10.1145/800025.1198368 . ISBN 0127450408.
- Sammet, Jean E. (23 de julio de 2004). "COBOL". En Reilly, Edwin D. (ed.). Enciclopedia concisa de informática . Wiley. ISBN 978-0470090954OCLC 249810423
- Schricker, D. (abril de 2000). "Cobol para el próximo milenio". IEEE Software . 17 (2): 48– 52. Bibcode : 2000ISoft..17b..48S . doi : 10.1109/52.841606 .
- Shneiderman, B. (octubre de 1985). "La relación entre COBOL y la informática". Anales de la historia de la computación . 7 (4): 348– 352. Bibcode : 1985IAHC....7d.348S . doi : 10.1109/MAHC.1985.10041 . S2CID 1009406 .
Enlaces externos
- COBOLStandard.info en Wayback Machine (archivado el 10 de enero de 2017)
- ISO/IEC JTC1/SC22/WG4 - COBOL en Wayback Machine (archivado el 22 de agosto de 2016)
- Estándar del lenguaje COBOL (1991; COBOL-85 con la Enmienda 1), de The Open Group
- COBOL
- Lenguajes de programación .NET
- Software de 1959
- Lenguajes de programación basados en clases
- Lenguajes de programación compilados
- Introducciones relacionadas con la informática en 1959
- Software multiplataforma
- Lenguajes de programación orientados a objetos
- Lenguajes de programación procedimental
- Lenguajes de programación creados por mujeres
- Lenguajes de programación creados en 1959
- Lenguajes de programación con un estándar ISO
- Lenguajes de programación de tipado estático
- Lenguajes de programación estructurados
