COBOL ( / k oʊ b ɒ l , - b ɔː l / , un acrónimo de "lenguaje común orientado a los negocios") es un compilado Inglés-como lenguaje de programación diseñado para uso empresarial. Es un lenguaje imperativo , procedimental y, desde 2002, orientado a objetos . COBOL se utiliza principalmente en sistemas comerciales, financieros y administrativos para empresas y gobiernos. COBOL todavía se usa ampliamente en aplicaciones implementadas en computadoras mainframe , como lotes a gran escalay trabajos de procesamiento de transacciones . Sin embargo, debido a su popularidad en declive y al retiro de los programadores COBOL experimentados, los programas se están migrando a nuevas plataformas, se reescriben en lenguajes modernos o se reemplazan con paquetes de software. [8] La mayor parte de la programación en COBOL ahora es puramente para mantener las aplicaciones existentes; sin embargo, muchas instituciones financieras importantes todavía estaban desarrollando nuevos sistemas en COBOL hasta 2006 debido a la velocidad de procesamiento del mainframe. [9]
Paradigma | Procesal , imperativo , orientado a objetos |
---|---|
Diseñada por | Howard Bromberg , Norman Discount , Vernon Reeves , Jean E. Sammet , William Selden , Gertrude Tierney , con influencia indirecta de Grace Hopper [1] |
Desarrolladores | CODASYL , ANSI , ISO |
Apareció por primera vez | 1959 |
Lanzamiento estable | ISO / IEC 1989: 2014/2014 |
Disciplina de mecanografía | Débil , estático |
Extensiones de nombre de archivo | .cbl , .cob ,.cpy |
Implementaciones importantes | |
GnuCOBOL , IBM COBOL , Micro Focus Visual COBOL | |
Dialectos | |
COBOL / 2, DEC COBOL-10, DEC VAX COBOL, DOSVS COBOL, Envyr ICOBOL, Fujitsu COBOL, Hitachi COBOL2002, HP3000 COBOL / II, IBM COBOL SAA, IBM COBOL / 400, IBM COBOL / II, IBM Enterprise COBOL, IBM ILE COBOL, IBM OS / VS COBOL, ICL COBOL (VME), Micro Focus ACUCOBOL-GT, Micro Focus COBOL-IT, Micro Focus RM / COBOL, Micro Focus Visual COBOL, Microsoft COBOL, Raincode COBOL, Realia COBOL, Ryan McFarland RM / COBOL, Ryan McFarland RM / COBOL-85, Tandem (NonStop) COBOL85, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, Unix COBOL X / Open, Veryant isCOBOL, Wang VS COBOL | |
Influenciado por | |
AIMACO , C ++ , [a] COMTRAN , Eiffel , [a] FACT , FLOW-MATIC , Smalltalk [a] | |
Influenciado | |
CobolScript , [5] EGL , [6] PL / I , [7] PL / B [ cita requerida ] | |
|
COBOL fue diseñado en 1959 por CODASYL y se basó en parte 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 EE. UU. Para crear un lenguaje de programación portátil para el procesamiento de datos. Originalmente se consideró una solución provisional, pero el Departamento de Defensa obligó rápidamente a los fabricantes de computadoras a proporcionarlo, lo que resultó en su adopción generalizada. [10] Fue estandarizado en 1968 y desde entonces ha sido revisado cuatro veces. Las expansiones incluyen soporte para programación estructurada y orientada a objetos . El estándar actual es ISO / IEC 1989: 2014 . [11]
Las declaraciones COBOL tienen una sintaxis similar al inglés, que fue diseñada para ser autodocumentada y altamente legible. Sin embargo, es detallado y utiliza más de 300 palabras reservadas . En contraste con la sintaxis moderna y sucinta como , COBOL tiene una sintaxis más parecida al inglés (en este caso, ). El código COBOL se divide en cuatro divisiones (identificación, entorno, datos y procedimiento) que contienen una jerarquía rígida de secciones, párrafos y oraciones. Al carecer de una gran biblioteca estándar , el estándar especifica 43 declaraciones, 87 funciones y solo una clase.y = x;
MOVE x TO y
Los informáticos académicos generalmente no estaban interesados en las aplicaciones comerciales cuando se creó COBOL y no participaron en su diseño; fue (efectivamente) diseñado desde cero como un lenguaje informático para negocios, con énfasis en entradas y salidas, cuyos únicos tipos de datos eran números y cadenas de texto. [12] COBOL ha sido criticado a lo largo de su vida por su verbosidad, proceso de diseño y escaso apoyo a la programación estructurada . Estas debilidades dan como resultado programas monolíticos y prolijos (destinados a ser similares al inglés) que no son fácilmente comprensibles.
Historia y especificación
Fondo
A fines de la década de 1950, los usuarios y fabricantes de computadoras empezaron a preocuparse por el aumento del costo de la programación. Una encuesta de 1959 había descubierto que en cualquier instalación de procesamiento de datos, la programación costaba en promedio 800.000 dólares y que traducir programas para que se ejecutaran en hardware nuevo costaría 600.000 dólares. En un momento en que los nuevos lenguajes de programación proliferaban a un ritmo cada vez mayor, la misma encuesta sugirió que si se usara un lenguaje común orientado a los negocios, la conversión sería mucho más barata y rápida. [13]
El 8 de abril de 1959, Mary K. Hawes , científica informática de Burroughs Corporation , convocó a 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. [14] Los representantes incluyeron a Grace Hopper (inventora del lenguaje de procesamiento de datos similar al inglés FLOW-MATIC ), Jean Sammet y Saul Gorn . [15] [16]
En la reunión de abril, el grupo pidió al Departamento de Defensa (DoD) que patrocinara un esfuerzo para crear un lenguaje comercial común. La delegación impresionó a Charles A. Phillips, director del personal de investigación del sistema de datos del Departamento de Defensa, [17] quien pensó que "comprendían completamente" los problemas del Departamento de Defensa. El Departamento de Defensa operaba 225 computadoras, tenía otras 175 encargadas y había gastado más de $ 200 millones en la implementación de programas para ejecutarlas. Los programas portátiles ahorrarían tiempo, reducirían costos y facilitarían la modernización. [18]
Charles Phillips acordó patrocinar la reunión y encargó a la delegación que redactara la agenda. [19]
COBOL 60
Los días 28 y 29 de mayo de 1959 (exactamente un año después de la reunión ALGOL 58 de Zürich ), se celebró una reunión en el Pentágono para discutir la creación de un lenguaje de programación común para las empresas. Asistieron 41 personas y fue presidido por Phillips. [20] Al Departamento de Defensa le preocupaba si podía ejecutar los mismos programas de procesamiento de datos en diferentes computadoras. FORTRAN , el único lenguaje corriente en ese momento, carecía de las características necesarias para escribir tales programas. [21]
Los representantes describieron con entusiasmo un lenguaje que podría funcionar en una amplia variedad de entornos, desde banca y seguros hasta servicios públicos y control de inventario. Acordaron unánimemente que más personas deberían poder programar y que el nuevo lenguaje no debería verse restringido por las limitaciones de la tecnología contemporánea. La mayoría estuvo de acuerdo en que el idioma debería hacer un uso máximo del inglés, ser capaz de cambiar, ser independiente de las máquinas y fácil de usar, incluso a expensas del poder. [22]
La reunión resultó en la creación de un comité directivo y comités de corto, medio y largo alcance. El comité de corto plazo se otorgó a septiembre (tres meses) para producir especificaciones para un lenguaje interino, que luego sería mejorado por los otros comités. [23] [24] Sin embargo, su misión oficial era identificar las fortalezas y debilidades de los lenguajes de programación existentes y no les indicó explícitamente que crearan un nuevo lenguaje. [21] La fecha límite fue cumplida con incredulidad por parte del comité de corto alcance. [25] Una miembro, Betty Holberton , describió el plazo de tres meses como "gran optimismo" y dudaba que el lenguaje fuera realmente una solución provisional. [26]
El comité directivo se reunió el 4 de junio y acordó nombrar toda la actividad como Comité de Lenguajes de Sistemas de Datos , o CODASYL , y formar un comité ejecutivo. [27]
El comité de corto alcance estaba compuesto por miembros que representaban a seis fabricantes de computadoras y tres agencias gubernamentales. Los seis fabricantes de computadoras fueron Burroughs Corporation , IBM , Minneapolis-Honeywell (Honeywell Labs), RCA , Sperry Rand y Sylvania Electric Products . Las tres agencias gubernamentales eran la Fuerza Aérea de los EE. UU. , La Cuenca Modelo David Taylor de la Armada y la Oficina Nacional de Estándares (ahora el Instituto Nacional de Estándares y Tecnología). [28] El comité fue presidido por Joseph Wegstein de la Oficina Nacional de Normas de EE. UU. El trabajo comenzó investigando la descripción de los datos, las declaraciones, las aplicaciones existentes y las experiencias de los usuarios. [29]
El comité examinó principalmente los lenguajes de programación FLOW-MATIC , AIMACO y COMTRAN . [21] [30] El lenguaje FLOW-MATIC fue particularmente influyente porque se había implementado y porque AIMACO era un derivado de él con solo cambios menores. [31] [32] La inventora de FLOW-MATIC, Grace Hopper, también se desempeñó como asesora técnica del comité. [25] Las principales contribuciones de FLOW-MATIC a COBOL fueron nombres largos de variables, palabras en inglés para comandos y la separación de descripciones de datos e instrucciones. [33] Hopper a veces se conoce como "la madre de COBOL" o "la abuela de COBOL", [34] [35] [36] aunque Jean Sammet , un diseñador principal de COBOL, declaró que Hopper "no era la madre , creador o desarrollador de Cobol ". [37] [1]
El lenguaje COMTRAN de IBM, inventado por Bob Bemer , fue considerado como un competidor de FLOW-MATIC [38] [39] por un comité de corto alcance compuesto por colegas de Grace Hopper. [40] Algunas de sus características no se incorporaron en COBOL para que no pareciera que IBM había dominado el proceso de diseño, [23] y Jean Sammet dijo en 1981 que había habido un "fuerte sesgo anti-IBM" de algún comité. miembros (ella misma incluida). [41] En un caso, después de que Roy Goldfinger, autor del manual COMTRAN y miembro del comité de rango intermedio, asistiera a una reunión del subcomité para apoyar su lenguaje y alentar el uso de expresiones algebraicas, Grace Hopper envió un memo al comité de corto alcance. reiterando los esfuerzos de Sperry Rand para crear un idioma basado en el inglés. [42] 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, dijo que diría que el trabajo fue influenciado tanto por FLOW-MATIC como por COMTRAN solo para "mantener felices a otras personas [para que] no traten de noquearnos". [43] Las características de COMTRAN incorporadas en COBOL incluían fórmulas, [44] la PICTUREcláusula , [45] una IF
declaración mejorada , que obviaba la necesidad de GO TO , y un sistema de administración de archivos más robusto. [38]
La utilidad del trabajo del comité fue objeto de un gran debate. Si bien algunos miembros pensaron que el lenguaje tenía demasiados compromisos y era el resultado del diseño del comité , otros opinaron que era mejor que los tres idiomas examinados. Algunos sintieron que el lenguaje era demasiado complejo; otros, demasiado simples. [46] Las características controvertidas incluyeron aquellas que algunos consideraron inútiles o demasiado avanzadas para los usuarios del procesamiento de datos. Tales características incluían expresiones booleanas , fórmulas y subíndices de tablas (índices). [47] [48] Otro punto de controversia fue si hacer palabras clave sensibles al contexto y el efecto que tendría en la legibilidad. [47] Aunque se rechazaron las palabras clave sensibles al contexto, el enfoque se utilizó más tarde en PL / I y parcialmente en COBOL a partir de 2002. [49] Se prestó poca atención a la interactividad , la interacción con los sistemas operativos (pocos existían en ese momento) y las funciones. (pensado como puramente matemático y sin utilidad en el procesamiento de datos). [50] [51]
Las especificaciones se presentaron al Comité Ejecutivo el 4 de septiembre. No cumplieron con las expectativas: Joseph Wegstein señaló que "contiene puntos difíciles y requiere algunas adiciones", y Bob Bemer los describió más tarde como una "mezcolanza". Al subcomité se le dio hasta diciembre para mejorarlo. [25]
En una reunión de mediados de septiembre, el comité discutió el nombre del nuevo idioma. Las sugerencias incluyeron "BUSY" (sistema comercial), "INFOSYL" (lenguaje del sistema de información) y "COCOSYL" (lenguaje común de sistemas informáticos). [52] No está claro quién acuñó el nombre "COBOL", [53] [54] aunque Bob Bemer afirmó más tarde que había sido su sugerencia. [55] [56] [57]
En octubre, el comité de rango intermedio recibió copias de la especificación de lenguaje FACT creada por Roy Nutt . Sus características impresionaron tanto al comité que aprobaron una resolución para basar COBOL en ellas. [58] Esto fue un golpe para el comité de corto alcance, que había avanzado mucho en la especificación. A pesar de ser técnicamente superior, FACT no se creó teniendo en cuenta la portabilidad o mediante el consenso del fabricante y el usuario. También carecía de una implementación demostrable, [25] que permitiera 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 la implementación de COBOL no se desperdiciara. [59]
¿Y qué nombre quieres que se inscriba?
Le dije: 'Te lo escribiré'. Escribí el nombre: COBOL.
'¿Qué clase de nombre es ese?'
Bueno, es un nombre polaco. Lo acortamos y eliminamos mucha notación innecesaria '.
Howard Bromberg sobre cómo compró la lápida COBOL [60]
Pronto se hizo evidente que el comité era demasiado grande para que se pudieran realizar más progresos rápidamente. Howard Bromberg, frustrado, compró una lápida de $ 15 con "COBOL" grabado y se la envió a Charles Phillips para demostrar su disgusto. [b] [60] [62] Se formó un subcomité para analizar los idiomas existentes y estaba integrado por seis personas: [21] [63]
- 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é hizo la mayor parte del trabajo creando la especificación, dejando que el comité de corto alcance revisara y modificara su trabajo antes de producir la especificación terminada. [21]
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 que los programas portátiles eficientes se escribieran fácilmente, permitir a los usuarios pasar a nuevos sistemas con un mínimo esfuerzo y costo, y ser adecuados para programadores sin experiencia. [64] El Comité Ejecutivo de CODASYL creó posteriormente el Comité de Mantenimiento de COBOL para responder preguntas de usuarios y proveedores y para mejorar y ampliar las especificaciones. [sesenta y cinco]
Durante 1960, creció la lista de fabricantes que planeaban construir compiladores COBOL. En septiembre, cinco fabricantes más se habían unido a CODASYL ( Bendix , Control Data Corporation , General Electric (GE), National Cash Register y Philco ), y todos los fabricantes representados habían anunciado compiladores COBOL. GE e IBM planearon integrar COBOL en sus propios lenguajes, GECOM y COMTRAN, respectivamente. En contraste, International Computers and Tabulators planeó reemplazar su lenguaje, CODEL, con COBOL. [66]
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. [67] El 6 y 7 de diciembre, el mismo programa COBOL (aunque con cambios menores) se ejecutó en una computadora RCA y una computadora Remington-Rand Univac , lo que demuestra que la compatibilidad podría ser logrado. [68]
Las influencias relativas de los idiomas que se utilizaron continúan hasta el día de hoy en el aviso recomendado impreso en todos los manuales de referencia de COBOL:
COBOL es un lenguaje 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 o el Comité CODASYL COBOL ofrece garantía, expresa o implícita, en cuanto a la precisión y el funcionamiento del sistema y el lenguaje de programación. Además, ningún contribuyente, o el comité, asume responsabilidad alguna en relación con ello. 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 copyright 1958, 1959, de Unisys Corporation; Formulario de traductor comercial de IBM nº F28-8013, con copyright 1959 de IBM; FACT, DSI 27A5260-2760, copyright 1960 de Minneapolis-Honeywell.
Han autorizado específicamente el uso de este material, total o parcialmente, en las especificaciones COBOL. Dicha autorización se extiende a la reproducción y uso de especificaciones COBOL en manuales de programación o publicaciones similares. [69]
COBOL-61 a COBOL-65
Anónimo, junio de 1960 [70]
Se encontraron muchas fallas lógicas en COBOL 60 , lo que llevó a Charles Katz de GE a advertir que no se podía interpretar sin ambigüedades. Un comité reacio a corto plazo promulgó una limpieza total y, en marzo de 1963, se informó que la sintaxis de COBOL era tan definible como la de ALGOL , aunque persistieron las ambigüedades semánticas. [66]
Los primeros compiladores de COBOL eran primitivos y lentos. Una evaluación de la Marina de los EE. UU. De 1962 encontró velocidades de compilación de 3 a 11 declaraciones por minuto. A mediados de 1964, habían aumentado de 11 a 1000 declaraciones por minuto. Se observó que aumentar la memoria aumentaría drásticamente la velocidad y que los costos de compilación variaban enormemente: los costos por estado de cuenta estaban entre $ 0.23 y $ 18.91. [71]
A finales de 1962, IBM anunció que COBOL sería su lenguaje de desarrollo principal y que cesaría el desarrollo de COMTRAN. [71]
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. Esto luego fue reemplazado por las especificaciones COBOL-61 Extended en 1963, que introdujeron las funciones de escritura de informes y clasificación. [72] Las instalaciones agregadas corrigieron fallas identificadas por Honeywell a fines de 1959 en una carta al comité de corto alcance. [67] COBOL Edition 1965 aportó más aclaraciones a las especificaciones e introdujo facilidades para manejar archivos y tablas de almacenamiento masivo . [73]
COBOL-68
Comenzaron los esfuerzos para estandarizar COBOL para superar incompatibilidades entre versiones. A finales de 1962, tanto ISO como el Instituto de Normas de los Estados Unidos de América (ahora ANSI ) formaron grupos para crear normas. ANSI produjo el estándar COBOL X3.23 de EE. UU. En agosto de 1968, que se convirtió en la piedra angular de las versiones posteriores. [74] Esta versión se conocía como American National Standard (ANS) COBOL y fue adoptada por ISO en 1972. [75]
COBOL-74
En 1970, COBOL se había convertido en el lenguaje de programación más utilizado en el mundo. [76]
Independientemente del comité ANSI, el Comité de Lenguaje de Programación CODASYL estaba trabajando para mejorar el lenguaje. Describieron nuevas versiones en 1968, 1969, 1970 y 1973, incluidos cambios como nuevas comunicaciones entre programas, funciones de depuración y fusión de archivos, así como funciones mejoradas de manejo de cadenas e inclusión de bibliotecas . [77] Aunque CODASYL era independiente del comité ANSI, ANSI utilizó el CODASYL Journal of Development para identificar características que eran lo suficientemente populares como para justificar su implementación. [78] El Comité de Lenguaje de Programación también se puso en contacto con la ECMA y el Comité de Normas COBOL de Japón. [77]
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 no conocían la existencia del comité. También fue deficiente, careciendo de fondos para hacer públicos los documentos, como las actas de las reuniones y las propuestas de cambio, disponibles gratuitamente. [79]
En 1974, ANSI publicó una versión revisada de (ANS) COBOL, que contiene nuevas características como la organización de archivos , la DELETE
declaración [80] y el módulo de segmentación . [81] Las características eliminadas incluyeron la NOTE
declaración, la EXAMINE
declaració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 secuenciales y relativos). Estos constituyeron 44 cambios, que hicieron que las declaraciones existentes fueran incompatibles con el nuevo estándar. [82] El redactor del informe estaba programado para ser eliminado de COBOL, pero fue reinstalado antes de que se publicara el estándar. [83] [84] ISO adoptó posteriormente la norma actualizada en 1978. [75]
COBOL-85
En junio de 1978, se inició el trabajo de revisión de COBOL-74. El estándar propuesto (comúnmente llamado COBOL-80) difería significativamente del anterior, lo que generó preocupaciones sobre la incompatibilidad y los costos de conversión. En enero de 1981, Joseph T. Brophy, vicepresidente senior de seguros para viajeros, amenazó con demandar al comité de normas 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 "no productivas" y un "desperdicio total de nuestros recursos de programadores". [85] Más tarde ese año, la Asociación de Gestión de Procesamiento de Datos (DPMA) dijo que se "oponía firmemente" al nuevo estándar, citando costos de conversión "prohibitivos" y mejoras que eran "forzadas al usuario". [86] [87]
Durante el primer período de revisión pública, el comité recibió 2.200 respuestas, de las cuales 1.700 fueron cartas modelo negativas. [88] 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 respuestas estaban a favor de la norma propuesta. [89]
ISO TC97-SC5 instaló en 1979 el Grupo de Expertos COBOL internacional, por iniciativa de Wim Ebbinkhuijsen . El grupo estaba formado por expertos de COBOL de muchos países, incluido Estados Unidos. Su objetivo era lograr el entendimiento y el respeto mutuos entre ANSI y el resto del mundo con respecto a la necesidad de nuevas funciones COBOL. Después de tres años, ISO cambió el estado del grupo a un Grupo de Trabajo formal: WG 4 COBOL . El grupo asumió la propiedad principal y el desarrollo del estándar COBOL, donde ANSI hizo la mayoría de las propuestas.
En 1983, la DPMA retiró su oposición a la norma, citando la capacidad de respuesta del comité a las preocupaciones del público. Ese mismo año, un estudio de la Oficina Nacional de Normas concluyó que la norma propuesta presentaría pocos problemas. [87] [90] Un año después, se lanzó un compilador COBOL-80 para los usuarios de DEC VAX , quienes notaron que la conversión de programas COBOL-74 planteaba pocos problemas. La nueva EVALUATE
declaración y en línea PERFORM
fueron particularmente bien recibidas y mejoraron la productividad, gracias al flujo de control simplificado y la depuración . [91]
La segunda revisión pública generó otras 1,000 respuestas (principalmente negativas), mientras que la última atrajo solo 25, momento en el cual se habían abordado muchas preocupaciones. [87]
En 1985, el Grupo de Trabajo ISO 4 aceptó la versión entonces de la norma propuesta por ANSI, hizo varios cambios y la estableció como la nueva norma ISO COBOL 85. Fue publicada a finales de 1985.
Se cambiaron o desaprobaron sesenta características y se agregaron muchas [ cuantificar ] , como: [92] [93]
- Terminadores Alcance (
END-IF
,END-PERFORM
,END-READ
, etc.) - Subprogramas anidados
CONTINUE
, una declaración de no operaciónEVALUATE
, una declaración de cambioINITIALIZE
, una declaración que puede establecer grupos de datos en sus valores predeterminadosPERFORM
Cuerpos de bucle en línea : 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. [75]
Siguieron dos enmiendas en 1989 y 1993, la primera introduciendo funciones intrínsecas y la otra proporcionando correcciones. [75]
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 comerciales. [94] [se necesita una mejor fuente ]
A principios de la década de 1990, se comenzó a trabajar para agregar la orientación a objetos en la próxima revisión completa de COBOL. Las características orientadas a objetos se tomaron de C ++ y Smalltalk . [2] [3] La estimación inicial era que esta revisión se completara en 1997, y un Borrador del Comité ISO (CD) estaba disponible en 1997. Algunos proveedores (incluidos Micro Focus , Fujitsu e IBM ) introdujeron una sintaxis orientada a objetos basada en borradores de la revisión completa. La norma ISO final aprobada fue aprobada y publicada a fines de 2002. [95]
Fujitsu / GTSoftware, [96] Micro Focus y RainCode introdujeron compiladores COBOL orientados a objetos dirigidos a .NET Framework .
Había muchas otras características nuevas, muchas de las cuales habían estado en CODASYL COBOL Journal of Development desde 1978 y habían perdido la oportunidad de ser incluidas en COBOL-85. [97] Estas otras características incluían: [98] [99]
- Código de forma libre
- Funciones definidas por el usuario
- Recursividad
- Procesamiento basado en la configuración regional
- Soporte para juegos de caracteres extendidos como Unicode
- Tipos de datos binarios y de coma flotante (hasta entonces, los elementos binarios se truncaban en función de la especificación de base 10 de su declaración )
- Resultados aritméticos portátiles
- Tipos de datos bit y booleanos
- Punteros y sintaxis para obtener y liberar almacenamiento
- El
SCREEN SECTION
de interfaces de usuario basadas en texto - La
VALIDATE
facilidad - Interoperabilidad mejorada con otros lenguajes de programación y entornos marco como .NET y Java .
Se publicaron tres correcciones de errores para la norma: dos en 2006 y una en 2009. [100]
COBOL 2014
Entre 2003 y 2009, se elaboraron tres informes técnicos que describen la finalización de objetos , el procesamiento XML y las clases de recopilación para COBOL. [100]
COBOL 2002 sufrió de un soporte deficiente: ningún compilador admitió completamente el estándar. Micro Focus descubrió que se debía a la falta de demanda de las nuevas funciones por parte de los usuarios y a la abolición del conjunto de pruebas NIST , que se había utilizado para probar la conformidad del compilador. También se constató que el proceso de normalización era lento y carecía de recursos. [101]
COBOL 2014 incluye los siguientes cambios: [102]
- Los resultados aritméticos portátiles han sido reemplazados por tipos de datos IEEE 754
- Las funciones principales se han hecho opcionales, como la función
VALIDATE
, el redactor de informes y la función de manejo de pantalla. - Sobrecarga de métodos
- Tablas de capacidad dinámica (una característica eliminada del borrador de COBOL 2002) [103]
Legado
Los programas COBOL se utilizan a nivel mundial en gobiernos y empresas y se ejecutan en diversos sistemas operativos, como z / OS , z / VSE , VME , Unix , OpenVMS y Windows . En 1997, Gartner Group informó que el 80% del negocio mundial se ejecutaba en COBOL con más de 200 mil millones de líneas de código y 5 mil millones de líneas más que se escribían anualmente. [104]
Cerca del final del siglo XX, el problema del año 2000 (Y2K) fue el foco de un importante esfuerzo de programación 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 ha sido atribuido [¿ por quién? ] a la gran cantidad de COBOL orientado a los negocios, ya que las aplicaciones comerciales usan fechas en gran medida, ya campos de datos de longitud fija. Después del esfuerzo de limpieza que se puso en estos programas para el año 2000, una encuesta de 2003 encontró que muchos seguían en uso. [105] 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". [106]
En 2006 y 2012, las encuestas de Computerworld encontraron que más del 60% de las organizaciones usaban COBOL (más que C ++ y Visual Basic .NET ) y que para la mitad de ellas, COBOL se usaba para la mayoría de su software interno. [9] [107] El 36% de los gerentes dijeron que planeaban migrar desde COBOL y el 25% dijo que les gustaría hacerlo si fuera más barato. En cambio, algunas empresas han migrado sus sistemas de costosos mainframes a sistemas más baratos y modernos, mientras mantienen sus programas COBOL. [9]
El testimonio ante la Cámara de Representantes en 2016 indicó que COBOL todavía está en uso por muchas agencias federales. [108] Reuters informó en 2017 que el 43% de los sistemas bancarios todavía usaban COBOL con más de 220 mil millones de líneas de código COBOL en uso. [109]
Para 2019, el número de programadores COBOL se estaba reduciendo rápidamente debido a las jubilaciones, lo que provocó una brecha de habilidades inminente en las organizaciones comerciales y gubernamentales que todavía utilizan sistemas de mainframe para el procesamiento de transacciones de alto volumen. Los esfuerzos para reescribir sistemas en lenguajes más nuevos han demostrado ser costosos y problemáticos, al igual que la subcontratación del mantenimiento del código, por lo que se recomiendan propuestas para capacitar a más personas en COBOL. [110]
Durante la pandemia de COVID-19 y el consiguiente aumento del desempleo, varios estados de EE. UU. Informaron de una escasez de programadores de COBOL capacitados para respaldar los sistemas heredados utilizados para la gestión de beneficios de desempleo. Muchos de estos sistemas habían estado en proceso de conversión a lenguajes de programación más modernos antes de la pandemia, pero el proceso tuvo que suspenderse. [111] De manera similar, el Servicio de Impuestos Internos de EE . UU . Se apresuró a parchear su Archivo Maestro Individual basado en COBOL para desembolsar las decenas de millones de pagos exigidos por la Ley de Ayuda, Ayuda y Seguridad Económica por Coronavirus . [112]
Características
Sintaxis
COBOL tiene una sintaxis similar al inglés, que se usa para describir casi todo en un programa. Por ejemplo, una condición se puede expresar como o más concisamente como o . Las condiciones más complejas se pueden "abreviar" eliminando condiciones y variables repetidas. Por ejemplo, se puede abreviar a . Para admitir esta sintaxis similar al inglés, COBOL tiene más de 300 palabras clave . [113] [c] Algunas de las palabras clave son ortografías simples alternativas o pluralizadas de la misma palabra, lo que proporciona declaraciones y cláusulas más parecidas al inglés; por ejemplo, las palabras clave y se pueden usar indistintamente, como can y , y y .x IS GREATER THAN y
x GREATER y
x > y
a > b AND a > c OR a = d
a > b AND c OR = d
IN
OF
IS
ARE
VALUE
VALUES
Cada programa COBOL se compone de cuatro elementos léxicos básicos : palabras, literales, cadenas de caracteres de imágenes (ver § cláusula PICTURE ) y separadores. Las palabras incluyen palabras reservadas e identificadores definidos por el usuario. Tienen hasta 31 caracteres y pueden incluir letras, dígitos, guiones y guiones bajos. Los literales incluyen números (p 12
. Ej. ) Y cadenas (p 'Hello!'
. Ej .). [115] Los separadores incluyen el carácter de espacio y las comas y punto y coma seguidos de un espacio. [116]
Un programa COBOL se divide en cuatro divisiones: la división de identificación, la división del medio ambiente, 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 y las interfaces. La división de entorno especifica las características del programa que dependen del sistema que lo ejecuta, como archivos y conjuntos de caracteres . La división de datos se utiliza para declarar variables y parámetros . La división de procedimiento contiene las declaraciones del programa . Cada división se subdivide en secciones, que se componen de párrafos.
Metalenguaje
La sintaxis de COBOL generalmente se describe con un metalenguaje único usando llaves, corchetes, barras y subrayado. El metalenguaje fue desarrollado para las especificaciones COBOL originales. Aunque la forma Backus-Naur existía en ese momento, el comité no había oído hablar de ella. [117]
Elemento | Apariencia | Función |
---|---|---|
Todas las capitales | EJEMPLO | Palabra reservada |
Subrayado | EJEMPLO | La palabra reservada es obligatoria |
Tirantes | {} | Solo se puede seleccionar una opción |
Soportes | [] | Se pueden seleccionar cero o una opción |
Elipsis | ... | El elemento anterior puede repetirse |
Barras | {| |} | Se pueden seleccionar una o más opciones. Cualquier opción solo puede seleccionarse una vez. |
[| |] | Se pueden seleccionar cero o más opciones. Cualquier opción solo puede seleccionarse una vez. |
Como ejemplo, considere la siguiente descripción de una ADD
declaración:
Esta descripción permite las siguientes variantes:
AÑADIR 1 A x AÑADIR 1 , a , b A x REDONDEADO , y , z REDONDEADOAÑADIR a , b A c EN TAMAÑO ERROR PANTALLA "Error" FIN-AÑADIR ADD un A b NO TAMAÑO DE ERRORES DE PANTALLA "No hay error" EN TAMAÑO DE ERRORES DE PANTALLA "error"
Formato de código
COBOL se puede escribir en dos formatos: fijo (predeterminado) o gratuito. En formato fijo, el código debe estar alineado para caber en ciertas áreas (una restricción del uso de tarjetas perforadas). Hasta COBOL 2002, estos eran:
Nombre | Columna (s) | Uso |
---|---|---|
Área de número de secuencia | 1–6 | Originalmente utilizado para números de tarjeta / línea (facilitando la clasificación mecánica de tarjetas perforadas para asegurar la secuencia de código de programa deseada después de la edición / manipulación manual), el compilador ignora esta área |
Área del indicador | 7 | Aquí se permiten los siguientes caracteres:
|
Área A | 8-11 | Esta contiene: DIVISION , SECTION y las cabeceras de procedimiento; 01 y 77 números de nivel y descriptores de archivo / informe |
Área B | 12–72 | Cualquier otro código no permitido en el Área A |
Área de nombre de programa | 73– | Históricamente, hasta la columna 80 para tarjetas perforadas, se utiliza para identificar el programa o secuencia a la que pertenece la tarjeta. |
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. [118]
COBOL 2002 también introdujo código de formato libre. El código de formato libre se puede colocar en cualquier columna del archivo, como en los lenguajes de programación más nuevos. Los comentarios se especifican mediante *>
, que se pueden colocar en cualquier lugar y también se pueden utilizar en el código fuente de formato fijo. Las líneas de continuación no están presentes y la >>PAGE
directiva reemplaza el /
indicador. [118]
División de identificación
La divisió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 y las interfaces han estado 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. [119] La herencia y las interfaces proporcionan polimorfismo . El soporte para la programación genérica se proporciona a través de clases parametrizadas, que se pueden instanciar para usar cualquier clase o interfaz. Los objetos se almacenan como referencias que pueden estar restringidas a un cierto tipo. Hay dos formas de llamar a un método: la INVOKE
declaración, que actúa de manera similar CALL
, o mediante la invocación de un método en línea, que es análoga a usar funciones. [120]
*> Son equivalentes. INVOCAR my-class "foo" RETORNO var MOVE my-class :: "foo" TO var *> Invocación de método en línea
COBOL no proporciona una forma de ocultar métodos. Sin embargo, los datos de la clase se pueden ocultar declarándolos sin una PROPERTYcláusula, lo que deja al usuario sin forma de acceder a ellos. [121] La sobrecarga de métodos se agregó en COBOL 2014. [122]
División de medio ambiente
La divisió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 signos de moneda, configuraciones regionales y conjuntos de caracteres. La sección de entrada y salida contiene información relacionada con el archivo.
Archivos
COBOL admite tres formatos de archivo u organizaciones : secuencial, indexado y relativo. En archivos secuenciales, los registros son contiguos y se deben recorrer secuencialmente , de manera similar a una lista vinculada . Los archivos indexados tienen uno o más índices que permiten acceder a los registros de forma aleatoria y que se pueden clasificar en ellos. Cada registro debe tener una clave única , pero no es necesario que otras claves de registro alternativas sean únicas. Las implementaciones de archivos indexados varían entre los proveedores, aunque las implementaciones comunes, como C-ISAM y VSAM , se basan en ISAM de IBM . Los archivos relativos, como los archivos 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 una clave de 10. Esto significa que la creación de un registro con una clave de 5 puede requerir la creación de registros anteriores (vacíos). Los archivos relativos también permiten el acceso secuencial y aleatorio. [123]
Una extensión no estándar común es la organización secuencial de líneas , que se utiliza para procesar archivos de texto. Los registros de un archivo terminan con una nueva línea y pueden tener una longitud variable. [124]
División de datos
La división de datos se divide en seis secciones que declaran diferentes elementos: la sección de archivo, para registros de archivo; 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 vinculación, para los parámetros y el valor de retorno; la sección de informe y la sección de pantalla, para interfaces de usuario basadas en texto .
Datos agregados
Los elementos de datos en COBOL se declaran jerárquicamente mediante el uso de números de nivel que indican si un elemento de datos es parte de otro. Un artículo con un número de nivel más alto está subordinado a un artículo con uno más bajo. 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 lo hacen se denominan elementos elementales . Los números de nivel utilizados para describir elementos de datos estándar están entre 1 y 49. [125] [126]
01 algún récord . *> Elemento de registro de grupo agregado 05 núm PIC 9 (10) . *> Elemento elemental 05 la-fecha . *> Ítem 10 del registro del (sub) grupo agregado del año PIC 9 (4) . *> Elemento de primaria 10 del mes PIC 99 . *> Tema 10 de primaria del día PIC 99 . *> Elemento elemental
En el ejemplo anterior, el punto elemental num
y elemento de grupo the-date
están subordinados al registro some-record
, mientras que los artículos elementales the-year
, the-month
y the-day
forman parte del grupo de artículos the-date
.
Los elementos subordinados se pueden eliminar la ambigüedad 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 del año PIC 9 (4) . 05 del mes PIC 99 . 05 el día PIC 99 .
Los nombres the-year
, the-month
y the-day
son ambiguos por sí mismos, ya que más de un elemento de datos se define con esos nombres. Para especificar un elemento de datos en particular, por ejemplo, uno de los elementos contenidos dentro del sale-date
grupo, el programador usaría the-year IN sale-date
(o el equivalente the-year OF sale-date
). (Esta sintaxis es similar a la "notación de puntos" admitida por la mayoría de los lenguajes contemporáneos).
Otros niveles de datos
Se utiliza un número de nivel 66 para declarar una reagrupación de elementos previamente definidos, independientemente de cómo estén estructurados esos elementos. Este nivel de datos, al que también se hace referencia por la RENAMES
cláusula asociada , rara vez se utiliza [127] y, hacia 1988, se encontraba habitualmente en programas antiguos. Su capacidad para ignorar los datos de estructura jerárquica y lógica hizo que su uso no fuera recomendado y muchas instalaciones lo prohibieran. [128]
01 registro de cliente . 05 llave personalizada PIC X (10) . 05 nombre personalizado . 10 nombre del cliente PIC X (30) . 10 apellido del cliente PIC X (30) . 05 cust-dob FOTO 9 (8) . 05 Cust-balance PIC 9 (7) V99 . 66 cust-personal-details RENOMBRES cust-name THRU cust-dob . 66 cust-all-details RENOMBRES cust-name THRU cust-balance .
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-name
y sales-region
, que son elementos de datos que no pertenecen al grupo que son independientes de (no subordinados a) cualquier otro elemento de datos:
77 nombre de propiedad PIC X (80) . 77 región de ventas PIC 9 (5) .
Un número de nivel 88 declara un nombre de condición (el llamado nivel 88) que es verdadero cuando su elemento de datos principal contiene uno de los valores especificados en su cláusula. [129] Por ejemplo, el siguiente código define dos elementos de nombre de condición de 88 niveles que son verdaderos o falsos según el valor de datos de carácter actual del elemento de datos. Cuando el elemento de datos contiene un valor de , el nombre-condición es verdadero, mientras que cuando contiene un valor de o , el nombre-condición es verdadero. Si el elemento de datos contiene algún otro valor, ambos nombres de condición son falsos. VALUE
wage-type
'H'
wage-is-hourly
'S'
'Y'
wage-is-yearly
01 salariales del tipo PIC X . 88 salario por hora VALOR "H" . 88 salario es anual VALOR "S" , "Y" .
Tipos de datos
COBOL estándar proporciona los siguientes tipos de datos: [130]
Tipo de datos | Declaración de muestra | Notas |
---|---|---|
Alfabético | PIC A(30) | Solo puede contener letras o espacios |
Alfanumérico | PIC X(30) | Puede contener cualquier carácter |
Booleano | PIC 1 USAGE BIT | Datos almacenados en forma de 0 y 1, como un número binario |
Índice | USAGE INDEX | Se utiliza para hacer referencia a los elementos de la tabla. |
Nacional | PIC N(30) | Similar a alfanumérico, pero usando un conjunto de caracteres extendido, p. Ej. UTF-8 |
Numérico | PIC 9(5)V9(5) | Puede contener solo números |
Objeto | USAGE OBJECT REFERENCE | Puede hacer referencia a un objeto o NULL |
Puntero | USAGE POINTER |
La seguridad de tipo 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. [131] Por el contrario, las referencias a objetos y los punteros solo pueden asignarse a elementos del mismo tipo y sus valores pueden estar restringidos a un determinado tipo. [132]
Cláusula PICTURE
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, a 9
indica un dígito decimal y an S
indica que el elemento está firmado . Otros caracteres de imagen (llamados caracteres de inserción y edición ) especifican cómo se debe formatear un elemento. Por ejemplo, una serie de caracteres define las posiciones de los caracteres, así como la forma en que se colocará un carácter de signo inicial dentro de los datos finales del carácter; el carácter no numérico situado más a la derecha contendrá el signo del elemento, mientras que otras posiciones de caracteres correspondientes a a 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, es equivalente a . Las especificaciones de imagen que contienen solo caracteres de dígito ( ) y signo ( ) definen elementos de datos puramente numéricos , mientras que las especificaciones de imagen que contienen caracteres alfabéticos ( ) 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 . [133] +
+
9(7)
9999999
9
S
A
X
PICTURE cláusula | Valor en | Valor hacia fuera |
---|---|---|
PIC 9(5) | 100 | 00100 |
"Hello" | "Hello" (esto es legal, pero da como resultado un comportamiento indefinido ) [131] | |
PIC +++++ | -10 | " -10" (tenga en cuenta los espacios iniciales) |
PIC 99/99/9(4) | 31042003 | "31/04/2003" |
PIC *(4)9.99 | 100.50 | "**100.50" |
0 | "****0.00" | |
PIC X(3)BX(3)BX(3) | "ABCDEFGHI" | "ABC DEF GHI" |
Cláusula de USO
La USAGE
cláusula declara el formato en el que se almacenan los datos. Dependiendo del tipo de datos, puede complementar o usarse en lugar de una PICTURE
cláusula. Si bien se puede usar para declarar punteros y referencias de objetos, está principalmente orientado a especificar tipos numéricos. Estos formatos numéricos son: [134]
- Binario, donde un tamaño mínimo está especificado por la
PICTURE
cláusula o por unaUSAGE
cláusula comoBINARY-LONG
. USAGE COMPUTATIONAL
, donde los datos pueden almacenarse en cualquier formato que proporcione la implementación; a menudo equivalente aUSAGE BINARY
USAGE DISPLAY
, el formato predeterminado, donde los datos se almacenan como una cadena- De coma flotante, ya sea en un formato dependiente de la implementación o de acuerdo con IEEE 754.
USAGE NATIONAL
, donde los datos se almacenan como una cadena usando un conjunto de caracteres extendidoUSAGE PACKED-DECIMAL
, donde los datos se almacenan en el formato decimal más pequeño posible (normalmente decimal empaquetado codificado en binario )
Redactor de informes
El redactor de informes es una función declarativa para la creación de informes. El programador solo necesita especificar el diseño del informe y los datos necesarios para producirlo, liberándolos de tener que escribir código para manejar cosas como saltos de página, formato de datos y encabezados y pies de página. [135]
Los informes están asociados con archivos de informes, que son archivos en los que solo se puede escribir mediante declaraciones del redactor de informes.
FD report-out REPORT 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 títulos, bases y detalles del informe. Los informes evitan las interrupciones de los controles jerárquicos . Las interrupciones de control ocurren cuando una variable clave cambia su valor; por ejemplo, al crear un informe que detalla los pedidos de los clientes, podría producirse una interrupción del control cuando el programa llegue a los pedidos de un cliente diferente. A continuación, se muestra una descripción de informe de ejemplo para un informe que proporciona las ventas de un vendedor y advierte de cualquier registro no válido:
Informe de ventas de RD LÍMITES DE PÁGINA 60 LÍNEAS PRIMER DETALLE 3 CONTROLES nombre del vendedor . 01 TIPO DE ENCABEZADO DE PÁGINA . 03 COL 1 VALOR "Informe de ventas" . 03 COL 74 VALOR "Página" . 03 COL 79 PIC Z9 FUENTE PÁGINA-CONTADOR . 01 venta al día DETALLE TIPO , LÍNEA + 1 . 03 COL 3 VALOR "Ventas en" . 03 COL 12 PIC 99/99/9999 FUENTE fecha de venta . 03 COL 21 VALOR "fueron" . 03 COL 26 PIC $$$$ 9.99 FUENTE ventas-monto . 01 DETALLE DE TIPO de ventas no válidas , LÍNEA + 1 . 03 COL 3 VALOR "REGISTRO NO VÁLIDO:" . 03 COL 19 FOTO X (34) FUENTE registro de ventas . 01 TIPO DE CONTROL ENCABEZADO nombre del vendedor , LÍNEA + 2 . 03 COL 1 VALOR "Vendedor:" . 03 COL 9 PIC X (30) FUENTE nombre del vendedor .
La descripción del informe anterior describe el siguiente diseño:
Informe de ventas Página 1Vendedor: Howard Bromberg Las ventas el 12/10/2008 fueron de $ 1000,00 Las ventas el 12/12/2008 fueron de $ 0.00 Las ventas el 13/12/2008 fueron de $ 31,47 REGISTRO NO VÁLIDO: Howard Bromberg XXXXYYVendedor: Howard Discount...Informe de ventas Página 12 Las ventas el 05/08/2014 fueron de $ 543,98 REGISTRO NO VÁLIDO: William Selden 12O52014FOOFOO Las ventas el 30/05/2014 fueron de $ 0.00
Cuatro declaraciones controlan el redactor del informe:, INITIATE
que prepara al redactor del informe 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 de informe de ventas anterior, la división de procedimientos podría verse así:
ABRIR INPUT ventas , OUTPUT report-out INICIAR ventas-report REALIZAR HASTA 1 <> 1 LEA ventas EN FIN DE SALIDA PERFORM FIN-LEER VALIDAR ventas récord SI válida a grabar GENERAR venta-en-día ELSE GENERAN -venta no válidos END IF END-PERFORM TERMINAR ventas-informe CERRAR ventas , informe de salida .
El uso de la función Report Writer tendió a variar considerablemente; algunas organizaciones lo utilizaron ampliamente y otras no lo utilizaron en absoluto. [136] Además, las implementaciones de Report Writer variaban en calidad, y las del extremo inferior a veces usaban cantidades excesivas de memoria en tiempo de ejecución. [136]
División de procedimientos
Procedimientos
Las secciones y párrafos de la división de procedimientos (denominados colectivamente procedimientos) se pueden utilizar como etiquetas y como subrutinas simples . A diferencia de otras divisiones, los párrafos no necesitan estar en secciones. [137] La ejecución pasa por los procedimientos de un programa hasta que se termina. [138] Para usar procedimientos como subrutinas, PERFORM
se usa el verbo.
Una PERFORM
declaración se parece un poco a una llamada a procedimiento en un lenguaje moderno en el sentido de que la ejecución vuelve al código que sigue a la PERFORM
declaración al final del código llamado; sin embargo, no proporciona ningún mecanismo para pasar parámetros o devolver un valor de resultado. Si se invoca una subrutina usando una declaració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:PERFORM subroutine
PERFORM
PERFORM sub-1 THRU sub-n
PROCEDIMIENTO modo y tal . REALIZAR ALPHA REALIZAR ALPHA A TRAVÉS DE GAMMA PARADA RUN . ALPHA . PANTALLA 'A' . BETA . PANTALLA 'B' . GAMMA . MOSTRAR 'C' .
La salida de este programa será: "AAB C".
PERFORM
también se diferencia de las llamadas a procedimientos convencionales en que, al menos tradicionalmente, no existe la noción de una pila de llamadas. Como consecuencia, las invocaciones anidadas son posibles (una secuencia de código que se PERFORM
'ed puede ejecutar una PERFORM
declaración en sí misma), pero requiere un cuidado especial si ambas invocaciones ejecutan partes del mismo código. El problema surge cuando el código de la invocación interna llega al punto de salida de la invocación externa. Más formalmente, si el control pasa por el punto de salida de una PERFORM
invocación que se llamó anteriormente pero que aún no se ha completado, el estándar COBOL 2002 estipula oficialmente que el comportamiento no está definido .
La razón es que COBOL, en lugar de una "dirección de retorno", opera con lo que podría llamarse 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 se transfiere el control a esa dirección. Antes de que se ejecute el programa, la dirección de continuación para cada procedimiento se inicializa en la dirección de inicio del procedimiento que viene a continuación en el texto del programa, de modo que, si no PERFORM
ocurren declaraciones, el control fluye de arriba hacia abajo a través del programa. Pero cuando se PERFORM
ejecuta una instrucción, modifica la dirección de continuación del procedimiento llamado (o el último procedimiento del rango llamado, si PERFORM THRU
se usó), de modo que el control regresará al sitio de la llamada al final. El valor original se guarda y luego se restaura, pero solo hay una posición de almacenamiento. Si dos invocaciones anidadas operan en código superpuesto, pueden interferir en la gestión de la continuación de la otra de varias formas. [139] [140]
El siguiente ejemplo (tomado de Veerman & Verhoeven 2006 ) ilustra el problema:
LABEL1 . DISPLAY '1' REALIZAR LABEL2 TRAVÉS LABEL3 de STOP RUN . LABEL2 . DISPLAY '2' REALIZAR LABEL3 TRAVÉS Label4 . LABEL3 . MOSTRAR '3' . ETIQUETA 4 . MOSTRAR '4' .
Uno podría esperar que la salida de este programa fuera "1 2 3 4 3": después de mostrar "2", el segundo PERFORM
hace que se muestren "3" y "4", y luego la primera invocación continúa con "3" . En las implementaciones tradicionales de COBOL, este no es el caso. Por el contrario, la primera PERFORM
declaración establece la dirección de continuación al final de LABEL3
para que salte de nuevo al sitio de llamada en el interior LABEL1
. La segunda PERFORM
declaración establece la devolución al final de, LABEL4
pero 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 PERFORM
instrucción externa y el programa deja de imprimir solo "1 2 3". Por otro lado, en algunas implementaciones de COBOL como el compilador de código abierto TinyCOBOL, las dos PERFORM
declaraciones no interfieren entre sí y la salida es de hecho "1 2 3 4 3". Por lo tanto, el comportamiento en tales casos no solo es (quizás) sorprendente, tampoco es portátil. [140]
Una consecuencia especial de esta limitación es que PERFORM
no se puede utilizar para escribir código recursivo. Otro ejemplo simple para ilustrar esto (ligeramente simplificado de Veerman & Verhoeven 2006 ):
MOVER 1 A A REALIZAR LA ETIQUETA PARADA RUN . ETIQUETA . MOSTRAR A SI A < 3 AGREGAR 1 A UNA ETIQUETA DE EJECUCIÓN FIN-SI MOSTRAR 'FIN' .
Uno podría esperar que la salida sea "1 2 3 END END END" y, de hecho, eso es lo que producirán algunos compiladores COBOL. Pero algunos compiladores, como IBM COBOL, producirán código que imprima "1 2 3 END END END END ..." y así sucesivamente, imprimiendo "END" una y otra vez en un bucle sin fin. Dado que hay espacio limitado para almacenar las direcciones de continuación de la copia de seguridad, las copias de seguridad se sobrescriben en el transcurso de las invocaciones recursivas, y todo lo que se puede restaurar es el salto hacia atrás DISPLAY 'END'
. [140]
Declaraciones
COBOL 2014 tiene 47 declaraciones (también llamadas verbos ), [141] que se pueden agrupar en las siguientes categorías generales: flujo de control, E / S, manipulación de datos y redactor de informes. Las declaraciones del redactor del informe se tratan en la sección del redactor del informe .
Flujo de control
Las declaraciones condicionales de COBOL son IF
y EVALUATE
. EVALUATE
es una declaración similar a un interruptor 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 TRUE TAMBIÉN velocidad deseada TAMBIÉN actual velocidad CUANDO tapa cerrada TAMBIÉN min-velocidad THRU max velocidad TAMBIÉN MENOS DE deseada velocidad PERFORM velocidad-up-máquina CUANDO tapa cerrada- TAMBIÉN min-velocidad THRU max velocidad TAMBIÉN MAYOR QUE desea -velocidad REALIZA la desaceleración de la máquina CUANDO se abre la tapa TAMBIÉN CUALQUIER TAMBIÉN NO CERO REALIZA parada de emergencia CUANDO OTROS CONTINÚAN FIN-EVALUAR
La PERFORM
declaración se usa para definir bucles que se ejecutan hasta que una condición es verdadera (no mientras sea verdadera, 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). CALL
y INVOKE
llamar 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. [142] Los parámetros se pueden pasar por referencia , por contenido (donde una copia se pasa por referencia) o por valor (pero solo si hay un prototipo disponible). [143]CANCEL
descarga subprogramas de la memoria. GO TO
hace que el programa salte a un procedimiento específico.
La GOBACK
declaración es una declaración de retorno y la STOP
declaración detiene el programa. La EXIT
declaración tiene seis formatos diferentes: se puede utilizar como una declaración de retorno, una declaración de interrupción , una declaración de continuación , un marcador de fin o para salir de un procedimiento. [144]
Las excepciones se generan mediante una RAISE
declaración y se capturan con un controlador, o declarativo , definido en la parte de la división del procedimiento. Los declarativos son secciones que comienzan con una declaración que especifican los errores que se deben manejar. Las excepciones pueden ser nombres u objetos. se usa en un declarativo para saltar a la declaración después de la que generó la excepción oa un procedimiento fuera de . A diferencia de otros idiomas, es posible que las excepciones no detectadas no terminen el programa y el programa pueda continuar sin verse afectado. DECLARATIVES
USE
RESUME
DECLARATIVES
E / S
File I / O es manejado por el auto-describen OPEN
, CLOSE
, READ
, y WRITE
declaraciones, junto con otros tres: REWRITE
que actualiza un registro; START
, que selecciona registros posteriores a los que acceder mediante la búsqueda de un registro con una determinada clave; y UNLOCK
, que libera un bloqueo en el último registro al que se accedió.
La interacción del usuario se realiza mediante ACCEPT
y DISPLAY
.
Manipulación de datos
Los siguientes verbos manipulan datos:
INITIALIZE
, que establece los elementos de datos en sus valores predeterminados.MOVE
, que asigna valores a elementos de datos; MOVE CORRESPONDING asigna los campos correspondientes con el mismo nombre .SET
, que tiene 15 formatos: puede modificar índices, asignar referencias a objetos y alterar capacidades de tablas, entre otras funciones. [145]ADD
,SUBTRACT
,MULTIPLY
,DIVIDE
, YCOMPUTE
, que manejar aritmética (conCOMPUTE
asignar el resultado de una fórmula a una variable).ALLOCATE
yFREE
que manejan la memoria dinámica .VALIDATE
, que valida y distribuye datos como se especifica en la descripción de un elemento en la división de datos.STRING
yUNSTRING
, que concatenan y dividen cadenas , respectivamente.INSPECT
, que cuenta o reemplaza instancias de subcadenas especificadas dentro de una cadena.SEARCH
, que busca en una tabla la primera entrada que cumple una condición.
Los archivos y tablas se ordenan usando SORT
y el MERGE
verbo fusiona y ordena los archivos. El RELEASE
verbo proporciona registros para ordenar y RETURN
recupera registros ordenados en orden.
Terminación del alcance
Algunas declaraciones, como IF
y READ
, pueden contener declaraciones. Tales declaraciones pueden terminarse de dos maneras: por un período ( terminación implícita ), que termina todas las declaraciones no terminadas contenidas, o por un terminador de alcance, que termina la declaración abierta coincidente más cercana.
*> Periodo Terminator ( "terminación implícita") SI no válido a grabar SI no-más-records SIGUIENTE FRASE MÁS LEER récord de archivo EN FIN SET no-more-records AL VERDADERO . *> Terminadores Alcance ( "terminación explícita") IF no válida a grabar SI no-más-registros CONTINUAR ELSE LEER récord de archivo EN FIN SET no-más-records AL VERDADERO FIN-READ END IF END-IF
Las declaraciones anidadas terminadas con un punto son una fuente común de errores. [146] [147] Por ejemplo, examine el siguiente código:
SI x DISPLAY y . PANTALLA z .
Aquí, la intención es mostrar y
y z
si la condición x
es verdadera. Sin embargo, z
se mostrará cualquiera que sea el valor de x
porque la IF
declaración termina después de un período erróneo .DISPLAY y
Otro error es el resultado del problema colgando else , cuando dos IF
declaraciones se pueden asociar con un ELSE
.
IF x IF y DISPLAY un ELSE DISPLAY b .
En el fragmento anterior, se ELSE
asocia con la declaración en lugar de la declaración, lo que provoca un error. Antes de la introducción de terminadores de alcance explícitos, su prevención requeriría colocarse después del interno . [147]IF y
IF x
ELSE NEXT SENTENCE
IF
Código auto modificable
La especificación COBOL original (1959) apoyó la infame declaración, para la cual muchos compiladores generaron código auto-modificable . y son etiquetas de procedimiento, y la declaración única en el procedimiento ejecutada después de tal declaración significa en su lugar. Muchos compiladores aún lo apoyan, [148] pero se consideró obsoleto en la norma COBOL 1985 y se eliminó en 2002. [149]ALTER X TO PROCEED TO Y
X
Y
GO TO
X
ALTER
GO TO Y
La ALTER
declaración fue mal considerada porque socavó la "localidad del contexto" y dificultó la comprensión de la lógica general de un programa. [150] Como escribió el autor de libros 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 ... una declaración GO TO en un párrafo por sí misma, que indica la existencia de un número desconocido de declaraciones ALTER en lugares desconocidos a lo largo del programa, infunde miedo en el corazón del programador más valiente ". [150]
Hola Mundo
Un programa " Hola, mundo " en COBOL:
DIVISIÓN DE IDENTIFICACIÓN . PROGRAMA-ID . hola-mundo . DIVISIÓN DE PROCEDIMIENTOS . PANTALLA "¡Hola, mundo!" .
Cuando el - ahora famoso - "¡Hola, mundo!" El ejemplo de programa en El lenguaje de programación C se publicó por primera vez en 1978. Se habría enviado una muestra de programa COBOL de mainframe similar a través de JCL , muy probablemente utilizando un lector de tarjetas perforadas y tarjetas perforadas de 80 columnas. La siguiente lista, con una DIVISIÓN DE DATOS vacía , se probó con Linux y el emulador System / 370 Hercules con MVS 3.8J. El JCL, escrito en julio de 2015, se deriva de los tutoriales y ejemplos de Hercules alojados por Jay Moseley. [151] De acuerdo con la programación COBOL de esa época, HOLA, MUNDO se muestra en letras mayúsculas.
// COBUCLG JOB ( 001 ), 'COBOL BASE TEST' , 00010000 // CLASS = A , MSGCLASS = A , MSGLEVEL = ( 1 , 1 ) 00020000 // BASETEST EXEC COBUCLG 00030000 // COB . SYSIN DD * 00040000 00000 * VALIDACIÓN DE BASE COBOL INSTALL 00050000 01000 DIVISIÓN DE IDENTIFICACIÓN . 00060000 01100 ID DE PROGRAMA . 'HOLA' . 00070000 02000 DIVISIÓN MEDIO AMBIENTE . 00080000 02100 SECCIÓN DE CONFIGURACIÓN . 00090000 02110 FUENTE-ORDENADOR . GNULINUX . 00100000 02120 OBJETO-ORDENADOR . HÉRCULES . 00110000 02200 NOMBRES ESPECIALES . 00120000 02210 CONSOLA ES CONSL . 00130000 03000 DATOS DIVISIÓN . 00140000 04000 PROCEDIMIENTO DE DIVISIÓN . 00150000 04100 00 - PRINCIPAL . 00160000 04110 MOSTRAR 'HOLA, MUNDO' EN CONSL . 00170000 04900 PARADA RUN . 00180000 // LKED . SYSLIB DD DSNAME = SYS1 . COBLIB , DISP = SHR 00190000 // DD DSNAME = SYS1 . LINKLIB , DISP = SHR 00200000 // IR . SYSPRINT DD SYSOUT = A 00210000 // 00220000
Después de enviar el JCL, la consola MVS mostró:
19.52.48 TRABAJO 3 $ HASP100 COBUCLG EN READER1 COBOL BASE PRUEBA 19.52.48 TRABAJO 3 IEF677I MENSAJE (S) DE ADVERTENCIA PARA EL TRABAJO COBUCLG EMITIDO 19.52.48 TRABAJO 3 $ HASP373 COBUCLG COMENZADO - INIT 1 - CLASE A - SYS BSP1 19.52.48 FALTA DECLARACIÓN DEL TRABAJO 3 IEC130I SYSPUNCH DD 19.52.48 FALTA DECLARACIÓN DEL TRABAJO 3 IEC130I SYSLIB DD 19.52.48 FALTA DECLARACIÓN DEL TRABAJO 3 IEC130I SYSPUNCH DD 19.52.48 TRABAJO 3 IEFACTRT - Nombre de paso Procstep Programa Retcode 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 TERMINADO
La línea 10 de la lista de la consola anterior está resaltada para el efecto, el resaltado no es 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 de ejecución de trabajos, 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 estaba generalizando cada vez más. Edsger Dijkstra , un destacado 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 varios otros lenguajes contemporáneos; remarcando que "el uso de COBOL paraliza la mente". [152] En una disensión publicada a los comentarios de Dijkstra, el científico informático Howard E. Tompkins afirmó que COBOL no estructurado tendía a ser "escrito por programadores que nunca han tenido el beneficio de COBOL estructurado enseñado bien", argumentando que el problema era principalmente uno de capacitación. [153]
Una de las causas del código espagueti fue la GO TO
declaración. GO TO
Sin embargo, los intentos de eliminar correos electrónicos del código COBOL dieron como resultado programas complicados y una calidad de código reducida. [154] GO TO
s fueron reemplazados en gran parte por la PERFORM
declaración y los procedimientos, que promovieron la programación modular [154] y dieron fácil acceso a potentes funciones de bucle. Sin embargo, PERFORM
solo se puede usar con procedimientos, por lo que los cuerpos de bucle no se ubican donde se usaron, lo que dificulta la comprensión de los programas. [155]
Los programas COBOL eran famosos por ser monolíticos y carecer de modularización. [156] El código COBOL solo se podía modular mediante procedimientos, que se consideraron inadecuados para sistemas grandes. Era imposible restringir el acceso a los datos, lo que significa 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ó como el mayor error del comité. [157] Otra complicación surgió de la capacidad de PERFORM THRU
una secuencia específica de procedimientos. Esto significaba que el control podía saltar y regresar de cualquier procedimiento, creando un flujo de control complicado y permitiendo que un programador rompiera la regla de entrada única y salida única . [158]
Esta situación mejoró a medida que COBOL adoptó más funciones. COBOL-74 agregó subprogramas, dando a los programadores la capacidad de controlar los datos a los que podía acceder cada parte del programa. COBOL-85 luego agregó subprogramas anidados, permitiendo a los programadores ocultar subprogramas. [159] El control adicional sobre los datos y el código se produjo en 2002 cuando se incluyeron la programación orientada a objetos, las funciones definidas por el usuario y los tipos de datos definidos por el usuario.
No obstante, gran parte del software COBOL heredado utiliza código no estructurado, que se ha vuelto inmaterial. Puede ser demasiado arriesgado y costoso modificar incluso una simple sección de código, ya que puede usarse desde lugares desconocidos de formas desconocidas. [160]
Problemas de compatibilidad
COBOL estaba destinado a ser un lenguaje "común" altamente portátil. Sin embargo, en 2001 se habían creado alrededor de 300 dialectos. [161] Una fuente de dialectos fue el estándar en sí: 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 oficiales. [162]
COBOL-85 no era totalmente compatible con versiones anteriores y su desarrollo fue controvertido. Joseph T. Brophy, CIO de seguros para viajeros , encabezó un esfuerzo para informar a los usuarios de COBOL sobre los altos costos de reprogramación de la implementación del nuevo estándar. [163] Como resultado, el Comité ANSI COBOL recibió más de 2.200 cartas del público, en su mayoría negativas, requiriendo que el comité hiciera cambios. Por otro lado, se pensaba que la conversión a COBOL-85 aumentaría la productividad en años futuros, justificando así los costos de conversión. [164]
Sintaxis detallada
El archivo de jerga 4.4.8. [165]
La sintaxis de COBOL a menudo ha sido criticada por su verbosidad. Los defensores dicen que esto tenía la intención de hacer que el código se auto-documente , facilitando el mantenimiento del programa. [166] COBOL también estaba destinado a ser fácil de aprender y usar para los programadores, [167] sin dejar de ser legible para el personal no técnico, como los gerentes. [168] [169] [170] [171] El deseo de legibilidad llevó al uso de sintaxis y elementos estructurales similares al inglés, como sustantivos, verbos, cláusulas, oraciones, secciones y divisiones. Sin embargo, en 1984, los mantenedores de los programas COBOL estaban luchando para lidiar con el código "incomprensible" [170] y los principales cambios en COBOL-85 estaban ahí para ayudar a facilitar el mantenimiento. [88]
Jean Sammet, un miembro del comité de corto alcance, señaló que "se hicieron pocos intentos para atender al programador profesional, de hecho, las personas cuyo interés principal es la programación tienden a estar muy descontentas con COBOL", lo que atribuyó a la sintaxis detallada de COBOL. [172]
Aislamiento de la comunidad informática
La comunidad COBOL siempre ha estado aislada de la comunidad informática. Ningún informático académico participó en el diseño de COBOL: todos los miembros del comité provenían del comercio o del gobierno. Los informáticos de la época estaban más interesados en campos como el análisis numérico, la física y la programación de sistemas que en los problemas comerciales de procesamiento de archivos que abordaba el desarrollo de COBOL. [173] Jean Sammet atribuyó la impopularidad de COBOL a una "reacción snob" inicial debido a su falta de elegancia, la falta de científicos informáticos influyentes que participen en el proceso de diseño y el desdén por el procesamiento de datos comerciales. [174] La especificación COBOL utilizó una "notación" única, o metalenguaje , para definir su sintaxis en lugar de la nueva forma Backus-Naur que el comité no conocía. Esto resultó en críticas "severas". [175] [176] [66]
Posteriormente, COBOL sufrió una escasez de material que lo cubría; tomó hasta 1963 para que aparecieran los libros introductorios (con Richard D. Irwin publicando un libro de texto universitario sobre COBOL en 1966). [177] Para 1985, había el doble de libros sobre Fortran y cuatro veces más sobre BASIC que sobre COBOL en la Biblioteca del Congreso . [117] Los profesores universitarios enseñaron lenguajes y técnicas más modernos y de vanguardia en lugar de COBOL, que se decía que tenía una naturaleza de "escuela de oficios". [178] 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 inculcó el 'odio COBOL'". [179] Una encuesta de 2013 de Micro Focus encontró que el 20% de los académicos universitarios pensaba que COBOL estaba desactualizado o muerto y que el 55% creía que sus estudiantes pensaban que COBOL estaba desactualizado o muerto. La misma encuesta también encontró que solo el 25% de los académicos tenían programación COBOL en su plan de estudios, aunque el 60% pensaba que deberían enseñarla. [180] En contraste, en 2003, COBOL figuraba en el 80% de los planes de estudio de sistemas de información en los Estados Unidos, la misma proporción que C ++ y Java . [181]
También hubo una condescendencia significativa hacia COBOL en la comunidad empresarial por parte de los usuarios de otros idiomas, por ejemplo, FORTRAN o ensamblador , lo que implica que COBOL solo se puede utilizar para problemas que no supongan ningún desafío. [ cita requerida ]
Preocupaciones sobre el proceso de diseño
Se han planteado dudas sobre la competencia del comité de normas. Howard Bromberg, miembro del comité a corto plazo, dijo que había "poco control" sobre el proceso de desarrollo y que estaba "plagado de discontinuidad de personal y ... falta de talento". [76] Jean Sammet y Jerome Garfunkel también señalaron que los cambios introducidos en una revisión de la norma se revertirían en la siguiente, debido tanto a los cambios en quién estaba en el comité de normas como a la evidencia objetiva. [182]
Las normas COBOL han sufrido repetidamente retrasos: COBOL-85 llegó cinco años más tarde de lo esperado, [183] COBOL 2002 se retrasó cinco años, [2] y COBOL 2014 se retrasó seis años. [95] [184] Para combatir retrasos, el comité de estándares permitió la creación de adiciones opcionales que agregarían características más rápidamente que esperando la próxima revisión estándar. Sin embargo, algunos miembros del comité expresaron su preocupación por las incompatibilidades entre las implementaciones y las modificaciones frecuentes del estándar. [185]
Influencias en otros idiomas
Las estructuras de datos de COBOL influyeron en los lenguajes de programación posteriores. Su estructura de archivo y registro influyó en PL / I y Pascal , y la REDEFINES
cláusula fue un predecesor de los registros variantes de Pascal. Las definiciones explícitas de la estructura de archivos precedieron al desarrollo de sistemas de administración de bases de datos y los datos agregados fueron un avance significativo sobre las matrices de Fortran. [117] LasPICTURE
declaraciones de datos se incorporaron en PL / I, con cambios menores.
La COPY
facilidad de COBOL , aunque considerada "primitiva", [186] influyó en el desarrollo de directivas de inclusión . [117]
El enfoque en la portabilidad y la estandarización significó que los programas escritos en COBOL podrían ser portátiles y facilitaron la expansión del lenguaje a una amplia variedad de plataformas de hardware y sistemas operativos. [187] Además, la estructura de división bien definida restringe la definición de referencias externas a la División de Medio Ambiente, lo que simplifica los cambios de plataforma en particular. [188]
Ver también
- Lista alfabética de lenguajes de programación
- BLIS / COBOL
- ReSource COBOL
- CODASYL
- Comparación de lenguajes de programación
- Lista generacional de lenguajes de programación § Basado en COBOL
- Lista de compiladores § compiladores COBOL
Notas
- ^ a b c Influenciado específicamente en las características orientadas a objetos de COBOL 2002. [2] [3] [4]
- ^ La lápida se encuentra actualmente en el Museo de Historia de la Computación . [61]
- ^ Las extensiones específicas del proveedor hacen que muchas implementaciones tengan muchas más: una implementación reconoce más de 1.100 palabras clave. [114]
Referencias
Citas
- ↑ a b Sammet, Jean E. (marzo de 2000). "Los verdaderos creadores de Cobol". Software IEEE . 17 (2): 30–32. 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 (incluidas algunas sesiones de 24 horas) en noviembre de 1959 y enviamos las especificaciones propuestas al Comité de corto alcance en pleno, que las aceptó casi todas. Después de algunas correcciones (por las mismas seis personas), entregamos las especificaciones como informe final en diciembre al Comité Ejecutivo, que las aceptó en enero de 1960. Después de algunas correcciones adicionales, la Imprenta del Gobierno emitió Cobol 60. [.. .] [Grace Hopper] no participó en su trabajo excepto a través de la guía general que le dio a su personal que eran miembros directos del comité. Por lo tanto, si bien su influencia indirecta fue muy importante, lamentablemente las frecuentes afirmaciones repetidas de que "Grace Hopper desarrolló Cobol" o "Grace Hopper fue una codificadora de Cobol" o "Grace Hopper es la madre de Cobol" simplemente no son correctas.
- ^ a b c Saade, Henry; Wallace, Ann (octubre de 1995). "COBOL '97: Informe de estado" . Diario del Dr. Dobb . Archivado desde el original el 22 de abril de 2014 . Consultado el 21 de abril de 2014 .
- ^ a b Arranga, Edmund C .; Coyle, Frank P. (febrero de 1998). COBOL orientado a objetos . Prensa de la Universidad de Cambridge . pag. 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". Computadora . 30 (3): 127. doi : 10.1109 / 2.573683 . ISSN 0018-9162 .
- ^ Imajo, Tetsuji; et al. (Septiembre de 2000). COBOL Script: un lenguaje de secuencias de comandos orientado a los negocios . Conferencia de 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) . Grupo de software de IBM.
- ^ 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). pag. 572. doi : 10.1145 / 800025.1198410 . ISBN 0127450408.
- ^ Mitchell, Robert L. (14 de marzo de 2012). "Fuga de cerebros: hacia dónde van los sistemas Cobol desde aquí" . Computerworld . Consultado el 9 de febrero de 2015 .
- ^ a b c Mitchell, Robert L. (4 de octubre de 2006). "Cobol: aún no muerto" . Computerworld . Consultado el 27 de abril de 2014 .
- ^ Ensmenger, Nathan L. (2009). Los chicos de las computadoras toman el control: computadoras, programadores y la política de la experiencia técnica . Prensa del MIT . pag. 100. ISBN 978-0262050937. LCCN 2009052638 .
- ^ "ISO / IEC 1989: 2014" . YO ASI. 26 de mayo de 2014 . Consultado el 7 de junio de 2014 .
- ^ Ferguson, Andrew. "Historia de los lenguajes de programación informática" . cs.brown.edu .
- ^ Beyer 2009 , p. 282.
- ^ Gürer, Denise (1 de junio de 2002). "Mujeres pioneras en informática". Toro SIGCSE . 34 (2): 175–180. doi : 10.1145 / 543812.543853 . ISSN 0097-8418 . S2CID 2577644 .
- ^ Beyer 2009 , págs. 281-282.
- ^ Sammet 1978a , p. 200.
- ^ Flahive, Paul (24 de mayo de 2019). "Cómo COBOL todavía impulsa la economía global a los 60 años" . Radio Pública de Texas . Archivado desde el original el 24 de mayo de 2019 . Consultado el 19 de julio de 2019 .
(Grace Hopper) Apodada Grandma Cobol, el código se basó en algunos de sus trabajos anteriores. Dijo, después de escuchar los rumores, que uno de sus colaboradores salió y compró una lápida de granito. "Tenía la palabra COBOL cortada en la parte delantera. Luego lo envió expreso por cobrar al señor Phillips en el pentágono". La broma sobre Charles Phillips, líder del proyecto en el departamento de defensa, llamó la atención de los poderes fácticos y fue un punto de inflexión, dijo. COBOL se convertiría en el lenguaje informático más utilizado y más duradero de la historia.
- ^ Beyer 2009 , p. 283.
- ^ Beyer 2009 , p. 284.
- ^ "Primeras Reuniones de la Conferencia sobre Lenguajes de Sistemas de Datos". IEEE Annals of the History of Computing . 7 (4): 316–325. 1985. doi : 10.1109 / MAHC.1985.10047 . S2CID 35625728 .
- ↑ a b c d e Sammet , 2004 , p. 104.
- ^ Beyer 2009 , p. 286.
- ↑ a b Conner , 1984 , p. ID / 9.
- ^ Sammet 1978a , p. 201.
- ↑ a b c d Bemer , 1971 , p. 132.
- ^ Beyer 2009 , p. 288.
- ^ Sammet 1978a , p. 203.
- ^ CODASYL 1969 , § I.2.1.1.
- ^ Sammet 1978a , p. 204.
- ^ CODASYL 1969 , § I.1.2.
- ^ Beyer 2009 , p. 290.
- ^ Sammet, Jean (1978). "La historia temprana de COBOL". Avisos ACM SIGPLAN . 13 (8): 121-161. doi : 10.1145 / 960118.808378 . S2CID 10743643 .
- ^ Sammet 1978a , p. 217.
- ^ Adams, Vicki Porter (5 de octubre de 1981). "Capitán Grace M. Hopper: la Madre de COBOL" . InfoWorld . Vol. 3 no. 20. p. 33. ISSN 0199-6649 .
- ^ Betts, Mitch (6 de enero de 1992). "Muere Grace Hopper, madre de Cobol" . Computerworld . 26 (1): 14.
- ^ Lohr, Steve (2008). Ir a: La historia de los grandes matemáticos, jugadores de bridge, ingenieros, magos del ajedrez, científicos inconformistas e iconoclastas: los programadores que crearon la revolución del software . Libros básicos . pag. 52. ISBN 978-0786730766.
- ^ "Ingeniero de software pionero y co-diseñador de Cobol" .
- ↑ a b Beyer , 2009 , p. 292.
- ^ Bemer 1971 , p. 131.
- ^ Beyer 2009 , p. 296.
- ^ Sammet 1978a , p. 221.
- ^ Beyer 2009 , p. 291.
- ^ "Historia oral del capitán Grace Hopper" (PDF) . Museo de Historia de la Computación . Diciembre de 1980. p. 37. Archivado desde el original (PDF) el 25 de diciembre de 2017 . Consultado el 28 de junio de 2014 .
- ^ Sammet 1978a , p. 218.
- ^ Marcotty 1978a , p. 268.
- ^ Sammet 1978a , págs. 205-206.
- ↑ a b Sammet 1978a , Figura 8.
- ^ Sammet 1978a , págs. 230-231.
- ^ ISO / IEC JTC 1 / SC 22 / WG 4 2001 , pág. 846.
- ^ Sammet 1978a , p. 220.
- ^ Sammet 1978a , p. 228.
- ^ Sammet 1978a , p. 210.
- ^ Bemer 1971 , p. 132: No podemos encontrar un solo individuo 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. Desafortunadamente, mis notas no muestran quién hizo esa sugerencia .
- ^ Sullivan, Patricia (25 de junio de 2004). "Pionero de la informática Bob Bemer, 84" . The Washington Post . pag. B06 . Consultado el 28 de junio de 2014 .
- ^ "EL INFORME COBOL - Entrevista con Bob Bemer - el padre de COBOL" . Archivado desde el original el 2 de abril de 2018.
- ^ "EL INFORME COBOL - Entrevista con Bob Bemer - el padre de COBOL" . Archivado desde el original el 23 de diciembre de 2003.
- ^ Beyer 2009 , p. 293.
- ^ Beyer 2009 , p. 294.
- ^ a b "La historia de la lápida COBOL" (PDF) . Informe del Museo de la Computación . 13 : 8–9. Verano de 1985. Archivado (PDF) desde el original el 3 de abril de 2014 . Consultado el 29 de junio de 2014 .
- ^ "Lápida de COBOL" . Museo de Historia de la Computación . Consultado el 29 de junio de 2014 .
- ^ Bemer 1971 , p. 130.
- ^ Beyer 2009 , p. 289.
- ^ CODASYL 1969 , § I.1.1.
- ^ Brown 1976 , p. 47.
- ↑ a b c Bemer , 1971 , p. 133.
- ↑ a b Beyer , 2009 , p. 297.
- ^ Williams, Kathleen Broome (10 de noviembre de 2012). Grace Hopper: Almirante del Cyber Sea . Prensa del Instituto Naval de Estados Unidos. ISBN 978-1612512655. OCLC 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: Net Cobol Language Reference , versión 15, enero de 2009; IBM Corporation: Enterprise COBOL para z / OS Language Reference , versión 4 Release 1, SC23-8528-00, diciembre de 2007
- ^ Garfunkel, Jerome (11 de noviembre de 1984). "En defensa de Cobol" . Computerworld . 18 (24): ID / 19.
- ↑ a b Bemer , 1971 , p. 134.
- ^ Brown 1976 , p. 48.
- ^ CODASYL 1969 , § I.2.2.4.
- ^ CODASYL 1969 , § I.2.3.
- ^ a b c d Follet, Robert H .; Sammet, Jean E. (2003). "Estándares de lenguajes de programación" . En Ralston, Anthony; Reilly, Edwin D .; Hemmendinger, David (eds.). Enciclopedia de Ciencias de la Computación (4ª ed.). Wiley. pag. 1467. ISBN 978-0470864128.
- ↑ a b Beyer , 2009 , p. 301.
- ↑ a b Brown , 1976 , pág. 49.
- ^ Brown 1976 , p. 52.
- ^ Taylor, Alan (2 de agosto de 1972). "Pocos se dan cuenta de los recursos desperdiciados de los colegios del PD locales" . Computerworld . 6 (31): 11.
- ^ Triance, JM (1974). Programación en COBOL: un curso de doce conferencias de televisión . Prensa de la Universidad de Manchester. pag. 87. ISBN 978-0719005923.
- ↑ Klein , 2010 , p. dieciséis.
- ^ Baird, George N .; Oliver, Paul (mayo de 1977). "Norma de 1974 (X3.23-1974)". Estándares del lenguaje de programación: ¿quién los necesita? (PDF) (Informe). Departamento de Marina . págs. 19-21. Archivado (PDF) desde el original el 7 de enero de 2014 . Consultado 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). "¿El redactor del informe de Cobol realmente pierde la marca?" . Computerworld . 9 (25): 20.
- ^ Shoor, Rita (26 de enero de 1981). "Usuario amenaza demanda por Ansi Cobol-80" . Computerworld . 15 (4): 1, 8.
- ^ Shoor, Rita (26 de octubre de 1981). "DPMA se opone al proyecto de Cobol" . Computerworld . 15 (43): 1–2.
- ^ a b c Gallant, John (16 de septiembre de 1985). "El estándar Cobol revisado puede estar listo a finales del 85" . Computerworld . 19 (37): 1, 8.
- ^ a b "Experto aborda el estándar Cobol 85" . Computerworld . 19 (37): 41, 48. 16 de septiembre de 1985.
- ^ Paul, Lois (15 de marzo de 1982). "Respuestas a Cobol-80 abrumadoramente negativas" . Computerworld . 16 (11): 1, 5.
- ^ Paul, Lois (25 de abril de 1983). "El estudio ve pocos problemas al cambiar a Cobol-8X" . Computerworld . 17 (17): 1, 6.
- ^ Gillin, Paul (19 de noviembre de 1984). "Los usuarios de DEC tienen ventaja en la implementación de Cobol-80" . Computerworld . 18 (47): 1, 6.
- ^ Garfunkel 1987 , p. 150.
- ^ Roy, MK; Dastidar, D. Ghost (1 de junio de 1989). "Características de COBOL-85". Programación COBOL: Problemas y Soluciones (2ª ed.). Educación McGraw-Hill. págs. 438–451. ISBN 978-0074603185.
- ^ Robinson, Brian (9 de julio de 2009). "Cobol sigue siendo viejo en espera en las agencias a pesar de mostrar su edad" . FCW . Grupo de Medios del Sector Público . Consultado el 26 de abril de 2014 .
- ^ a b "Estándares COBOL" . Micro Focus. Archivado desde el original el 31 de marzo de 2004 . Consultado el 2 de septiembre de 2014 .
- ^ "NetCOBOL para .Net" . netcobol.com . GTSoftware. 2013. Archivado desde el original el 8 de julio de 2014 . Consultado el 29 de enero de 2014 .
- ^ "Una lista de características de Codasyl Cobol" . Computerworld . 18 (37): ID / 28. 10 de septiembre de 1984 . Consultado el 8 de junio de 2014 .
- ^ ISO / IEC JTC 1 / SC 22 / WG 4 2001 , Anexo F.
- ↑ Klein , 2010 , p. 21.
- ^ a b "JTC1 / SC22 / WG4 - COBOL" . YO ASI. 30 de junio de 2010. Archivado desde el original el 14 de febrero de 2014 . Consultado el 27 de abril de 2014 .
- ^ Billman, John; Klink, Huib (27 de febrero de 2008). "Reflexiones sobre el futuro de la estandarización COBOL" (PDF) . Archivado desde el original (PDF) el 11 de julio de 2009 . Consultado 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 COBOL" . Micro Focus. Archivado desde el original el 24 de febrero de 1999 . Consultado el 12 de julio de 2014 .
- ^ Kizior, Ronald J .; Carr, Donald; Halpern, Paul. "¿COBOL tiene futuro?" (PDF) . Actas de la Conferencia sobre educación en sistemas de información de 2000 . 17 (126). Archivado desde el original (PDF) el 17 de agosto de 2016 . Consultado el 30 de septiembre de 2012 .
- ^ Carr y Kizior , 2003 , p. dieciséis.
- ^ Carr y Kizior , 2003 , p. 10.
- ^ "Fuga de cerebros de Cobol: resultados de la encuesta" . Computerworld . 14 de marzo de 2012 . Consultado el 27 de abril de 2014 .
- ^ Powner, David A. (25 de mayo de 2016). "Las agencias federales necesitan abordar el envejecimiento de los sistemas heredados" (PDF) . Oficina de Responsabilidad del Gobierno . pag. 18. Archivado desde el original (PDF) el 15 de junio de 2016 . Consultado el 19 de julio de 2019 .
Varias agencias, como el Departamento de Agricultura (USDA), DHS, HHS, Justicia, Tesoro y VA, informaron que usaban Common Business Oriented Language (COBOL), un lenguaje de programación desarrollado a fines de la década de 1950 y principios de la de 1960, para programar su legado. sistemas. Es bien sabido que las agencias deben cambiar a lenguajes más modernos y fáciles de mantener, según sea apropiado y factible.
- ^ "COBOL blues" . Reuters . Consultado el 8 de abril de 2020 .
- ^ Teplitzky, Phil (25 de octubre de 2019). "Cerrando la brecha de habilidades de programación COBOL" . IBM Systems Magazine, z de IBM . Consultado el 11 de junio de 2020 .
- ^ Lee, Alicia (8 de abril de 2020). "Se busca con urgencia: gente que conozca un lenguaje informático de medio siglo para que los estados puedan tramitar las reclamaciones por desempleo" . CNN . Consultado el 8 de abril de 2020 .
- ^ Largo, Heather; Stein, Jeff; Rein, Lisa; Romm, Tony (17 de abril de 2020). "Controles de estímulo y otro alivio del coronavirus obstaculizados por tecnología anticuada y despliegue gubernamental rocoso" . 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" . Micro Focus Visual COBOL 2.2 Referencia del lenguaje COBOL . Micro Focus . Consultado el 3 de marzo de 2014 .
- ^ 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.
- ↑ a b c d Shneiderman , 1985 , p. 349.
- ^ a b 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.
- ^ "Organizaciones de archivos" . Manejo de archivos . Micro Focus. 1998 . Consultado 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 Aprenda usted mismo COBOL en 24 horas . Publicación SAMS . pag. 40. ISBN 978-0672314537. LCCN 98087215 .
- ^ McCracken y Golden 1988 , § 19.9.
- ^ Cutler 2014 , § 5.8.5.
- ^ ISO / IEC JTC 1 / SC 22 / WG 4 2014 , § 8.5.2.
- ^ a b 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.
- ↑ a b McCracken , 1976 , p. 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 procesal en los programas Cobol (PDF) . PASTA '99 . doi : 10.1145 / 381788.316163 . ISBN 1581131372.
- ^ a b c Veerman, Niels; Verhoeven, Ernst-Jan (noviembre de 2006). "Detección de campo de minas de Cobol" (PDF) . Software: práctica y experiencia . 36 (14). doi : 10.1002 / spe.v36: 14 . Archivado desde el 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.
- ↑ a b McCracken y Golden , 1988 , § 8.4.
- ^ Se pueden verejemplos de compatibilidad del compilador
ALTER
en lo siguiente:- Tiffin, Brian (18 de septiembre de 2013). "Septiembre de 2013" . GNU Cobol . Archivado desde el original el 5 de mayo de 2014 . Consultado el 5 de enero de 2014 .
- "La declaración ALTER" . Micro Focus Visual COBOL 2.2 para Visual Studio 2013 COBOL Language Reference . Micro Focus . Consultado el 5 de enero de 2014 .
- "Declaración ALTER (núcleo)" (PDF) . COBOL85 Manual de referencia . Fujitsu. Noviembre de 1996. p. 555. Archivado desde el original (PDF) el 6 de enero de 2014 . Consultado el 5 de enero de 2014 .
- "Declaración 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.
- ↑ a b McCracken , 1976 , p. 355.
- ^ Moseley, Jay (17 de enero de 2015). "Compilador COBOL de MVT" . Consultado 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 desde el original el 2 de mayo de 2017 . Consultado el 29 de agosto de 2007 .
- ^ Tompkins, HE (1983). "En defensa de la enseñanza estructurada de COBOL como informática". Avisos ACM SIGPLAN . 18 (4): 86–94. doi : 10.1145 / 948176.948186 . S2CID 33803213 .
- ↑ a b Riehle , 1992 , p. 125.
- ^ Shneiderman 1985 , págs. 349-350.
- ^ Coughlan, Michael (16 de marzo de 2014). Principios de COBOL para programadores . Presione. pag. 4. ISBN 978-1430262534. Consultado el 13 de agosto de 2014 .
- ↑ Sammet 1978b , p. 258.
- ^ Riehle 1992 , p. 126.
- ^ Riehle 1992 , p. 127.
- ^ "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) . Software IEEE . 18 (6): 79. doi : 10.1109 / 52.965809 . hdl : 1871/9853 . Archivado desde el original (PDF) el 19 de agosto de 2014.
- ^ Howkins, TJ; Harandi, MT (abril de 1979). "Hacia COBOL más portátil" . The Computer Journal . 22 (4): 290. doi : 10.1093 / comjnl / 22.4.290 .
- ^ Garfunkel 1987 , p. 11.
- ^ Garfunkel 1987 , p. 15.
- ^ Raymond, Eric S. (1 de octubre de 2004). "COBOL" . El archivo de jerga, versión 4.4.8 . Archivado desde el original el 30 de agosto de 2014 . Consultado el 13 de diciembre de 2014 .
- ^ Brown 1976 , p. 53.
- ^ CODASYL 1969 , § II.1.1.
- ^ Shneiderman 1985 , p. 350.
- ↑ Sammet , 1961 , pág. 381.
- ↑ a b Conner , 1984 , p. ID / 10.
- ^ Marcotty 1978a , p. 263.
- ^ Conner 1984 , p. ID / 14.
- ↑ Sammet , 1961 , pág. 380.
- ^ Marcotty 1978a , p. 266.
- ↑ Sammet 1978b , p. 255.
- ^ Shneiderman 1985 , págs. 348–349.
- ^ "Copia archivada" . Archivado desde el original el 5 de marzo de 2016 . Consultado el 25 de febrero de 2016 .CS1 maint: copia archivada como título ( enlace )
- ^ Shneiderman 1985 , p. 351.
- ^ "Una entrevista: defensa Cobol" . Computerworld . 18 (37): ID / 29 – ID / 32. 10 de septiembre de 1984 . Consultado el 8 de junio de 2014 .
- ^ "La academia necesita más apoyo para abordar la brecha de habilidades de TI" (Comunicado de prensa). Micro Focus. 7 de marzo de 2013 . Consultado el 4 de agosto de 2014 .
- ^ Carr y Kizior , 2003 , p. 13.
- ^ Sammet, Jean; Garfunkel, Jerome (octubre de 1985). "Resumen de cambios en COBOL, 1960-1985". Anales de la historia de la informática . 7 (4): 342. doi : 10.1109 / MAHC.1985.10033 . S2CID 17940092 .
- ^ Cook, Margaret M. (junio de 1978). Ghosh, Sakti P .; Liu, Leonard Y. (eds.). Instalación de base de datos para COBOL 80 (PDF) . 1978 Conferencia Nacional de Computación. Anaheim, California: AFIPS Press. págs. 1107-1112. doi : 10.1109 / AFIPS.1978.63 . LCCN 55-44701 . Consultado el 2 de septiembre de 2014 .
La fecha más temprana en que se podría desarrollar y aprobar una nueva norma COBOL es el año 1980 [...].
- ^ "Resoluciones de la reunión del GT4 del 24 al 26 y 28 de junio de 2003 en Las Vegas, Nevada, EE . UU . " . 11 de julio de 2003. p. 1. Archivado desde el original (doc) el 8 de marzo de 2016 . Consultado el 29 de junio de 2014 .
una revisión de junio de 2008 de la norma COBOL
- ^ Babcock, Charles (14 de julio de 1986). "Complementos estándar de Cobol desollados" . Computerworld . 20 (28): 1, 12.
- ^ Marcotty 1978b , p. 274.
- ^ Esto se puede ver en:
- "Visual COBOL" . IBM PartnerWorld . IBM . 21 de agosto de 2013. Archivado desde el 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 COBOL para Linux x86-64, Linux para System z, AIX, HP / UX, Solaris y Windows.
- "Familia de compiladores COBOL" . ibm.com . IBM . Archivado desde el original el 23 de febrero de 2014 . Consultado el 5 de febrero de 2014 .
- Tiffin, Brian (4 de enero de 2014). "¿Qué plataformas son compatibles con GNU Cobol?" . Archivado desde el original el 14 de diciembre de 2013 . Consultado el 5 de febrero de 2014 .
- "Visual COBOL" . IBM PartnerWorld . IBM . 21 de agosto de 2013. Archivado desde el original el 12 de julio de 2014 . Consultado el 5 de febrero de 2014 .
- ^ Coughlan, Michael (2002). "Introducción a COBOL" . Consultado el 3 de febrero de 2014 .
Fuentes
- Bemer, Bob (1971). "Una vista de la historia de COBOL" (PDF) . Honeywell Computer Journal . 5 (3). Archivado desde el original (PDF) el 22 de enero de 2016 . Consultado el 28 de junio de 2014 .
- Beyer, Kurt (2009). Grace Hopper y la invención de la era de la información . Prensa del MIT. 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 ciencia y tecnología de la computación: volumen 5 . Prensa CRC . ISBN 978-0824722555.
- Carr, Donald E .; Kizior, Ronald J. (31 de diciembre de 2003). "Continuación de la relevancia de COBOL en los negocios y el mundo académico: situación actual y comparación con el estudio del año 2000" (PDF) . Revista de educación en sistemas de información . 1 (52). ISSN 1545-679X . Consultado el 4 de agosto de 2014 .
- CODASYL (julio de 1969). "CODASYL COBOL Journal of Development 1968" . Revista Codasyl Cobal de Desarrollo . Oficina Nacional de Normas . ISSN 0591-0218 . LCCN 73601243 .
- Conner, Richard L. (14 de mayo de 1984). "Cobol, tu edad se nota" . Computerworld . 18 (20): ID / 7 – ID / 18. ISSN 0010-4841 .
- Cutler, Gary (9 de abril de 2014). "Guía del programador GNU COBOL" (PDF) (3ª ed.) . Consultado el 25 de febrero de 2014 .
- Garfunkel, Jerome (1987). El libro de ejemplo 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 desde el original (ZIP de PDF) el 24 de enero de 2002 . Consultado el 2 de septiembre de 2014 . (El enlace va 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 . INCITOS .
- Klein, William M. (4 de octubre de 2010). "La Historia de COBOL" (PDF) . Archivado desde el original (PDF) el 7 de enero de 2014 . Consultado 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). pag. 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). pag. 274 . doi : 10.1145 / 800025.1198371 . ISBN 0127450408.
- McCracken, Daniel D. (1976). Una guía simplificada para la programación COBOL estructurada . Wiley. ISBN 0-471-58284-0.
- McCracken, Daniel D .; Golden, Donald G. (1988). Una guía simplificada para la programación COBOL estructurada (2ª ed.). Wiley. ISBN 978-0471610540. LCCN 87034608 .
- Riehle, Richard L. (agosto de 1992). "REALIZAR considerado perjudicial". Comunicaciones de la 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 occidental conjunta de computadoras 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 Ciencias de la Computación . Wiley. ISBN 978-0470090954. OCLC 249810423 .
- Shneiderman, B. (octubre de 1985). "La relación entre COBOL y la informática". Anales de la historia de la informática . 7 (4): 348–352. doi : 10.1109 / MAHC.1985.10041 . S2CID 1009406 .
enlaces externos
- COBOL en Curlie
- Estándar de lenguaje COBOL (1991; COBOL-85 con enmienda 1), de The Open Group