# data[].attributes.attachment_link.title
Pascal (lenguaje de programación) - Wikipedia, la enciclopedia libre

# data[].attributes.attachment_link.description
Pascal fue el lenguaje primario de alto nivel utilizado para el desarrollo en el Apple Lisa, y en los primeros años del Macintosh. Algunas partes del sistema operativo original del Macintosh se traducen a mano al lenguaje ensamblador del Motorola 68000 de sus fuentes Pascal.​ El sistema de composición tipográfica TeX de Donald E.

# data[].attributes.attachment_link.title
01 Curso de Programación en Pascal : Introduccion

# data[].attributes.attachment_link.readable_text
Originalmente diseñado por el programador danés-canadiense Rasmus Lerdorf, en el año 1994 en base a la escritura de un grupo de CGI binarios escritos en el lenguaje C. En un comienzo, PHP sólo estaba compuesto por algunas macros que permitían trabajar más fácilmente en la creación de páginas web.
En el año de 1995 Rasmus Lerdorf le añadió el analizador sintáctico y se llamó PHP/F1 Versión 2, sólo reconocía texto HTML y algunas directivas de mSQL. Después de esta fecha la contribución al código fue pública.

PHP se caracteriza por ser un lenguaje gratuito y multiplataforma. Además de su posibilidad de acceso a muchos tipos de bases de datos, también es importante destacar su capacidad de crear páginas dinámicas, así como la posibilidad de separar el diseño del contenido de una web.

PHP es la solución para la construcción de Webs con independencia de la Base de Datos y del servidor Web, válido para cualquier plataforma.

El objetivo final es conseguir la integración de las paginas HTML con aplicaciones que corran en el servidor como procesos integrados en el mismo, y no como un proceso separado, como ocurría con los CGIs (Common Gateway Interface).
El lenguaje php presenta cuatro grandes características:
1.- Velocidad: PHP no solo es rápido al ser ejecutado sino que no genera retrasos en la máquina, por esto no requiere grandes recursos del sistema. PHP se integra muy bien junto a otras aplicaciones, especialmente bajo ambientes Unix.

2.- Estabilidad: PHP utiliza su propio sistema de administración de recursos y posee de un sofisticado método de manejo de variables, conformando un sistema robusto y estable.

3.- Seguridad: PHP maneja distintos niveles de seguridad, estos pueden ser configurados desde el archivo .ini

4.- Simplicidad: Usuarios con experiencia en C y C++ podrán utilizar PHP rápidamente. Además PHP dispone de una amplia gama de librerías, y permite la posibilidad de agregarle extensiones. Esto le permite su aplicación en múltiples áreas, tales como encriptado, gráficos, XML y otras.

Ventajas adicionales de PHP
1.- PHP corre en (casi) cualquier plataforma utilizando el mismo código fuente,

2.- La sintaxis de PHP es similar a la del C, por esto cualquiera con experiencia en lenguajes del estilo C podrá entender rápidamente PHP.

3.- PHP es completamente expandible y modificable. Está compuesto de un sistema principal , un conjunto de módulos y una variedad de extensiones de código.

4.- Muchas interfaces distintas para cada tipo de servidor. PHP actualmente se puede ejecutar bajo Apache, IIS, AOLServer, Roxen yTHTTPD. Otra alternativa es configurarlo como módulo CGI.

5.- Permite la interacción con gran cantidad de motores de bases de datos tales como MySQL, MS SQL, Oracle, Informix, PostgreSQL, etc.

6.- PHP es Open Source, ( código abierto ) esto significa que no depende de ninguna compañía comercial y que no requiere de licencias.
Artículo recomendado:¿Qué es la interactividad?

# data[].attributes.attachment_link.description
Originalmente diseñado por el programador danés-canadiense Rasmus Lerdorf, en el año 1994 en base a la escritura de un grupo de CGI binarios escritos en el lenguaje C. En un comienzo, PHP sólo estaba compuesto por algunas macros que permitían trabajar más fácilmente en la creación de páginas web.

# data[].attributes.attachment_link.readable_text
PHP

Desarrollador(es)

PHP Group
https://www.php.net, https://www.php.net/manual/fr/, https://www.php.net/manual/de/, https://www.php.net/manual/ja/, https://www.php.net/manual/ru/, https://www.php.net/manual/es/, https://www.php.net/manual/tr/, https://www.php.net/manual/pt_BR/ y https://www.php.net/manual/zh/

Información general

Extensiones comunes

.php, .phtml, .php3, .php4, .php5, .php7, .phps, .php-s, .pht, .phar

Paradigma

Multiparadigma: imperativo, funcional, orientado a objetos, procedural, reflexivo

Apareció en

1995

Diseñado por

Rasmus Lerdorf

Última versión estable

8.2.3​ (14 de febrero de 2023 (1 mes y 2 días))

Sistema de tipos

Dinámico, débil

Implementaciones

Motor Zend, HHVM, Phalanger, Quercus, Project Zero, Parrot

Influido por

Perl, C, C++, Java, Tcl

Ha influido a

Falcon, Hack

Sistema operativo

Unix-like, Windows

Licencia

Licencia PHP

PHP es un lenguaje de programación interpretado​ del lado del servidor y de uso general que se adapta especialmente al desarrollo web.​ Fue creado inicialmente por el programador danés- canadiense Rasmus Lerdorf en 1994.​ En la actualidad, la implementación de referencia de PHP es producida por The PHP Group.​ PHP originalmente significaba Personal Home Page (Página personal), pero ahora significa el inicialismo​ recursivo PHP: Hypertext Preprocessor.​

El código PHP suele ser procesado en un servidor web por un intérprete PHP implementado como un módulo, un daemon o como un ejecutable de interfaz de entrada común (CGI). En un servidor web, el resultado del código PHP interpretado y ejecutado -que puede ser cualquier tipo de datos, como el HTML generado o datos de imágenes binarias- formaría la totalidad o parte de una respuesta HTTP. Existen diversos sistemas de plantillas, sistemas de gestión de contenidos y frameworks que pueden emplearse para organizar o facilitar la generación de esa respuesta. Por otra parte, PHP puede utilizarse para muchas tareas de programación fuera del contexto de la web, como aplicaciones gráficas autónomas​ y el control de drones.​ También se puede interpretar y ejecutar un código PHP cualquiera a través de una interfaz de línea de comandos (CLI).

El intérprete estándar de PHP, impulsado por Motor Zend, es un software libre publicado bajo Licencia PHP. PHP ha sido ampliamente portado y puede ser desplegado en la mayoría de los servidores web en casi todos los sistemas operativos y plataformas, de forma gratuita.

El lenguaje PHP evolucionó sin una especificación formal escrita o un estándar hasta 2014, con la implementación original actuando como el estándar que otras implementaciones intentaban seguir. Desde 2014, se ha trabajado para crear una especificación formal de PHP.​

Visión general

PHP puede ser desplegado en la mayoría de los servidores web y en todos los sistemas operativos y plataformas sin costo alguno. El lenguaje PHP se encuentra instalado en más de 20 millones de sitios web y en un millón de servidores. Migrar los servicios basados en PHP hacia las nuevas tecnologías que aparecen, supone un costo a justificar monetariamente (sobre todo, en términos de hardware y rendimiento), por ello, hablar si el número de sitios basados en PHP se ha visto reducido progresivamente en los últimos años, con la aparición de nuevas tecnologías como Node.js, Golang, ASP.NET, etc.

Poderse hacer una visión general de como PHP está evolucionando a día de hoy, es hablar sobre las nuevas librerías disponibles, el uso de matrices, ​ manejo de números enteros, tratamiento de la criptografía cuando se usa una Base64,​​​ Web scraping, indexación de webs, precocinado de datos, Macrodatos, set de datos, supervisión de datos, set de proposiciones dimensionales. Como vemos, una visión general de este lenguaje, es mucho más compleja que afirmar que es un lenguaje para desarrollo web. Dicha realidad, subyace en la aparición de dominios xyz, cuya finalidad y especialidad es el cacheado de los servicios PHP para servir contenido con una orientación al desempeño vinculada a servicios para consumo de otros servicios que necesitan datos, tales como I.A.s. donde PHP está viendo una acogida con un sentimiento de confianza en los resultados a obtener (sin pretender servir de lenguaje en sí mismo orientado a la I.A., dado que no fue su conceptualización origen). Aunque el marketing que está recibiendo este tipo de dominios, está relacionado con las nuevas generaciones de personas educadas en las nuevas tecnologías ​ Como parte de la visión general, habría que incluir un último aspecto, y es la capacidad de generar capas de seguridad autodependientes, en un paradigma solo emergente gracias a las librerías de las que dispone PHP (En proceso de desarrollo).

El sitio web de Wikipedia está desarrollado en PHP.​ Es también el módulo Apache más popular entre las computadoras que utilizan Apache como servidor web.

El gran parecido que posee PHP con los lenguajes más comunes de programación estructurada, como C y Perl, permiten a la mayoría de los programadores crear aplicaciones complejas con una curva de aprendizaje muy corta. También les permite involucrarse con aplicaciones de contenido dinámico sin tener que aprender todo un nuevo grupo de funciones.

Aunque todo en su diseño está orientado a facilitar la creación de sitios webs, es posible crear aplicaciones con una interfaz gráfica de usuario, utilizando alguna extensión como puede ser PHP-Qt, PHP-GTK,​ WxPHP, WinBinder, Roadsend PHP, Phalanger, Phc o HiP Hop VM. También puede ser usado desde la línea de comandos, de la misma manera como Perl o Python pueden hacerlo; a esta versión de PHP se la llama PHP-CLI ( Command Line Interface).​

Cuando el cliente hace una petición al servidor para que le envíe una página web, el servidor ejecuta el intérprete de PHP. Este procesa el script solicitado que generará el contenido de manera dinámica (por ejemplo obteniendo información de una base de datos). El resultado es enviado por el intérprete al servidor, quien a su vez se lo envía al cliente.

Mediante extensiones es también posible la generación de archivos PDF,​ Flash, así como imágenes en diferentes formatos.

Permite la conexión a diferentes tipos de servidores de bases de datos tanto SQL como NoSQL tales como MySQL, PostgreSQL, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird, SQLite o MongoDB.​

PHP también tiene la capacidad de ser ejecutado en la mayoría de los sistemas operativos, tales como Unix (y de ese tipo, como Linux o Mac OS X) y Microsoft Windows, y puede interactuar con los servidores de web más populares ya que existe en versión CGI, módulo para Apache, e ISAPI.

PHP es una alternativa a las tecnologías de Microsoft ASP y ASP.NET (que utiliza C# y Visual Basic .NET como lenguajes), a ColdFusion de la empresa Adobe, a JSP/ Java, CGI/ Perl y a Node.js/ Javascript. Aunque su creación y desarrollo se da en el ámbito de los sistemas libres, bajo la licencia GNU, existe además un entorno de desarrollo integrado comercial llamado Zend Studio. CodeGear (la división de lenguajes de programación de Borland) ha sacado al mercado un entorno de desarrollo integrado para PHP, denominado 'Delphi for PHP. También existen al menos un par de módulos para Eclipse, uno de los entornos más populares.​

Fue originalmente diseñado en Perl, con base en la escritura de un grupo de CGI binarios escritos en el lenguaje C por el programador danés-canadiense Rasmus Lerdorf en el año 1994 para mostrar su currículum vítae y guardar ciertos datos, como la cantidad de tráfico que su página web recibía. El 8 de junio de 1995 fue publicado "Personal Home Page Tools" después de que Lerdorf lo combinara con su propio Form Interpreter para crear PHP/FI.

Dos programadores israelíes del Technion, Zeev Suraski y Andi Gutmans, reescribieron el analizador sintáctico ( parser, en inglés) en 1997 y crearon la base del PHP3, y cambiaron el nombre del lenguaje por PHP: Hypertext Preprocessor. Inmediatamente comenzaron experimentaciones públicas de PHP3, y se publicó oficialmente en junio de 1998. Para 1999, Suraski y Gutmans reescribieron el código de PHP, y produjeron lo que hoy se conoce como motor Zend. También fundaron Zend Technologies en Ramat Gan, Israel.

En mayo del 2000, PHP 4 se lanzó bajo el poder del motor Zend 1.0. El 13 de julio de 2007 se anunció la suspensión del soporte y desarrollo de la versión 4 de PHP,​ y, a pesar de lo anunciado, se ha liberado una nueva versión con mejoras de seguridad, la 4.4.8, publicada el 13 de enero del 2008, y posteriormente la versión 4.4.9, publicada el 7 de agosto del 2008.​ Según esta noticia,​ se le dio soporte a fallos críticos hasta el 9 de agosto del 2008.

El 13 de julio de 2004, se lanzó PHP 5, utilizando el motor Zend Engine 2.0 (o Zend Engine 2). Incluye todas las ventajas que provee el nuevo Zend Engine 2, como:

En abril de 2020, más de la mitad de los sitios en la web que usaban PHP seguían en la versión descontinuada​ 5.6 o anterior.​ y con la versión 7.0 y 7.1 más del 68%, que no están oficialmente soportadas por The PHP Development Team,​ mientras que el soporte de seguridad es proporcionado por terceros, como Debian (hasta junio de 2020 para PHP 5).​ Adicionalmente, la versión 7.2, la versión con soporte más popular, dejó de recibir actualizaciones de seguridad el 30 de noviembre de 2020.​

El 26 noviembre del 2020 se presenta la actualización del lenguaje PHP a su versión 8.0 que más recursos y optimizaciones incluyendo argumentos nombrados, tipos de uniones, atributos, promoción de propiedades constructivas, expresiones match, operador nullsafe, JIT (traducción dinámica) y también mejoras en el sistema de tipos, manejo de errores y consistencia en general.​, esta la cual llegara a su fin en noviembre del 2023, también considerando que a partir de lanzamiento de php 8.2 el 8 de noviembre del año 2022, Wordpress que ha logrado ser compatible al día siguiente el 9 de diciembre del 2022. ​ seguido del Framework CodeIgniter que actualmente ha expulsado a php7.4 de sus compatibilidades en sus nuevas actualizaciones.​

En enero de 2023, según W3Techs "PHP es utilizado por el 77,8% de todos los sitios web que se ejecutan en el lado del servidor"[1]. También informa de que sólo el 8% de los usuarios de PHP utilizan las versiones 8.x actualmente soportadas.​La última versión publicada de PHP es PHP 8.2. y se prevé que hasta noviembre de 2023 no habrá ningún otro lanzamiento. ​

Versión

Fecha de lanzamiento

Fin de soporte

Notas

4.2

Se deshabilitan register_globals por defecto. Datos recibidos por la red no son insertados en el espacio de nombres global, cerrando posibles agujeros de seguridad en las aplicaciones.​

5.2

Actividad extensión de filtro por defecto. Soporte JSON nativo.​

5.3

Soporte para espacios de nombres, enlace estático en tiempo de ejecución, etiqueta de salto ( GOTO limitada), Clausuras nativas, Soporte nativo para archivos PHP (phar), recolección de basura para referencias circulares, soporte mejorado para Windows, sqlite3, mysqlnd como reemplazo a libmysql como biblioteca para extensiones que funcionan con MySQL, fileinfo como reemplazado de mime_magic para mejor soporte MIME, extensión de Internacionalización, y etiqueta ereg obsoleta.

5.4

Soporte para Trait y sintaxis abreviada de array. Elementos eliminados: register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister() y session_is_registered(). Servidor web incorporado.​ Varias mejoras a características existentes y al rendimiento, y requerimientos de memoria menores.

5.5

Nuevos generadores para bucles, empty() soporta expresiones. Se pierde el soporte para Windows XP y Windows Server 2003.​

6

El desarrollo de PHP 6 ha sido retrasado porque los desarrolladores decidieron que el enfoque actual para tratar cadenas Unicode no es correcto, y están considerando formas alternas para la siguiente versión.​ Las mejoras planeadas para PHP 6 fueron añadidas en su lugar en PHP 5.3.0 (Soporte para espacios de nombre, enlace estático en tiempo de ejecución, funciones lambda, clausuras, goto) y 5.4.0 (traits, revinculación de clausura).

Se abandonó la versión 6 de PHP siendo la siguiente versión la 7.​

7.0

Mejoras de rendimiento ,​ declaración de tipos de retorno en funciones ​

7.1

01-12-2016​​

01-12-2019 //no es entendible

Tipo de retorno vacío,​ Clase constante modificadores de visibilidad,​ Tipos nullable,​ iterable de tipo seudo,​ Captura múltiples tipos de excepciones.​

7.2

30-11-2017

30-11-2020

Nuevo tipo de retorno "object",​ integración de Libsodium como una extensión del núcleo​

7.3

6-12-2018

6-12-2021

Sintaxis flexible para Nowdoc y Heredoc, soporte para referencias y deconstrucción de arrays con list(), soporte para PCRE2, función hrtime()

7.4

28-11-2019

28-11-2022

PHP 7.4 llegó al final de su vida útil el 28 de noviembre de 2022.

8.0

26-11-2020

26-11-2023

Ingresadas Nuevas características y eh incremento de rendimiento

8.1

25-11-2021

25-11-2024

Propiedades "readonly", "Enums", "Fiber" y nuevas sintaxis

8.2

08-12-2022

08-12-2025

Creación de propiedades dinámicas esta desaprobada y es agregado el atributo AllowDynamicProperties ​ ​

La sintaxis de PHP, se fundamenta en los principios de programación de C.

El intérprete de PHP solo ejecuta el código que se encuentra entre sus delimitadores. Los delimitadores más comunes son <?php para abrir una sección PHP y ?> para cerrarla. El propósito de estos delimitadores es separar el código PHP del resto de código, como por ejemplo el HTML.​ En los archivos que contienen solo código PHP, el delimitador ?> se puede omitir. De hecho, PHP-FIG a través de sus recomendaciones estándar para PHP recomienda omitir el delimitador ?>, ya que así no se envía contenido HTML de manera accidental. Por ejemplo, si se envía un carácter "no PHP" (que no es procesado por el intérprete de PHP), no se podrán ejecutar ciertas acciones como enviar encabezados HTTP a través de la función header(), ya que el proceso de respuesta ya ha comenzado.

Las variables se prefijan con el símbolo del dólar ($) y no es necesario indicar su tipo. Las variables, a diferencia de las funciones, distinguen entre mayúsculas y minúsculas. Las cadenas de caracteres pueden ser encapsuladas tanto en dobles comillas como en comillas simples, aunque en el caso de las primeras, se pueden insertar variables en la cadena directamente, sin necesidad de concatenación.

Los comentarios se pueden escribir bien con dos barras (//) al principio de la línea, o con una almohadilla (#). También permite comentarios multi-línea encapsulados en /* */.

En cuanto a las palabras clave, PHP comparte con la mayoría de otros lenguajes con sintaxis C las condiciones con if, los bucles con for y while y los retornos de funciones. Habitualmente en este tipo de lenguajes, las sentencias deben acabar con punto y coma (;).

Programa Hola mundo con PHP inmerso dentro de código HTML:

Programa Hola mundo con PHP en forma de app monolítica:

Programa Hola mundo con PHP respondiendo en formato JSON:

El lado del cliente que realizará petición al archivo PHP:

PHP puede combinarse con MySQL para trabajar con bases de datos, aunque también se pueden utilizar otros motores de base de datos como Microsoft SQL Server, PostgreSQL, MongoDB, entre otros.

El siguiente ejemplo se muestra el inicio de sesión con usuario y contraseña utilizando MySQL y PHP con el estilo orientado a objetos:

El siguiente ejemplo hace lo mismo que el anterior, pero con la seguridad de que sea cual sea el estado medio del servicio, si no hay forma de conectar, se destruirá la clase y se cerrará lo adjunto a sus hilos.

Bórrese

Los servicios REST se fundamentan en tres conceptos fundamentales:

  Concepto de recurso
  Concepto de itinerancia
  Concepto de API

Características de PHP

Orientado al desarrollo de aplicaciones web dinámicas con acceso a información almacenada en una base de datos.

El modelo de ejecución de PHP es "síncrono a la petición" (modelo single-request-per-script-execution) : la recepción de una petición activa la ejecución del script PHP y, a continuación, el resultado generado se devuelve a la salida. Como resultado, un sistema con PHP difícilmente puede quedar paralizado por un error, ya que la ejecución del script se reinicia con cada petición. Esto contrasta, por ejemplo, con los lenguajes en los que el programa se compila y ejecuta dentro de un "ejecutable", que dejará de funcionar si se produce un error.

Es considerado un lenguaje fácil de aprender, ya que en su desarrollo se simplificaron distintas especificaciones, como es el caso de la definición de las variables primitivas, ejemplo que se hace evidente en el uso de php arrays.

El código fuente escrito en PHP es invisible al navegador web y al cliente, ya que es el servidor el que se encarga de ejecutar el código y enviar su resultado (habitualmente, un contenido HTML hacia el navegador).

Capacidad de conexión con la mayoría de los motores de base de datos que se utilizan en la actualidad, destaca su conectividad con MySQL y PostgreSQL.

Capacidad de expandir su potencial utilizando módulos (llamados extensiones).

Posee una amplia documentación en su sitio web oficial, entre la cual se destaca que todas las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda.

Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.

Permite aplicar técnicas de programación orientada a objetos.

No requiere definición de tipos de variables aunque sus variables se pueden evaluar también por el tipo que estén manejando en tiempo de ejecución.

Tiene manejo de excepciones (desde PHP5).

Si bien PHP no obliga a quien lo usa a seguir una determinada metodología a la hora de programar, aun haciéndolo, el programador puede aplicar en su trabajo cualquier técnica de programación o de desarrollo que le permita escribir código ordenado, estructurado y manejable. Un ejemplo de esto son los desarrollos que en PHP se han hecho del patrón de diseño Modelo Vista Controlador (MVC), que permiten separar el tratamiento y acceso a los datos, la lógica de control y la interfaz de usuario en tres componentes independientes.

Debido a su flexibilidad, ha tenido una gran acogida como lenguaje base para las aplicaciones WEB de manejo de contenido, y es su uso principal.

Como es un lenguaje que se interpreta en ejecución, para ciertos usos puede resultar un inconveniente que el código fuente no pueda ser ocultado. La ofuscación es una técnica que puede dificultar la lectura del código pero no necesariamente impide que el código sea examinado.

Debido a que es un lenguaje interpretado, un script en PHP suele funcionar considerablemente más lento que su equivalente en un lenguaje de bajo nivel, sin embargo este inconveniente se puede minimizar con técnicas de caché tanto en archivos como en memoria.

En las versiones previas a la 7, las variables no son tipificadas, lo cual dificulta a los diferentes IDEs ofrecer asistencias para el tipificado del código, aunque esto no es realmente un inconveniente del lenguaje en sí. Esto es solventado por algunos IDEs añadiendo un comentario con el tipo a la declaración de la variable.

El hecho de que este lenguaje se ejecute a partir de una petición (modelo single-request-per-script-execution) hace difícil la realización de tareas asíncronas o permanentes (ex: crawler, cálculos a largo plazo etc.) ;

XAMPP es un servidor independiente de plataforma, software libre, que consiste principalmente en la base de datos MySQL, el servidor Web Apache y los intérpretes para lenguajes de script: PHP y Perl. El nombre proviene del acrónimo de X (para cualquiera de los diferentes sistemas operativos), Apache, MySQL, PHP, Perl. El programa está liberado bajo la licencia GNU y actúa como un servidor Web libre, fácil de usar y capaz de interpretar páginas dinámicas. Actualmente XAMPP está disponible para Microsoft Windows, GNU/Linux, Solaris, y MacOS X.

Es un software "liviano" que se puede utilizar en cualquier PC. No necesita muchos recursos.

LAMP presenta una funcionalidad parecida a XAMPP, pero enfocada en Linux, WAMP lo hace enfocado en Windows, y MAMP para MacOS X. UwAmp es muy idéntico a WAMP y se destaca en que se puede ejecutar desde una memoria USB.

Se utiliza PHP en millones de sitios; entre los más destacados se encuentran:

Véase también

Un término formado por la letra inicial de una o varias palabras o parte de palabras, pero que se pronuncia letra por letra, a diferencia del acrónimo.​

# data[].attributes.attachment_link.description
Rust es un lenguaje de programación de sistemas extremadamente rápido, previene fallas de segmentación y garantiza la seguridad de los hilos de ejecución.

# data[].attributes.attachment_link.title
Rust (lenguaje de programación) - Wikipedia, la enciclopedia libre

# data[].attributes.attachment_link.description
Rust es un lenguaje de programación compilado, de propósito general y multiparadigma que está siendo desarrollado por Mozilla.​ Ha sido diseñado para ser "un lenguaje seguro, concurrente y práctico".​​ Es un lenguaje de programación multiparadigma, soporta programación funcional pura, por procedimientos, imperativa y orientada a objetos.

# data[].attributes.attachment_link.readable_text
Saber programar será algo tan común en un futuro cercano como lo es saber inglés en la actualidad. Por eso, es normal que muchos se hayan empezado a preocupar de aprender algún lenguaje de programación. Pero, ¿qué lenguaje de programación es el más interesante? Nuestra apuesta es Swift.

Swift, el nuevo lenguaje presentado por Apple en 2014

Apple presentó en 2014 su nuevo lenguaje de programación llamado Swift. El objetivo de este lenguaje es en resumidas cuentas ofrecer una solución que permita editar código en tiempo real de Cocoa y Cocoa Touch. Pero ojo, no se queda sólo ahí. Así que veamos un poco más lo que ofrece.

Lo primero que hay que apuntar es que es un lenguaje de programación que desde el 3 de diciembre de 2015 es Open Source. Y del que se puede encontrar más información, así como toda la documentación necesaria, en su web Swift.org y el repositorio de github github.com/apple. Ahora sí, ¿qué ofrece?

Swift es un lenguaje que está enfocado para todos aquellos que están empezando a programar y también para ser la base del futuro desarrollo de apps móviles. En principio, para las apps de iOS, aunque todo apunta a que cobrará mayor protagonismo entre las grandes firmas de tecnología, como Google, Facebook o Urber, entre otras. Siendo Google la más interesada en que se convierta en un lenguaje de primer nivel en Android.

Swift aúna lo mejor de otros lenguajes, como C u Objetive-C, con características enfocadas a la programación con objetos como clases y protocolos, el control de flujos, tipos, operadores, etc. Asimismo, destaca por ser muy rápido gracias al uso de un compilador LLVM de alto rendimiento que permite sacar el máximo provecho al hardware del dispositivo al trabajar de forma nativa.

Motivos para aprender Swift

¿Y por qué deberíamos apostar por Swift? Una buena respuesta podría ser "y por qué no", pero, si no os convence, aquí van algunos motivos.

1. El primero es que Swift no es, como hemos dicho, un lenguaje exclusivo de iOS. También se puede usar parada programación en Linux y posiblemente Android dentro de poco

2. Swift es un lenguaje joven y eso acarrea ventajas. Ver cómo va evolucionando ayuda a entender mejor cómo funciona o quieren que funcione.

3. Swift requiere una curva de aprendizaje menor que otros lenguajes, facilitando la programación y obtención de resultados antes de tiempo.

4. Swift representa el futuro de la programación para las plataformas de Apple y en breve podría unirse Android. Teniendo en cuenta lo suculento y rentable que pueden llegar a ser los mercados de apps móviles ya merece la pena.

5. Swift cada día recibe más apoyo. Un ejemplo es IBM Swift Sandbox, algo importante si además sumamos el acuerdo al que llegaron Apple e IBM para tener mejores apps profesionales.

¿Suficientes? Esperamos que sí, porque realmente merece la pena apostar por Swift. Aunque serás tú quien determine hasta qué punto es interesante o no para construir tus propias aplicaciones, el próximo gran éxito de app móvil o las de otros con un mercado profesional cada vez es más valorado.

Recursos para aprender a programar en Swift

Si quieres comenzar a programar en Swift, lo primero será rodearse de los mejores recursos. A la suma de su web y repositorio de github, podéis añadir los siguientes recursos que provienen de Apple o de usuarios con años de experiencia en el desarrollo de aplicaciones.

Por supuesto, no podemos olvidar Playgrounds, app disponible para iPad que permite completar diferentes lecciones con la finalidad de obtener una base que permita avanzar en la creación de proyectos cada vez más complejos.

Swift 3, próxima parada

Tras ver todo esto ahora toca repasar un poco las versiones existentes de Swift. Aunque es un lenguaje joven, lo cierto es que avanza a un gran ritmo, lo que demuestra su valor. La próxima parada será Swift 3. La tercera versión ya está disponible a modo de Developer Preview y será a final de año cuando se distribuya la versión final.

Esta tercera versión traerá novedades importantes y un detalle que todos los que estén metidos ya en el desarrollo de Swift sabrán: no será compatible en compilación con la versión 2. Por lo que se habrá que modificar o adaptar parte del código que se tenga escrito para que todo funcione como debe ser. Por fortuna, habrá un asistente de migración facilitado por la propia Apple para que gran parte de ese trabajo se realice de forma más amigable.

Respecto a las novedades de Swift 3, tenemos la posible eliminación de los prefijos NS, mejor traducción de las llamadas en Swift a las APIs de Objetive-C, modificación de algunos comandos de trabajo y otros detalles más que se pueden ver en la documentación. Información técnica que ahora mismo puede no sonaros a nada, pero que en definitiva busca hacer más eficiente la programación con Swift.

Así que ya lo sabéis, si queréis entrar en el mercado de la programación, hacerlo con Swift parece una gran idea. Porque, además, en iOS 10, Apple ofrecerá Playgrounds, una forma divertida y amena de aprender Swift desde el iPad. Eso sí, no se debe confundir con otros lenguajes de programación por bloques que pueden estar más enfocados al público infantil, ya que lo que nos están enseñando con estética divertida luego podrá ser aplicado al desarrollo de cualquier tipo de app.

Por tanto, ya sabéis, Swift es uno de los mejores lenguajes de programación que podréis aprender. Y no, no es algo que sólo podréis hacer en Mac, desde hace tiempo se puede instalar en Linux.

En Nobbot | Los mejores sitios para que los niños aprendan programación

# data[].attributes.attachment_link.title
Empieza a programar con Swift, el lenguaje con más futuro

# data[].attributes.attachment_link.description
Saber programar será algo tan común en un futuro cercano como lo es saber inglés en la actualidad. Por eso, es normal que muchos se hayan empezado a preocupar de aprender algún lenguaje de programación. Pero, ¿qué lenguaje de programación es el más interesante? Nuestra apuesta es Swift.

# data[].attributes.attachment_link.title
Swift (lenguaje de programación) - Wikipedia, la enciclopedia libre

# data[].attributes.attachment_link.description
Swift es un lenguaje de programación multiparadigma creado por Apple enfocado en el desarrollo de aplicaciones para iOS y macOS. Fue presentado en WWDC 2014​ y está diseñado para integrarse con los Frameworks Cocoa y Cocoa Touch, puede usar cualquier biblioteca programada en Objective-C y llamar a funciones de C.

# data[].attributes.attachment_link.title
Introducción a la Programación de Aplicaciones iOS con Swift

# data[].attributes.attachment_link.readable_text
JavaScript es el lenguaje de programación que debes usar para añadir características interactivas a tu sitio web, (por ejemplo, juegos, eventos que ocurren cuando los botones son presionados o los datos son introducidos en los formularios, efectos de estilo dinámicos, animación, y mucho más). Este artículo te ayudará a comenzar con este lenguaje extraordinario y te dará una idea de qué es posible hacer con él.

JavaScript es un robusto lenguaje de programación que se puede aplicar a un documento HTML y usarse para crear interactividad dinámica en los sitios web. Fue inventado por Brendan Eich, cofundador del proyecto Mozilla, Mozilla Foundation y la Corporación Mozilla.

Puedes hacer casi cualquier cosa con JavaScript. Puedes empezar con pequeñas cosas como carruseles, galerías de imágenes, diseños fluctuantes, y respuestas a las pulsaciones de botones. Con más experiencia, serás capaz de crear juegos, animaciones 2D y gráficos 3D, aplicaciones integradas basadas en bases de datos ¡y mucho más!

JavaScript por sí solo es bastante compacto aunque muy flexible, y los desarrolladores han escrito gran cantidad de herramientas encima del núcleo del lenguaje JavaScript, desbloqueando una gran cantidad de funcionalidad adicional con un mínimo esfuerzo. Esto incluye:

Interfaces de Programación de Aplicaciones del Navegador (APIs) - APIs construidas dentro de los navegadores que ofrecen funcionalidades como crear dinámicamente contenido HTML y establecer estilos CSS, hasta capturar y manipular un vídeo desde la cámara web del usuario, o generar gráficos 3D y muestras de sonido.

APIs de terceros, que permiten a los desarrolladores incorporar funcionalidades en sus sitios de otros proveedores de contenidos como Twitter o Facebook.

Marcos de trabajo y librerías de terceros que puedes aplicar a tu HTML para que puedas construir y publicar rápidamente sitios y aplicaciones.

Ya que se supone que este artículo es solo una introducción ligera a JavaScript, la intención no es confundirte en esta etapa hablando en detalle sobre cuál es la diferencia entre el núcleo del lenguaje JavaScript y las diferentes herramientas listadas arriba. Puedes aprender todo eso en detalle más tarde, en el Área de Aprendizaje en MDN, y en el resto de MDN.

Debajo se presentan algunos aspectos del núcleo del lenguaje y también jugarás con unas pocas características de la API del navegador. ¡Diviértete!

La sección de arriba suena realmente emocionante, y debería serlo. JavaScript es una de las tecnologías web más emocionantes, y cuando comiences a ser bueno en su uso, tus sitios web entrarán en una nueva dimensión de energía y creatividad.

Sin embargo, sentirse cómodo con JavaScript es un poco más difícil que sentirse cómodo con HTML y CSS. Deberás comenzar poco a poco y continuar trabajando en pasos pequeños y consistentes. Para comenzar, mostraremos cómo añadir JavaScript básico a tu página, creando un " ¡Hola Mundo!" de ejemplo ( el estándar en los ejemplos básicos de programación).

1. Primero, ve a tu sitio de pruebas y crea una carpeta llamada scripts. Luego, dentro de la nueva carpeta de scripts, crea un nuevo archivo llamado main.js y guárdalo.

2. A continuación, abre tu archivo index.html e introduce el siguiente código en una nueva línea, justo antes de la etiqueta de cierre </body>:

3. Esto hace básicamente el mismo trabajo que el elemento <link> para CSS: aplica el código JavaScript a la página, para que pueda actuar sobre el HTML (y CSS, o cualquier cosa en la página).

4. Ahora añade el siguiente código al archivo main.js:

5. Finalmente, asegúrate de que has guardado los archivos HTML y JavaScript, y abre index.html en el navegador. Deberías ver algo así:

Nota: la razón por la que has puesto el elemento <script> (en-US) casi al final del documento HTML es porque el navegador carga el HTML en el orden en que aparece en el archivo.

Si se cargara primero JavaScript y se supone que debe afectar al HTML que tiene debajo, podría no funcionar, ya que ha sido cargado antes que el HTML sobre el que se supone debe trabajar. Por lo tanto, colocar el JavaScript cerca del final de la página es normalmente la mejor estrategia. Para aprender más sobre enfoques alternativos, mira Estrategias de carga de scripts.

El texto del título ha sido cambiado por ¡Hola mundo! usando JavaScript. Hiciste esto primero usando la función querySelector() para obtener una referencia al título y almacenarla en una variable llamada miTitulo. Esto es muy similar a lo que hiciste con CSS usando selectores -quieres hacer algo con un elemento, así que tienes que seleccionarlo primero-.

Después de eso, estableciste el valor de la propiedad textContent de la variable miTitulo (que representa el contenido del título) como ¡Hola mundo!

Nota: Las dos características que has utilizado en este ejercicio forman parte de la API del Modelo de Objeto de Documento (DOM), que tiene la capacidad de manipular documentos.

Ahora se explicarán algunas de las funciones básicas del lenguaje JavaScript para que puedas comprender mejor cómo funciona todo. Mejor aún, estas características son comunes para todos los lenguajes de programación. Si puedes entender esos fundamentos, deberías ser capaz de comenzar a programar en casi cualquier cosa.

Las Variables son contenedores en los que puedes almacenar valores. Primero debes declarar la variable con la palabra clave var (menos recomendado) o let, seguida del nombre que le quieras dar. Se recomienda más el uso de let que de var (más adelante se profundiza un poco sobre esto):

Nota: todas las líneas en JS deben acabar en punto y coma (;) para indicar que es ahí donde termina la declaración. Si no los incluyes puedes obtener resultados inesperados. Sin embargo, algunas personas creen que es una buena práctica tener punto y coma al final de cada declaración. Hay otras reglas para cuando se debe y no se debe usar punto y coma. Para más detalles, vea Guía del punto y coma en JavaScript (en inglés).

Nota: JavaScript distingue entre mayúsculas y minúsculas. miVariable es una variable distinta a mivariable. Si estás teniendo problemas en tu código, revisa las mayúsculas y minúsculas.

Tras declarar una variable, puedes asignarle un valor:

nombreDeLaVariable = "Bob" ;

Puedes hacer las dos cosas en la misma línea si lo necesitas:

let nombreDeLaVariable = "Bob" ;

Puedes obtener el valor de la variable llamándola por su nombre:

Después de haberle dado un valor a la variable, puedes volver a cambiarlo:

let nombreDeLaVariable = "Bob" ; nombreDeLaVariable = "Steve" ;

Advierte que las variables tienen distintos tipos de datos:

Variable

Explicación

Ejemplo

String

Esto es una secuencia de texto conocida como cadena. Para indicar que la variable es una cadena, debes escribirlo entre comillas.
let miVariable = 'Bob';

Number

Esto es un número. Los números no tienen comillas.
let miVariable = 10;

Boolean

Tienen valor verdadero/falso. true/ false son palabras especiales en JS, y no necesitan comillas.
let miVariable = true;

Array

Una estructura que te permite almacenar varios valores en una sola referencia.

let miVariable = [1,'Bob','Steve',10];
Llama a cada miembro del array así: miVariable[0], miVariable[1], etc.

Object

Básicamente cualquier cosa. Todo en JavaScript es un objeto y puede ser almacenado en una variable. Mantén esto en mente mientras aprendes.

let miVariable = document.querySelector('h1');
Todos los ejemplos anteriores también.

Entonces, ¿para qué necesitamos las variables? Las variables son necesarias para hacer cualquier cosa interesante en programación. Si los valores no pudieran cambiar, entonces no podrías hacer nada dinámico, como personalizar un mensaje de bienvenida de un usuario que visita tu página, cambiar la imagen que se muestra en una galería de imágenes, etc.

Puedes escribir comentarios entre el código JavaScript, igual que puedes en CSS. El navegador ignora el texto marcado como comentario. En JavaScript, los comentarios de una sola línea se escriben así:

Pero también puedes escribir comentarios en más de una línea, igual que en CSS:

Un operador es básicamente un símbolo matemático que puede actuar sobre dos valores (o variables) y producir un resultado. En la tabla de abajo aparecen los operadores más simples, con algunos ejemplos para probarlos en la consola del navegador.

Operador

Explicación

Símbolo(s)

Ejemplo

Suma/concatena

Se usa para sumar dos números, o juntar dos cadenas en una.
+6 + 9;
"Hola " + "mundo!";

Resta, multiplicación, división

Estos hacen lo que esperarías que hicieran en las matemáticas básicas.

-, *, /
9 - 3;
8 * 2; // La multiplicación en JS es un asterisco
9 / 3;

Operador de asignación

Los has visto anteriormente: asigna un valor a una variable.
=let miVariable = 'Bob';

identidad/igualdad

Comprueba si dos valores son iguales entre sí, y devuelve un valor de true/ false (booleano).
===let miVariable = 3;
miVariable === 4;

Negación, distinto (no igual)

En ocasiones utilizado con el operador de identidad, la negación es en JS el equivalente al operador lógico NOT - cambia true por false y viceversa.

!, !==

La expresión básica es true, pero la comparación devuelve false porque lo hemos negado:
let miVariable = 3;
!miVariable === 3;
Aquí estamos comprobando " miVariable NO es igual a 3". Esto devuelve false, porque miVariable ES igual a 3.
let miVariable = 3;
miVariable !== 3;

Hay muchos operadores por explorar, pero con esto será suficiente por ahora. Mira Expresiones y operadores para ver la lista completa.

Nota: mezclar tipos de datos puede dar lugar a resultados extraños cuando se hacen cálculos, así que asegúrate de que relacionas tus variables correctamente y de que recibes los resultados que esperabas. Por ejemplo, teclea: "3" + "25" en tu consola. ¿Por qué no obtienes lo que esperabas? Porque las comillas convierten los números en "strings" (el término inglés para denominar cadenas de caracteres) y de este modo has acabado con los "strings" concatenados entre sí, y no con los números sumados. Si tecleas: 35 + 25, obtendrás el resultado correcto.

Las condicionales son estructuras de código que permiten comprobar si una expresión devuelve true o no, y después ejecuta un código diferente dependiendo del resultado. La forma de condicional más común es la llamada if... else. Entonces, por ejemplo:

La expresión dentro de if (... ) es el criterio - este usa al operador de identidad (descrito arriba) para comparar la variable helado con la cadena chocolate para ver si las dos son iguales. Si esta comparación devuelve true, el primer bloque de código se ejecuta. Si no, ese código se omite y se ejecuta el segundo bloque de código después de la declaración else.

Las funciones son una manera de encapsular una funcionalidad que quieres reutilizar, de manera que puedes llamar esa función con un solo nombre, y no tendrás que escribir el código entero cada vez que la utilices. Ya has visto algunas funciones más arriba, por ejemplo:

let nombreDeLaVariable = document. querySelector ( "h1" ) ;

Estas funciones document.querySelector y alert están integradas en el navegador para poder utilizarlas en cualquier momento.

Si ves algo que parece un nombre de variable, pero tiene paréntesis -()- al final, probablemente es una función. Las funciones con frecuencia toman argumentos -pedazos de datos que necesitan para hacer su trabajo-. Estos se colocan dentro de los paréntesis, y se separan con comas si hay más de uno.

Por ejemplo, la función alert() hace aparecer una ventana emergente dentro de la ventana del navegador, pero necesitas asignarle una cadena como argumento para decirle qué mensaje se debe escribir en la ventana emergente.

Las buenas noticias son que podemos definir nuestras propias funciones -en el siguiente ejemplo escribimos una función simple que toma dos números como argumentos y los multiplica entre sí-:

Trata de ejecutar la función anterior en la consola. Después trata de usar la nueva función algunas veces, p.ej:

Nota: la sentencia return le dice al navegador que devuelva la variable resultado fuera de la función, para que esté disponible para su uso. Esto es necesario porque las variables definidas dentro de funciones, solo están disponibles dentro de esas funciones. Esto se conoce como " ámbito ( scope en inglés) de la variable". Lee más sobre ámbito o alcance de la variable.

Para crear una interacción real en tu sitio web, debes usar eventos. Estos son unas estructuras de código que captan lo que sucede en el navegador, y permite que en respuesta a las acciones que suceden se ejecute un código. El ejemplo más obvio es un clic ( click event), que se activa al hacer clic sobre algo. Para demostrar esto, prueba ingresando lo siguiente en tu consola, luego da clic sobre la página actual:

Hay muchas maneras de enlazar un evento a un elemento; aquí hemos seleccionado el elemento <html> y le asignamos a su propiedad onclick una función anónima (función sin nombre) que contiene el código que se ejecutará cuando el evento suceda.

Nota que

es equivalente a

es solo un modo más corto de escribirlo.

Ahora vas a repasar un poco lo básico de JavaScript. Añadirás un par de funcionalidades a tu sitio para demostrar lo que puedes hacer.

En esta sección añadirás otra imagen a tu sitio usando la DOM API y agregarás un poco de código para cambiar entre imágenes al hacer clic.

1. Primero que todo, busca una imagen que te guste para tu sitio. Asegúrate que sea del mismo tamaño que la primera, o lo más cerca posible.

2. Guarda tu imagen en tu carpeta images.

3. Renombra esta imagen "firefox2.png" (sin las comillas).

4. Ve a tu archivo main.js y agrega el siguiente JavaScript (si tu JavaScript de "Hola Mundo" está aún allí, bórralo).

5. Guarda todos los archivos y carga index.html en tu navegador. Ahora cuando hagas clic en la imagen, ¡esta debe cambiar por otra!

Esto fue lo que sucedió: se almacena una referencia a tu elemento <img> en la variable miImage. Luego, haces que esta propiedad del manejador de evento onclick de la variable sea igual a una función sin nombre (una función "anónima"). Ahora, cada vez que se haga clic en la imagen:

1. El código recupera el valor del atributo src de la imagen.

2. El código usa una condicional para comprobar si el valor src es igual a la ruta de la imagen original:

1. Si es así, el código cambia el valor de src a la ruta de la segunda imagen, forzando a que se cargue la otra imagen en el elemento <img>.

2. Si no es así (significa que ya fue modificada), se cambiará el valor de src nuevamente a la ruta de la imagen original, regresando a como era en un principio.

Ahora añadirás un poco más de código, para cambiar el título de la página o incluir un mensaje personalizado de bienvenida para cuando el usuario ingrese por primera vez. Este mensaje de bienvenida permanecerá luego de que el usuario abandone la página y estará disponible para cuando regrese. Lo guardarás usando Web Storage API. También se incluirá una opción para cambiar el usuario y por lo tanto también el mensaje de bienvenida en cualquier momento que se requiera.

1. En index.html, agrega el siguiente código antes del elemento <script> (en-US):

2. En main.js, agrega el siguiente código al final del archivo, exactamente como está escrito. Esto toma referencia al nuevo botón que se agregó y al título y los almacena en variables:

3. Ahora agrega la siguiente función para poner el saludo personalizado, lo que no causará nada aún, pero arreglarás esto en un momento: La función estableceNombreUsuario() contiene una función prompt(), que crea un cuadro de diálogo como lo hace alert(); la diferencia es que prompt() pide al usuario un dato, y almacena este dato en una variable cuando el botón Aceptar del cuadro de diálogo es presionado. En este caso, pedirás al usuario que ingrese su nombre. Luego, llamarás la API localStorage, que nos permite almacenar datos en el navegador y recuperarlos luego. Usarás la función setItem() de localStorage, que crea y almacena un dato en el elemento llamado 'nombre', y coloca este valor en la variable miNombre que contiene el nombre que el usuario ingresó. Finalmente, establecerás el textContent del título a una cadena, más el nombre de usuario recientemente almacenado.

4. Luego, agregarás este bloque if ... else. Se podría llamar a esto el código de inicialización, como se ha establecido para cuando carga la app por primera vez: La primera línea de este bloque usa el operador de negación (NO lógico representado por!) para comprobar si el elemento 'nombre' existe. Si no existe, la función estableceNombreUsuario() se iniciará para crearlo. Si ya existe (como por ejemplo cuando el usuario ya ingresó al sitio), se recupera el dato del nombre usando getItem() y se fija mediante textContent del título a la cadena, más el nombre del usuario, como hiciste dentro de estableceNombreUsuario().

5. Finalmente, agrega abajo el evento onclick que manipulará el botón, de modo que cuando sea pulsado se inicie la función estableceNombreUsuario(). Esto permitirá al usuario establecer un nuevo nombre cada vez que lo desee al pulsar el botón:

Ahora cuando visites tu sitio por primera vez, este te pedirá tu nombre y te dará un mensaje personalizado de bienvenida. Puedes cambiar cuantas veces quieras el nombre al presionar el botón. Y como un bonus añadido, ya que el nombre se almacena en el localStorage, este permanecerá después de que cierre el sitio, ¡manteniendo ahí el mensaje personalizado cuando abras el sitio la próxima vez!

Cuando ejecutes el ejemplo y obtengas el cuadro de diálogo que solicita que introduzcas tu nombre de usuario, intenta pulsar el botón Cancelar. Deberías terminar con un título que diga que Mozilla es genial, null. Esto sucede porque, cuando cancelas el mensaje, el valor se establece como null. Null (nulo) es un valor especial en JavaScript que se refiere a la ausencia de un valor.

Además, prueba a dar clic en Aceptar sin introducir un nombre. Deberías terminar con un título que diga que Mozilla es genial, por razones bastante obvias.

Para evitar estos problemas, podrías comprobar que el usuario no ha introducido un nombre en blanco. Actualiza tu función estableceNombreUsuario() a lo siguiente:

En el lenguaje humano, esto significa que si miNombre no tiene ningún valor, ejecute estableceNombreUsuario() de nuevo desde el principio. Si tiene un valor (si la afirmación anterior no es verdadera), entonces almacene el valor en localStorage y establézcalo como el texto del título.

Si has seguido las instrucciones en este artículo, tendrás una página que luzca como esta (también puede ver nuestra versión aquí):

Si tuviste problemas, siempre puedes comparar su trabajo con el código terminado del ejemplo en GitHub.

Aquí solo has rozado la superficie de JavaScript. Si has disfrutado aprendiendo y deseas avanzar más, visita la Guía de JavaScript.

JavaScript

Sumérgete en JavaScript con mucho más detalle.

Aprende JavaScript

¡Este es un excelente material para los aspirantes a desarrolladores web! Aprende JavaScript en un entorno interactivo, con lecciones cortas y pruebas interactivas, guiadas por una evaluación automatizada. Las primeras 40 lecciones son gratis. El curso completo está disponible por un pequeño pago único (en inglés).

# data[].attributes.attachment_link.title
Fundamentos de JavaScript - Aprende desarrollo web | MDN

# data[].attributes.attachment_link.description
JavaScript es el lenguaje de programación que debes usar para añadir características interactivas a tu sitio web, (por ejemplo, juegos, eventos que ocurren cuando los botones son presionados o los datos son introducidos en los formularios, efectos de estilo dinámicos, animación, y mucho más).

# data[].attributes.attachment_link.title
Curso Básico de Javascript desde 0 - Introducción

# data[].attributes.attachment_link.readable_text
Es un lenguaje de programación de alto nivel desarrollado por primera vez por el Comité CODASYL ( Conference on Data Systems Languages) en 1960. Desde entonces, la responsabilidad por el desarrollo de nuevas normas COBOL ha sido asumida por el American National Standards Institute (ANSI).

Ha habido 3 modificaciones de normas ANSI para este lenguaje: en 1968, 1974 y 1985.

COBOL es un acrónimo que significa COmmon Business Oriented L anguage (Lenguaje orientado a los negocios comunes). Está diseñado para el desarrollo de negocios, por lo general orientada a archivos y aplicaciones. No está diseñado para escribir programas de sistemas, como por ejemplo un sistema operativo o un compilador.

Durante más de cuatro décadas COBOL ha sido el lenguaje de programación dominante en la informática empresarial, gracias a la capacidad de manejar ficheros grandes. En ese tiempo se ha encontrado desafíos de un gran número lenguajes de programación como PL1, Algol68, Pascal, Modula, Ada, C, C + +. Todas estos lenguajes han encontrado su sitio en le mercado, pero ninguno ha desplazado a COBOL. Actualmente hay desafíos recientes como Java y Visual Basic y Python, que están demostrando ser serios competidores.

Introducción a la Programación. Un programa es un conjunto de instrucciones escritas en un lenguaje que el ordenador pueda entender.
El ordenador ejecuta instrucciones del programa, uno tras otro en secuencia hasta que alcanza el final del programa, a menos que alguna instrucción en el programa altere el orden de ejecución.

Veamos un ejemplo práctico muy simple para hacernos una pequeña idea de lo que es un programa.

Queremos escribir un programa que acepte dos números desde el teclado, multiplicarlos y mostrar el resultado en la pantalla del ordenador.

Cuando se nos plantea un problema debemos estudiar un poco e identificar los datos que necesitamos y que queremos que haga el programa con esos datos:

¿Que Necesitamos? Dos números, que le vamos a llamar Num1 y Num2.

¿Cual es el proceso? Multiplicar Num1 por Num2.

¿Que hacemos con la información que obtenemos? Vamos amostrarlo en pantalla.

Los datos conocidos que necesitamos en un proceso, se almacenan en un pequeño trozo en la memoria. Esta trozo de memoria es lo que se llama variable. Se le asigna un nombre para identificarlo y tener acceso a él en cualquier momento del programa.

Normas de Codificación. Un programa en Cobol se escribe secuencialmente en líneas de 80 columnas o menos con la siguiente división:

La parte (1) comprende las columnas de la 1 a la 6 ambas inclusive y se utiliza para numerar las líneas. Prácticamente esto ya no se utiliza.

La parte (2) comprende la columna 7 y en ella podemos encontrar, un guión (-) que nos indica que esta línea es continuación de la anterior pero que por su tamaño ocupa mas de una línea, un asterisco (*) que nos indica que es un comentario y por lo tanto el compilador lo ignora.

La parte (3) se le llama Área A comprende las columnas 8 a 11 ambas inclusive y aquí es donde se escriben los nombre de las divisiones, de las secciones, de los párrafos, los indicadores de FD (File Description) y los niveles de variables 01 y 77.

La parte (4) llamada Área B comprende desde la columna 12 a la 72 y en ellas se incluirán todas las instrucciones del programa, las lineas de las secciones y los niveles de variables mayores a 01.

La parte (5) de la columna 73 a la 80 no se utiliza y por lo tanto es ignorada por el compilador.

En conclusión, sólo tenemos disponibles para escribir el código desde la columna 8 hasta la 72, todo aquello que escribamos a partir de ésta última el compilador lo ignora y no lo compila y dará muchos errores de compilación.

El punto es algo muy a tener en cuenta en COBOL ya que nos indica el final de una linea y determinan todas las secciones, divisiones y párrafos. Un simple punto que se nos olvide, daría muchos errores al compilar y tendríamos muchos dolores de cabeza hasta dar con el problema.

Todos los nombres definidos por el usuario, como variables, nombres de párrafo..., deben cumplir con las siguientes reglas:

Deben contener al menos un carácter, pero no más de 30 caracteres.

Deben contener al menos un carácter alfabético.

No debe comenzar ni terminar con un guión.

Deben construirse a partir de los caracteres de la A a la Z, números del 0 al 9 y el guión.

No deben contener espacios y no se distinguen entre mayúsculas y minúsculas, es decir, que es lo mismo NUM1, nUm1, num1.

Continúa por Estructura de un programa.

# data[].attributes.attachment_link.title
Cobol.¿Que es Cobol? - Enredando con Programación - Medium

# data[].attributes.attachment_link.description
Es un lenguaje de programación de alto nivel desarrollado por primera vez por el Comité CODASYL ( Conference on Data Systems Languages) en 1960. Desde entonces, la responsabilidad por el desarrollo de nuevas normas COBOL ha sido asumida por el American National Standards Institute (ANSI).

# data[].attributes.attachment_link.readable_text
Paradigm

Procedural, imperative, object-oriented, generic

Designed by

Howard Bromberg, Norman Discount, Vernon Reeves, William Selden, Gertrude Tierney, with indirect influence from Jean E. Sammet, [1]Grace Hopper

Developers

CODASYL, ANSI, ISO/ IEC

First appeared

1959; 65 years ago

Stable release

Typing discipline

Weak, static

Filename extensions

.cbl, .cob, .cpy

GnuCOBOL, Micro Focus Visual COBOL IBM COBOL,

COBOL/2, DEC COBOL-10, DEC PDP-11 COBOL, DEC PDP-11 COBOL-85, 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) COBOL, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, Unix COBOL X/Open, Veryant isCOBOL, Wang VS COBOL

Initial: AIMACO, COMTRAN, FACT, FLOW-MATIC
COBOL 2002:[a] C++, Eiffel, Smalltalk

CobolScript,[5] EGL,[6] PL/I,[7] PL/B[8]

COBOL (; an acronym for "common business-oriented language") is a compiled English-like computer programming language designed for business use. It is an imperative, procedural and, since 2002, object-oriented language. COBOL is primarily used in business, finance, and administrative systems for companies and governments. COBOL is still widely used in applications deployed on mainframe computers, such as large-scale batch and transaction processing jobs. Many large financial institutions were developing new systems in the language as late as 2006, but most programming in COBOL today is purely to maintain existing applications. Programs are being moved to new platforms, rewritten in modern languages or replaced with other software.

COBOL was designed in 1959 by CODASYL and was partly based on the programming language FLOW-MATIC designed by Grace Hopper. It was created as part of a U.S. Department of Defense effort to create a portable programming language for data processing. It was originally seen as a stopgap, but the Defense Department promptly forced computer manufacturers to provide it, resulting in its widespread adoption. It was standardized in 1968 and has been revised five times. Expansions include support for structured and object-oriented programming. The current standard is ISO/ IEC 1989:2023.

COBOL statements have prose syntax such as , which was designed to be self-documenting and highly readable. However, it is verbose and uses over 300 reserved words. This contrasts with the succinct and mathematically inspired syntax of other languages (in this case, ).

COBOL code is split into four divisions (identification, environment, data, and procedure) containing a rigid hierarchy of sections, paragraphs and sentences. Lacking a large standard library, the standard specifies 43 statements, 87 functions and just one class.

Academic computer scientists were generally uninterested in business applications when COBOL was created and were not involved in its design; it was (effectively) designed from the ground up as a computer language for business, with an emphasis on inputs and outputs, whose only data types were numbers and strings of text.

COBOL has been criticized for its verbosity, design process, and poor support for structured programming. These weaknesses result in monolithic programs that are hard to comprehend as a whole, despite their local readability.

For years, COBOL has been assumed as a programming language for business operations in mainframes, although in recent years, many COBOL operations have been moved to cloud computing.

On 8 April 1959, Mary K. Hawes, a computer scientist at Burroughs Corporation, called a meeting of representatives from academia, computer users, and manufacturers at the University of Pennsylvania to organize a formal meeting on common business languages. Representatives included Grace Hopper (inventor of the English-like data processing language FLOW-MATIC), Jean Sammet and Saul Gorn.

At the April meeting, the group asked the Department of Defense (DoD) to sponsor an effort to create a common business language. The delegation impressed Charles A. Phillips, director of the Data System Research Staff at the DoD, who thought that they "thoroughly understood" the DoD's problems. The DoD operated 225 computers, had 175 more on order and had spent over $200 million on implementing programs to run on them. Portable programs would save time, reduce costs and ease modernization.

Charles Phillips agreed to sponsor the meeting and tasked the delegation with drafting the agenda.

On 28 and 29 May 1959 (exactly one year after the Zürich ALGOL 58 meeting), a meeting was held at the Pentagon to discuss the creation of a common programming language for business. It was attended by 41 people and was chaired by Phillips. The Department of Defense was concerned about whether it could run the same data processing programs on different computers. FORTRAN, the only mainstream language at the time, lacked the features needed to write such programs.

Representatives enthusiastically described a language that could work in a wide variety of environments, from banking and insurance to utilities and inventory control. They agreed unanimously that more people should be able to program and that the new language should not be restricted by the limitations of contemporary technology. A majority agreed that the language should make maximal use of English, be capable of change, be machine-independent and be easy to use, even at the expense of power.

The meeting resulted in the creation of a steering committee and short, intermediate and long-range committees. The short-range committee was given to September (three months) to produce specifications for an interim language, which would then be improved upon by the other committees. Their official mission, however, was to identify the strengths and weaknesses of existing programming languages and did not explicitly direct them to create a new language.

The deadline was met with disbelief by the short-range committee. One member, Betty Holberton, described the three-month deadline as "gross optimism" and doubted that the language really would be a stopgap.

The steering committee met on 4 June and agreed to name the entire activity as the Committee on Data Systems Languages, or CODASYL, and to form an executive committee.

The short-range committee members represented six computer manufacturers and three government agencies. The computer manufacturers were Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, and Sylvania Electric Products. The government agencies were the U.S. Air Force, the Navy's David Taylor Model Basin, and the National Bureau of Standards (now the National Institute of Standards and Technology). The committee was chaired by Joseph Wegstein of the U.S. National Bureau of Standards. Work began by investigating data description, statements, existing applications and user experiences.

The committee mainly examined the FLOW-MATIC, AIMACO and COMTRAN programming languages. The FLOW-MATIC language was particularly influential because it had been implemented and because AIMACO was a derivative of it with only minor changes. FLOW-MATIC's inventor, Grace Hopper, also served as a technical adviser to the committee. FLOW-MATIC's major contributions to COBOL were long variable names, English words for commands and the separation of data descriptions and instructions.

Hopper is sometimes called "the mother of COBOL" or "the grandmother of COBOL", although Jean Sammet, a lead designer of COBOL, said Hopper "was not the mother, creator or developer of Cobol".

IBM's COMTRAN language, invented by Bob Bemer, was regarded as a competitor to FLOW-MATIC by a short-range committee made up of colleagues of Grace Hopper. Some of its features were not incorporated into COBOL so that it would not look like IBM had dominated the design process, and Jean Sammet said in 1981 that there had been a "strong anti-IBM bias" from some committee members (herself included). In one case, after Roy Goldfinger, author of the COMTRAN manual and intermediate-range committee member, attended a subcommittee meeting to support his language and encourage the use of algebraic expressions, Grace Hopper sent a memo to the short-range committee reiterating Sperry Rand's efforts to create a language based on English.

In 1980, Grace Hopper commented that "COBOL 60 is 95% FLOW-MATIC" and that COMTRAN had had an "extremely small" influence. Furthermore, she said that she would claim that work was influenced by both FLOW-MATIC and COMTRAN only to "keep other people happy [so they] wouldn't try to knock us out".

Features from COMTRAN incorporated into COBOL included formulas, the PICTURE clause, an improved IF statement, which obviated the need for GO TOs, and a more robust file management system.

Controversial features included those some considered useless or too advanced for data processing users. Such features included Boolean expressions, formulas and table subscripts (indices). Another point of controversy was whether to make keywords context-sensitive and the effect that would have on readability. Although context-sensitive keywords were rejected, the approach was later used in PL/I and partially in COBOL from 2002. Little consideration was given to interactivity, interaction with operating systems (few existed at that time) and functions (thought of as purely mathematical and of no use in data processing).

The specifications were presented to the executive committee on 4 September. They fell short of expectations: Joseph Wegstein noted that "it contains rough spots and requires some additions", and Bob Bemer later described them as a "hodgepodge". The subcommittee was given until December to improve it.

At a mid-September meeting, the committee discussed the new language's name. Suggestions included "BUSY" (Business System), "INFOSYL" (Information System Language) and "COCOSYL" (Common Computer Systems Language). It is unclear who coined the name "COBOL", although Bob Bemer later claimed it had been his suggestion.

In October, the intermediate-range committee received copies of the FACT language specification created by Roy Nutt. Its features impressed the committee so much that they passed a resolution to base COBOL on it.

It soon became apparent that the committee was too large for any further progress to be made quickly. A frustrated Howard Bromberg bought a $15 tombstone with "COBOL" engraved on it and sent it to Charles Phillips to demonstrate his displeasure.

William Selden and Gertrude Tierney of IBM,

Howard Bromberg and Howard Discount of RCA,

Vernon Reeves and Jean E. Sammet of Sylvania Electric Products.

The sub-committee did most of the work creating the specification, leaving the short-range committee to review and modify their work before producing the finished specification.

The specifications were approved by the executive committee on 8 January 1960, and sent to the government printing office, which printed them as COBOL 60. The language's stated objectives were to allow efficient, portable programs to be easily written, to allow users to move to new systems with minimal effort and cost, and to be suitable for inexperienced programmers.

The CODASYL Executive Committee later created the COBOL Maintenance Committee to answer questions from users and vendors and to improve and expand the specifications.

During 1960, the list of manufacturers planning to build COBOL compilers grew. By September, five more manufacturers had joined CODASYL ( Bendix, Control Data Corporation, General Electric (GE), National Cash Register and Philco), and all represented manufacturers had announced COBOL compilers. GE and IBM planned to integrate COBOL into their own languages, GECOM and COMTRAN, respectively. In contrast, International Computers and Tabulators planned to replace their language, CODEL, with COBOL.

Meanwhile, RCA and Sperry Rand worked on creating COBOL compilers. The first COBOL program ran on 17 August on an RCA 501. On 6 and 7 December, the same COBOL program (albeit with minor changes) ran on an RCA computer and a Remington-Rand Univac computer, demonstrating that compatibility could be achieved.

The relative influences of which languages were used continues to this day in the recommended advisory printed in all COBOL reference manuals:

COBOL is an industry language and is not the property of any company or group of companies, or of any organization or group of organizations.

No warranty, expressed or implied, is made by any contributor or by the CODASYL COBOL Committee as to the accuracy and functioning of the programming system and language. Moreover, no responsibility is assumed by any contributor, or by the committee, in connection therewith. The authors and copyright holders of the copyrighted material used herein are as follows:

FLOW-MATIC (trademark of Unisys Corporation), Programming for the UNIVAC (R) I and II, Data Automation Systems, copyrighted 1958, 1959, by Unisys Corporation; IBM Commercial Translator Form No. F28-8013, copyrighted 1959 by IBM; FACT, DSI 27A5260-2760, copyrighted 1960 by Minneapolis-Honeywell.

They have specifically authorized the use of this material, in whole or in part, in the COBOL specifications. Such authorization extends to the reproduction and use of COBOL specifications in programming manuals or similar publications.

It is rather unlikely that Cobol will be around by the end of the decade.

Many logical flaws were found in COBOL 60, leading General Electric's Charles Katz to warn that it could not be interpreted unambiguously. A reluctant short-term committee performed a total cleanup and, by March 1963, it was reported that COBOL's syntax was as definable as ALGOL's, although semantic ambiguities remained.

In late 1962, IBM announced that COBOL would be their primary development language and that development of COMTRAN would cease.

The COBOL specification was revised three times in the five years after its publication. COBOL-60 was replaced in 1961 by COBOL-61. This was then replaced by the COBOL-61 Extended specifications in 1963, which introduced the sort and report writer facilities. The added facilities corrected flaws identified by Honeywell in late 1959 in a letter to the short-range committee. COBOL Edition 1965 brought further clarifications to the specifications and introduced facilities for handling mass storage files and tables.

Efforts began to standardize COBOL to overcome incompatibilities between versions. In late 1962, both ISO and the United States of America Standards Institute (now ANSI) formed groups to create standards. ANSI produced USA Standard COBOL X3.23 in August 1968, which became the cornerstone for later versions. This version was known as American National Standard (ANS) COBOL and was adopted by ISO in 1972.

By 1970, COBOL had become the most widely used programming language in the world.

Although CODASYL was independent of the ANSI committee, the CODASYL Journal of Development was used by ANSI to identify features that were popular enough to warrant implementing. The Programming Language Committee also liaised with ECMA and the Japanese COBOL Standard committee.

The Programming Language Committee was not well-known, however. The vice-president, William Rinehuls, complained that two-thirds of the COBOL community did not know of the committee's existence. It also lacked the funds to make public documents, such as minutes of meetings and change proposals, freely available.

In 1974, ANSI published a revised version of (ANS) COBOL, containing new features such as file organizations, the DELETE statement and the segmentation module. Deleted features included the NOTE statement, the EXAMINE statement (which was replaced by INSPECT) and the implementer-defined random access module (which was superseded by the new sequential and relative I/O modules). These made up 44 changes, which rendered existing statements incompatible with the new standard. The report writer was slated to be removed from COBOL, but was reinstated before the standard was published. ISO later adopted the updated standard in 1978.

In June 1978, work began on revising COBOL-74. The proposed standard (commonly called COBOL-80) differed significantly from the previous one, causing concerns about incompatibility and conversion costs. In January 1981, Joseph T. Brophy, Senior Vice-president of Travelers Insurance, threatened to sue the standard committee because it was not upwards compatible with COBOL-74. Mr. Brophy described previous conversions of their 40-million-line code base as "non-productive" and a "complete waste of our programmer resources". Later that year, the Data Processing Management Association (DPMA) said it was "strongly opposed" to the new standard, citing "prohibitive" conversion costs and enhancements that were "forced on the user".

ISO TC97-SC5 installed in 1979 the international COBOL Experts Group, on initiative of Wim Ebbinkhuijsen. The group consisted of COBOL experts from many countries, including the United States. Its goal was to achieve mutual understanding and respect between ANSI and the rest of the world with regard to the need of new COBOL features. After three years, ISO changed the status of the group to a formal Working Group: WG 4 COBOL. The group took primary ownership and development of the COBOL standard, where ANSI made most of the proposals.

In 1983, the DPMA withdrew its opposition to the standard, citing the responsiveness of the committee to public concerns. In the same year, a National Bureau of Standards study concluded that the proposed standard would present few problems. A year later, DEC released a VAX/VMS COBOL-80, and noted that conversion of COBOL-74 programs posed few problems. The new EVALUATE statement and inline PERFORM were particularly well received and improved productivity, thanks to simplified control flow and debugging.

The second public review drew another 1,000 (mainly negative) responses, while the last drew just 25, by which time many concerns had been addressed.

In 1985, the ISO Working Group 4 accepted the then-version of the ANSI proposed standard, made several changes and set it as the new ISO standard COBOL 85. It was published in late 1985.

Sixty features were changed or deprecated and 115 were added, such as:

Scope terminators (END-IF, END-PERFORM, END-READ, etc.)

Nested subprograms

CONTINUE, a no-operation statement

EVALUATE, a switch statement

INITIALIZE, a statement that can set groups of data to their default values

Inline PERFORM loop bodies - previously, loop bodies had to be specified in a separate procedure

Reference modification, which allows access to substrings

I/O status codes.

The new standard was adopted by all national standard bodies, including ANSI.

Two amendments followed in 1989 and 1993. The first amendment introduced intrinsic functions and the other provided corrections.

In 1997, Gartner Group estimated that there were a total of 200 billion lines of COBOL in existence, which ran 80% of all business programs.

In the early 1990s, work began on adding object-orientation in the next full revision of COBOL. Object-oriented features were taken from C++ and Smalltalk.

The initial estimate was to have this revision completed by 1997, and an ISO Committee Draft (CD) was available by 1997. Some vendors (including Micro Focus, Fujitsu, and IBM) introduced object-oriented syntax based on drafts of the full revision. The final approved ISO standard was approved and published in late 2002.

Fujitsu/GTSoftware, Micro Focus introduced object-oriented COBOL compilers targeting the .NET Framework.

There were many other new features, many of which had been in the CODASYL COBOL Journal of Development since 1978 and had missed the opportunity to be included in COBOL-85. These other features included:

Between 2003 and 2009, three technical reports were produced describing object finalization, XML processing and collection classes for COBOL.

COBOL 2014 includes the following changes:

Portable arithmetic results have been replaced by IEEE 754 data types

Major features have been made optional, such as the VALIDATE facility, the report writer and the screen-handling facility

Method overloading

Dynamic capacity tables (a feature dropped from the draft of COBOL 2002)

The COBOL 2023 standard added a few new features:

There is as yet no known complete implementation of this standard.[citation needed ]

COBOL programs are used globally in governments and businesses and are running on diverse operating systems such as z/OS, z/VSE, VME, Unix, NonStop OS, OpenVMS and Windows. In 1997, the Gartner Group reported that 80% of the world's business ran on COBOL with over 200 billion lines of code and 5 billion lines more being written annually.

Near the end of the 20th century, the year 2000 problem (Y2K) was the focus of significant COBOL programming effort, sometimes by the same programmers who had designed the systems decades before. The particular level of effort required to correct COBOL code has been attributed to the large amount of business-oriented COBOL, as business applications use dates heavily, and to fixed-length data fields. Some studies attribute as much as "24% of Y2K software repair costs to Cobol". After the clean-up effort put into these programs for Y2K, a 2003 survey found that many remained in use. The authors said that the survey data suggest "a gradual decline in the importance of COBOL in application development over the [following] 10 years unless ... integration with other languages and technologies can be adopted".

In 2006 and 2012, Computerworld surveys (of 352 readers) found that over 60% of organizations used COBOL (more than C++ and Visual Basic .NET) and that for half of those, COBOL was used for the majority of their internal software. 36% of managers said they planned to migrate from COBOL, and 25% said that they would do so if not for the expense of rewriting legacy code. Alternatively, some businesses have migrated their COBOL programs from mainframes to cheaper, faster hardware.

Testimony before the House of Representatives in 2016 indicated that COBOL is still in use by many federal agencies. Reuters reported in 2017 that 43% of banking systems still used COBOL with over 220 billion lines of COBOL code in use.

By 2019, the number of COBOL programmers was shrinking fast due to retirements, leading to an impending skills gap in business and government organizations which still use mainframe systems for high-volume transaction processing. Efforts to rewrite systems in newer languages have proven expensive and problematic, as has the outsourcing of code maintenance, thus proposals to train more people in COBOL are advocated.

During the COVID-19 pandemic and the ensuing surge of unemployment, several US states reported a shortage of skilled COBOL programmers to support the legacy systems used for unemployment benefit management. Many of these systems had been in the process of conversion to more modern programming languages prior to the pandemic, but the process was put on hold. Similarly, the US Internal Revenue Service rushed to patch its COBOL-based Individual Master File in order to disburse the tens of millions of payments mandated by the Coronavirus Aid, Relief, and Economic Security Act.

COBOL has an English-like syntax, which is used to describe nearly everything in a program. For example, a condition can be expressed as or more concisely as or . More complex conditions can be abbreviated by removing repeated conditions and variables. For example, can be shortened to . To support this syntax, COBOL has over 300 keywords. Some of the keywords are simple alternative or pluralized spellings of the same word, which provides for more grammatically appropriate statements and clauses; e.g., the IN and OF keywords can be used interchangeably, as can TIME and TIMES, and VALUE and VALUES.

Each COBOL program is made up of four basic lexical items: words, literals, picture character-strings (see § PICTURE clause) and separators. Words include reserved words and user-defined identifiers. They are up to 31 characters long and may include letters, digits, hyphens and underscores. Literals include numerals (e.g. 12) and strings (e.g. 'Hello!'). Separators include the space character and commas and semi-colons followed by a space.

A COBOL program is split into four divisions: the identification division, the environment division, the data division and the procedure division. The identification division specifies the name and type of the source element and is where classes and interfaces are specified. The environment division specifies any program features that depend on the system running it, such as files and character sets. The data division is used to declare variables and parameters. The procedure division contains the program's statements. Each division is sub-divided into sections, which are made up of paragraphs.

COBOL's syntax is usually described with a unique metalanguage using braces, brackets, bars and underlining. The metalanguage was developed for the original COBOL specifications. Although Backus-Naur form did exist at the time, the committee had not heard of it.

Underlining

The reserved word is compulsory

[| |]

Zero or more options may be selected. Any option may only be selected once.

As an example, consider the following description of an ADD statement:

This description permits the following variants:

COBOL program deck of punched cards, from the 1970s

The height of COBOL's popularity coincided with the era of keypunch machines and punched cards. The program itself was written onto punched cards, then read in and compiled, and the data fed into the program was sometimes on cards as well.

COBOL can be written in two formats: fixed (the default) or free. In fixed-format, code must be aligned to fit in certain areas (a hold-over from using punched cards). Until COBOL 2002, these were:

Indicator area

7

The following characters are allowed here:

* - Comment line

/ - Comment line that will be printed on a new page of a source listing

- - Continuation line, where words or literals from the previous line are continued

D - Line enabled in debugging mode, which is otherwise ignored

Area A

8-11

This contains: DIVISION, SECTION and procedure headers; 01 and 77 level numbers and file/report descriptors

In COBOL 2002, Areas A and B were merged to form the program-text area, which now ends at an implementor-defined column.

COBOL 2002 also introduced free-format code. Free-format code can be placed in any column of the file, as in newer programming languages. Comments are specified using *>, which can be placed anywhere and can also be used in fixed-format source code. Continuation lines are not present, and the >>PAGE directive replaces the / indicator.

The identification division identifies the following code entity and contains the definition of a class or interface.

Classes and interfaces have been in COBOL since 2002. Classes have factory objects, containing class methods and variables, and instance objects, containing instance methods and variables. Inheritance and interfaces provide polymorphism. Support for generic programming is provided through parameterized classes, which can be instantiated to use any class or interface. Objects are stored as references which may be restricted to a certain type. There are two ways of calling a method: the INVOKE statement, which acts similarly to CALL, or through inline method invocation, which is analogous to using functions.

COBOL does not provide a way to hide methods. Class data can be hidden, however, by declaring it without a clause, which leaves external code no way to access it. Method overloading was added in COBOL 2014.

The environment division contains the configuration section and the input-output section. The configuration section is used to specify variable features such as currency signs, locales and character sets. The input-output section contains file-related information.

COBOL supports three file formats, or organizations: sequential, indexed and relative. In sequential files, records are contiguous and must be traversed sequentially, similarly to a linked list. Indexed files have one or more indexes which allow records to be randomly accessed and which can be sorted on them. Each record must have a unique key, but other, , record keys need not be unique. Implementations of indexed files vary between vendors, although common implementations, such as C-ISAM and VSAM, are based on IBM's ISAM. other implementations are Record Management Services on OpenVMS and Enscribe on HPE NonStop (Tandem). Relative files, like indexed files, have a unique record key, but they do not have alternate keys. A relative record's key is its ordinal position; for example, the 10th record has a key of 10. This means that creating a record with a key of 5 may require the creation of (empty) preceding records. Relative files also allow for both sequential and random access.

A common non-standard extension is the line sequential organization, used to process text files. Records in a file are terminated by a newline and may be of varying length.

The data division is split into six sections which declare different items: the file section, for file records; the working-storage section, for static variables; the local-storage section, for automatic variables; the linkage section, for parameters and the return value; the report section and the screen section, for text-based user interfaces.

Data items in COBOL are declared hierarchically through the use of level-numbers which indicate if a data item is part of another. An item with a higher level-number is subordinate to an item with a lower one. Top-level data items, with a level-number of 1, are called . Items that have subordinate aggregate data are called group items; those that do not are called elementary items. Level-numbers used to describe standard data items are between 1 and 49.

In the above example, elementary item num and group item the-date are subordinate to the record some-record, while elementary items the-year, the-month, and the-day are part of the group item the-date.

Subordinate items can be disambiguated with the IN (or OF) keyword. For example, consider the example code above along with the following example:

The names the-year, the-month, and the-day are ambiguous by themselves, since more than one data item is defined with those names. To specify a particular data item, for instance one of the items contained within the sale-date group, the programmer would use the-year IN sale-date (or the equivalent the-year OF sale-date). This syntax is similar to the "dot notation" supported by most contemporary languages.

A level-number of 66 is used to declare a re-grouping of previously defined items, irrespective of how those items are structured. This data level, also referred to by the associated RENAMES clause, is rarely used and, circa 1988, was usually found in old programs. Its ability to ignore the hierarchical and logical structure data meant its use was not recommended and many installations forbade its use.

A 77 level-number indicates the item is stand-alone, and in such situations is equivalent to the level-number 01. For example, the following code declares two 77-level data items, property-name and sales-region, which are non-group data items that are independent of (not subordinate to) any other data items:

An 88 level-number declares a condition name (a so-called 88-level) which is true when its parent data item contains one of the values specified in its VALUE clause. For example, the following code defines two 88-level condition-name items that are true or false depending on the current character data value of the wage-type data item. When the data item contains a value of 'H', the condition-name wage-is-hourly is true, whereas when it contains a value of 'S' or 'Y', the condition-name wage-is-yearly is true. If the data item contains some other value, both of the condition-names are false.

Standard COBOL provides the following data types:

A PICTURE (or PIC) clause is a string of characters, each of which represents a portion of the data item and what it may contain. Some picture characters specify the type of the item and how many characters or digits it occupies in memory. For example, a 9 indicates a decimal digit, and an S indicates that the item is signed. Other picture characters (called and characters) specify how an item should be formatted. For example, a series of + characters define character positions as well as how a leading sign character is to be positioned within the final character data; the rightmost non-numeric character will contain the item's sign, while other character positions corresponding to a + to the left of this position will contain a space. Repeated characters can be specified more concisely by specifying a number in parentheses after a picture character; for example, 9(7) is equivalent to 9999999. Picture specifications containing only digit ( 9) and sign ( S) characters define purely data items, while picture specifications containing alphabetic ( A) or alphanumeric ( X) characters define alphanumeric data items. The presence of other formatting characters define edited numeric or edited alphanumeric data items.

This section Please expand the section to include this information. Further details may exist on the is missing information about COMPUTATIONAL-5. talk page.

The USAGE clause declares the format in which data is stored. Depending on the data type, it can either complement or be used instead of a PICTURE clause. While it can be used to declare pointers and object references, it is mostly geared towards specifying numeric types. These numeric formats are:

Binary, where a minimum size is either specified by the PICTURE clause or by a USAGE clause such as BINARY-LONG

, where data may be stored in whatever format the implementation provides; often equivalent to

, the default format, where data is stored as a string

Floating-point, in either an implementation-dependent format or according to IEEE 754

, where data is stored as a string using an extended character set

, where data is stored in the smallest possible decimal format (typically packed binary-coded decimal)

Reports are associated with report files, which are files which may only be written to through report writer statements.

Each report is defined in the report section of the data division. A report is split into report groups which define the report's headings, footings and details. Reports work around hierarchical control breaks. Control breaks occur when a key variable changes it value; for example, when creating a report detailing customers' orders, a control break could occur when the program reaches a different customer's orders. Here is an example report description for a report which gives a salesperson's sales and which warns of any invalid records:

The above report description describes the following layout:

Sales Report                                                             Page  1

Seller: Howard Bromberg
  Sales on 10/12/2008 were $1000.00
  Sales on 12/12/2008 were    $0.00
  Sales on 13/12/2008 were   $31.47
  INVALID RECORD: Howard Bromberg             XXXXYY

Seller: Howard Discount
...
Sales Report                                                            Page 12

  Sales on 08/05/2014 were  $543.98
  INVALID RECORD: William Selden      12O52014FOOFOO
  Sales on 30/05/2014 were    $0.00

Four statements control the report writer: INITIATE, which prepares the report writer for printing; GENERATE, which prints a report group; SUPPRESS, which suppresses the printing of a report group; and TERMINATE, which terminates report processing. For the above sales report example, the procedure division might look like this:

The sections and paragraphs in the procedure division (collectively called procedures) can be used as labels and as simple subroutines. Unlike in other divisions, paragraphs do not need to be in sections.

Execution goes down through the procedures of a program until it is terminated. To use procedures as subroutines, the PERFORM verb is used.

A PERFORM statement somewhat resembles a procedure call in a newer languages in the sense that execution returns to the code following the PERFORM statement at the end of the called code; however, it does not provide a mechanism for parameter passing or for returning a result value. If a subroutine is invoked using a simple statement like , then control returns at the end of the called procedure. However, PERFORM is unusual in that it may be used to call a range spanning a sequence of several adjacent procedures. This is done with the construct:

The output of this program will be: "A A B C".

PERFORM also differs from conventional procedure calls in that there is, at least traditionally, no notion of a call stack. As a consequence, nested invocations are possible (a sequence of code being PERFORM'ed may execute a PERFORM statement itself), but require extra care if parts of the same code are executed by both invocations. The problem arises when the code in the inner invocation reaches the exit point of the outer invocation. More formally, if control passes through the exit point of a PERFORM invocation that was called earlier but has not yet completed, the COBOL 2002 standard stipulates that the behavior is undefined.

The reason is that COBOL, rather than a "return address", operates with what may be called a continuation address. When control flow reaches the end of any procedure, the continuation address is looked up and control is transferred to that address. Before the program runs, the continuation address for every procedure is initialized to the start address of the procedure that comes next in the program text so that, if no PERFORM statements happen, control flows from top to bottom through the program. But when a PERFORM statement executes, it modifies the continuation address of the called procedure (or the last procedure of the called range, if PERFORM THRU was used), so that control will return to the call site at the end. The original value is saved and is restored afterwards, but there is only one storage position. If two nested invocations operate on overlapping code, they may interfere which each other's management of the continuation address in several ways.

The following example (taken from Veerman & Verhoeven 2006) illustrates the problem:

One might expect that the output of this program would be "1 2 3 4 3": After displaying "2", the second PERFORM causes "3" and "4" to be displayed, and then the first invocation continues on with "3". In traditional COBOL implementations, this is not the case. Rather, the first PERFORM statement sets the continuation address at the end of LABEL3 so that it will jump back to the call site inside LABEL1. The second PERFORM statement sets the return at the end of LABEL4 but does not modify the continuation address of LABEL3, expecting it to be the default continuation. Thus, when the inner invocation arrives at the end of LABEL3, it jumps back to the outer PERFORM statement, and the program stops having printed just "1 2 3". On the other hand, in some COBOL implementations like the open-source TinyCOBOL compiler, the two PERFORM statements do not interfere with each other and the output is indeed "1 2 3 4 3". Therefore, the behavior in such cases is not only (perhaps) surprising, it is also not portable.

A special consequence of this limitation is that PERFORM cannot be used to write recursive code. Another simple example to illustrate this (slightly simplified from Veerman & Verhoeven 2006):

One might expect that the output is "1 2 3 END END END", and in fact that is what some COBOL compilers will produce. But other compilers, like IBM COBOL, will produce code that prints "1 2 3 END END END END ..." and so on, printing "END" over and over in an endless loop. Since there is limited space to store backup continuation addresses, the backups get overwritten in the course of recursive invocations, and all that can be restored is the jump back to DISPLAY 'END'.

COBOL 2014 has 47 statements (also called ), which can be grouped into the following broad categories: control flow, I/O, data manipulation and the report writer. The report writer statements are covered in the report writer section.

COBOL's conditional statements are IF and EVALUATE. EVALUATE is a switch-like statement with the added capability of evaluating multiple values and conditions. This can be used to implement decision tables. For example, the following might be used to control a CNC lathe:

The PERFORM statement is used to define loops which are executed until a condition is true (not while true, which is more common in other languages). It is also used to call procedures or ranges of procedures (see the procedures section for more details). CALL and INVOKE call subprograms and methods, respectively. The name of the subprogram/method is contained in a string which may be a literal or a data item. Parameters can be passed by reference, by content (where a copy is passed by reference) or by value (but only if a prototype is available). CANCEL unloads subprograms from memory. GO TO causes the program to jump to a specified procedure.

The GOBACK statement is a return statement and the STOP statement stops the program. The EXIT statement has six different formats: it can be used as a return statement, a break statement, a continue statement, an end marker or to leave a procedure.

Exceptions are raised by a RAISE statement and caught with a handler, or declarative, defined in the DECLARATIVES portion of the procedure division. Declaratives are sections beginning with a USE statement which specify the errors to handle. Exceptions can be names or objects. RESUME is used in a declarative to jump to the statement after the one that raised the exception or to a procedure outside the DECLARATIVES. Unlike other languages, uncaught exceptions may not terminate the program and the program can proceed unaffected.

File I/O is handled by the self-describing OPEN, CLOSE, READ, and WRITE statements along with a further three: REWRITE, which updates a record; START, which selects subsequent records to access by finding a record with a certain key; and UNLOCK, which releases a lock on the last record accessed.

User interaction is done using ACCEPT and DISPLAY.

The following verbs manipulate data:

INITIALIZE, which sets data items to their default values.

MOVE, which assigns values to data items ; MOVE CORRESPONDING assigns corresponding like-named fields.

SET, which has 15 formats: it can modify indices, assign object references and alter table capacities, among other functions.

ADD, SUBTRACT, MULTIPLY, DIVIDE, and COMPUTE, which handle arithmetic (with COMPUTE assigning the result of a formula to a variable).

ALLOCATE and FREE, which handle dynamic memory.

VALIDATE, which validates and distributes data as specified in an item's description in the data division.

STRING and UNSTRING, which concatenate and split strings, respectively.

INSPECT, which tallies or replaces instances of specified substrings within a string.

SEARCH, which searches a table for the first entry satisfying a condition.

Files and tables are sorted using SORT and the MERGE verb merges and sorts files. The RELEASE verb provides records to sort and RETURN retrieves sorted records in order.

Some statements, such as IF and READ, may themselves contain statements. Such statements may be terminated in two ways: by a period (implicit termination), which terminates all unterminated statements contained, or by a scope terminator, which terminates the nearest matching open statement.

Here, the intent is to display y and z if condition x is true. However, z will be displayed whatever the value of x because the IF statement is terminated by an erroneous period after .

Another bug is a result of the dangling else problem, when two IF statements can associate with an ELSE.

In the above fragment, the ELSE associates with the statement instead of the statement, causing a bug. Prior to the introduction of explicit scope terminators, preventing it would require to be placed after the inner IF.

The original (1959) COBOL specification supported the infamous statement, for which many compilers generated self-modifying code. X and Y are procedure labels, and the single statement in procedure X executed after such an ALTER statement means instead. Many compilers still support it, but it was deemed obsolete in the COBOL 1985 standard and deleted in 2002.

The ALTER statement was poorly regarded because it undermined "locality of context" and made a program's overall logic difficult to comprehend. As textbook author Daniel D. McCracken wrote in 1976, when "someone who has never seen the program before must become familiar with it as quickly as possible, sometimes under critical time pressure because the program has failed ... the sight of a GO TO statement in a paragraph by itself, signaling as it does the existence of an unknown number of ALTER statements at unknown locations throughout the program, strikes fear in the heart of the bravest programmer."

Hello, world

A "Hello, World!" program in COBOL:

When the now famous "Hello, World!" program example in The C Programming Language was first published in 1978 a similar mainframe COBOL program sample would have been submitted through JCL, very likely using a punch card reader, and 80 column punch cards. The listing below, with an empty DATA DIVISION, was tested using Linux and the System/370 Hercules emulator running MVS 3.8J. The JCL, written in July 2015, is derived from the Hercules tutorials and samples hosted by Jay Moseley. In keeping with COBOL programming of that era, HELLO, WORLD is displayed in all capital letters.

After submitting the JCL, the MVS console displayed:

    19.52.48 JOB    3  $HASP100 COBUCLG  ON READER1     COBOL BASE TEST
    19.52.48 JOB    3  IEF677I WARNING MESSAGE(S) FOR JOB COBUCLG  ISSUED
    19.52.48 JOB    3  $HASP373 COBUCLG  STARTED - INIT 1 - CLASS A - SYS BSP1
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSLIB   DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEFACTRT - Stepname  Procstep  Program   Retcode
    19.52.48 JOB    3  COBUCLG    BASETEST  COB       IKFCBL00  RC= 0000
    19.52.48 JOB    3  COBUCLG    BASETEST  LKED      IEWL      RC= 0000
    19.52.48 JOB    3  +HELLO, WORLD
    19.52.48 JOB    3  COBUCLG    BASETEST  GO        PGM=*.DD  RC= 0000
    19.52.48 JOB    3  $HASP395 COBUCLG  ENDED

Line 10 of the console listing above is highlighted for effect, the highlighting is not part of the actual console output.

The associated compiler listing generated over four pages of technical detail and job run information, for the single line of output from the 14 lines of COBOL.

In the 1970s, adoption of the structured programming paradigm was becoming increasingly widespread. Edsger Dijkstra, a preeminent computer scientist, wrote a letter to the editor of Communications of the ACM, published in 1975 entitled "How do we tell truths that might hurt?", in which he was critical of COBOL and several other contemporary languages; remarking that "the use of COBOL cripples the mind".

One cause of spaghetti code was the GO TO statement. Attempts to remove GO TOs from COBOL code, however, resulted in convoluted programs and reduced code quality. GO TOs were largely replaced by the PERFORM statement and procedures, which promoted modular programming and gave easy access to powerful looping facilities. However, PERFORM could be used only with procedures so loop bodies were not located where they were used, making programs harder to understand.

COBOL programs were infamous for being monolithic and lacking modularization. COBOL code could be modularized only through procedures, which were found to be inadequate for large systems. It was impossible to restrict access to data, meaning a procedure could access and modify any data item. Furthermore, there was no way to pass parameters to a procedure, an omission Jean Sammet regarded as the committee's biggest mistake.

Another complication stemmed from the ability to PERFORM THRU a specified sequence of procedures. This meant that control could jump to and return from any procedure, creating convoluted control flow and permitting a programmer to break the single-entry single-exit rule.

This situation improved as COBOL adopted more features. COBOL-74 added subprograms, giving programmers the ability to control the data each part of the program could access. COBOL-85 then added nested subprograms, allowing programmers to hide subprograms. Further control over data and code came in 2002 when object-oriented programming, user-defined functions and user-defined data types were included.

Nevertheless, much important legacy COBOL software uses unstructured code, which has become practically unmaintainable. It can be too risky and costly to modify even a simple section of code, since it may be used from unknown places in unknown ways.

COBOL-85 was not fully compatible with earlier versions, and its development was controversial. Joseph T. Brophy, the CIO of Travelers Insurance, spearheaded an effort to inform COBOL users of the heavy reprogramming costs of implementing the new standard. As a result, the ANSI COBOL Committee received more than 2,200 letters from the public, mostly negative, requiring the committee to make changes. On the other hand, conversion to COBOL-85 was thought to increase productivity in future years, thus justifying the conversion costs.

A weak, verbose, and flabby language used by code grinders to do boring mindless things on dinosaur mainframes. [...] Its very name is seldom uttered without ritual expressions of disgust or horror.

COBOL syntax has often been criticized for its verbosity. Proponents say that this was intended to make the code self-documenting, easing program maintenance. COBOL was also intended to be easy for programmers to learn and use, while still being readable to non-technical staff such as managers.

Jean Sammet, a short-range committee member, noted that "little attempt was made to cater to the professional programmer, in fact people whose main interest is programming tend to be very unhappy with COBOL" which she attributed to COBOL's verbose syntax.

The COBOL community has always been isolated from the computer science community. No academic computer scientists participated in the design of COBOL: all of those on the committee came from commerce or government. Computer scientists at the time were more interested in fields like numerical analysis, physics and system programming than the commercial file-processing problems which COBOL development tackled. Jean Sammet attributed COBOL's unpopularity to an initial "snob reaction" due to its inelegance, the lack of influential computer scientists participating in the design process and a disdain for business data processing. The COBOL specification used a unique "notation", or metalanguage, to define its syntax rather than the new Backus-Naur form which the committee did not know of. This resulted in "severe" criticism.

The academic world tends to regard COBOL as verbose, clumsy and inelegant, and tries to ignore it, although there are probably more COBOL programs and programmers in the world than there are for FORTRAN, ALGOL and PL/I combined. For the most part, only schools with an immediate vocational objective provide instruction in COBOL.

Later, COBOL suffered from a shortage of material covering it; it took until 1963 for introductory books to appear (with Richard D. Irwin publishing a college textbook on COBOL in 1966). By 1985, there were twice as many books on FORTRAN and four times as many on BASIC as on COBOL in the Library of Congress. University professors taught more modern, state-of-the-art languages and techniques instead of COBOL which was said to have a "trade school" nature. Donald Nelson, chair of the CODASYL COBOL committee, said in 1984 that "academics ... hate COBOL" and that computer science graduates "had 'hate COBOL' drilled into them".

By the mid-1980s, there was also significant condescension towards COBOL in the business community from users of other languages, for example FORTRAN or assembler, implying that COBOL could be used only for non-challenging problems.

In 2003, COBOL featured in 80% of information systems curricula in the United States, the same proportion as C++ and Java. Ten years later, a poll by Micro Focus found that 20% of university academics thought COBOL was outdated or dead and that 55% believed their students thought COBOL was outdated or dead. The same poll also found that only 25% of academics had COBOL programming on their curriculum even though 60% thought they should teach it.

COBOL standards have repeatedly suffered from delays: COBOL-85 arrived five years later than hoped, COBOL 2002 was five years late, and COBOL 2014 was six years late. To combat delays, the standard committee allowed the creation of optional addenda which would add features more quickly than by waiting for the next standard revision. However, some committee members raised concerns about incompatibilities between implementations and frequent modifications of the standard.

COBOL's data structures influenced subsequent programming languages. Its record and file structure influenced PL/I and Pascal, and the REDEFINES clause was a predecessor to Pascal's variant records. Explicit file structure definitions preceded the development of database management systems and aggregated data was a significant advance over Fortran's arrays.

PICTURE data declarations were incorporated into PL/I, with minor changes.

COBOL's COPY facility, although considered "primitive", influenced the development of include directives.

1. Sammet, Jean E. (March 2000). "The real creators of Cobol". IEEE Software. 17 (2): 30-32. doi:10.1109/52.841602. ISSN 1937-4194. The Short-Range Committee worked diligently from June 1959 on, but there were great difficulties in having a fairly large committee try to create a programming language. In November, the Short-Range Committee chair appointed six people to develop specifications for consideration: William Selden and Gertrude Tierney (IBM), Howard Bromberg and Norman Discount (RCA), and Vernon Reeves and Jean E. Sammet (Sylvania Electric Products). We worked for two full weeks (including some round-the-clock sessions) in November 1959 and sent the proposed specifications to the full Short-Range Committee, which accepted almost all of them. After some editing (by the same six people), we turned in the specifications as a final report in December to the Executive Committee, which accepted them in January 1960. After some further editing, the Government Printing Office issued Cobol 60. [...] [Grace Hopper] did not participate in its work except through the general guidance she gave to her staff who were direct committee members. Thus, while her indirect influence was very important, regrettably the frequent repeated statements that "Grace Hopper developed Cobol" or "Grace Hopper was a codeveloper of Cobol" or "Grace Hopper is the mother of Cobol" are just not correct.

2. Arranga, Edmund C.; Coyle, Frank P. (February 1998). Object-Oriented COBOL. Cambridge University Press. p. 15. ISBN 978-0132611404. Object-Oriented COBOL's style reflects the influence of Smalltalk and C++.

3. ^ Imajo, Tetsuji; et al. (September 2000). COBOL Script: a business-oriented scripting language. Enterprise Distributed Object Computing Conference. Makuhari, Japan: IEEE. doi:10.1109/EDOC.2000.882363. ISBN 0769508650.

4. ^ Ho, Wing Hong (7 May 2007). "Introduction to EGL" (PDF). IBM Software Group. Archived from the original (PDF) on 13 January 2019.

5. ^ Radin, George (1978). Wexelblat, Richard L. (ed.). The early history and characteristics of PL/I. History of Programming Languages. Academic Press (published 1981). p. 572. doi:10.1145/800025.1198410. ISBN 0127450408.

6. ^ "What is PL/B - The Programming Language for Business?". sysmaker.com. Infopro, Inc. ... conversion to an alternate, extended COBOL or to ANSI COBOL is very difficult, if at all possible

7. ^ Ensmenger, Nathan L. (2009). The Computer Boys Take Over: Computers, Programmers, and the Politics of Technical Expertise. MIT Press. p. 100. ISBN 978-0262050937. LCCN 2009052638.

8. ^ Flahive, Paul (24 May 2019). "How COBOL Still Powers The Global Economy At 60 Years Old". Texas Public Radio. Archived from the original on 24 May 2019. (Grace Hopper) Nicknamed Grandma Cobol, the code was based on some of her earlier work. She said - after hearing the rumors - one of her collaborators went out and bought a granite tombstone. "He had the word COBOL cut in the front of it. Then he shipped it express collect to Mr. Phillips in the pentagon." The prank on Charles Phillips, a leader for the project at the defense department, got the attention of the powers that be and was a turning point she said. COBOL would go on to become the most widely used and longest lasting computer languages in history.

9. ^ "Early Meetings of the Conference on Data Systems Languages". IEEE Annals of the History of Computing. 7 (4): 316-325. 1985. doi:10.1109/MAHC.1985.10047. S2CID 35625728.

10. ^ Adams, Vicki Porter (5 October 1981). "Captain Grace M. Hopper: the Mother of COBOL". InfoWorld. Vol. 3, no. 20. p. 33. ISSN 0199-6649.

11. ^ Lohr, Steve (2008). Go To: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Maverick Scientists, and Iconoclasts-The Programmers Who Created the Software Revolution. Basic Books. p. 52. ISBN 978-0786730766.

12. ^ "Oral History of Captain Grace Hopper" (PDF). Computer History Museum. December 1980. p. 37. Archived from the original (PDF) on 25 December 2017.

13. ^ "THE COBOL REPORT - Interview with Bob Bemer - the Father of COBOL". Archived from the original on 2 April 2018.

14. ^ "THE COBOL REPORT - Interview with Bob Bemer - the Father of COBOL". Archived from the original on 23 December 2003.

15. ^ Williams, Kathleen Broome (10 November 2012). Grace Hopper: Admiral of the Cyber Sea. US Naval Institute Press. ISBN 978-1612512655. OCLC 818867202.

16. Compaq Computer Corporation: ^ Compaq COBOL Reference Manual, Order Number: AA-Q2G0F-TK October 2000, Page xviii; Fujitsu Corporation: Net Cobol Language Reference, Version 15, January 2009; IBM Corporation: Enterprise COBOL for z/OS Language Reference, Version 4 Release 1, SC23-8528-00, December 2007

17. ^ Pratt, Terrence W. (1975). Programming Languages: Design and Implementation. Englewood Cliffs, New Jersey: Prentice Hall. pp. 361-362, 381-382. ISBN 0-13-730432-3.

18. ^ Follet, Robert H.; Sammet, Jean E. (2003). "Programming language standards". In Ralston, Anthony; Reilly, Edwin D.; Hemmendinger, David (eds.). Encyclopedia of Computer Science (4th ed.). Wiley. p. 1467. ISBN 978-0470864128.

19. ^ Triance, J. M. (1974). Programming in COBOL: A Course of Twelve Television Lectures. Manchester University Press. p. 87. ISBN 978-0719005923.

20. ^ Baird, George N.; Oliver, Paul (May 1977). "1974 Standard (X3.23-1974)". Programming Language Standards-Who Needs Them? (PDF) (Report). Department of the Navy. pp. 19-21. Archived (PDF) from the original on 7 January 2014.

21. ^ ClearPath Enterprise Servers (April 2015). "COBOL ANSI-85 Programming Reference Manual" (PDF). public.support.unisys.com. Unisys.

22. ^ Roy, M. K.; Dastidar, D. Ghost (1 June 1989). "Features of COBOL-85". COBOL Programming: Problems and Solutions (2nd ed.). McGraw-Hill Education. pp. 438-451. ISBN 978-0074603185.

23. ^ Billman, John; Klink, Huib (27 February 2008). "Thoughts on the Future of COBOL Standardization" (PDF). Archived from the original (PDF) on 11 July 2009.

24. ^ Kizior, Ronald J.; Carr, Donald; Halpern, Paul. "Does COBOL Have a Future?" (PDF). The Proceedings of the Information Systems Education Conference 2000. 17 (126). Archived from the original (PDF) on 17 August 2016.

25. ^ White, Doug (12 July 1998). "Frequently Asked Questions (FAQ) About the Y2K Problem". homepages.wmich.edu. Archived from the original on 7 November 2021. Thus, the main problem of Y2K is the problem of incorrect results when date mathematics are conducted.

26. ^ Powner, David A. (25 May 2016). "Federal Agencies Need to Address Aging Legacy Systems" (PDF). Government Accountability Office. p. 18. Archived from the original (PDF) on 15 June 2016. Several agencies, such as the Department of Agriculture (USDA), DHS, HHS, Justice, Treasury, and VA, reported using Common Business Oriented Language (COBOL)-a programming language developed in the late 1950s and early 1960s-to program their legacy systems. It is widely known that agencies need to move to more modern, maintainable languages, as appropriate and feasible.

27. ^ Field, John; Ramalingam, G. (September 1999). Identifying Procedural Structure in Cobol Programs (PDF). PASTE '99. doi:10.1145/381788.316163. ISBN 1581131372. Archived (PDF) from the original on 24 December 2010.

28. Examples of compiler support for ^ ALTER can be seen in the following:

Tiffin, Brian (18 September 2013). "September 2013". GNU Cobol. Archived from the original on 5 May 2014.

"The ALTER Statement". Micro Focus Visual COBOL 2.2 for Visual Studio 2013 COBOL Language Reference. Micro Focus.

"ALTER Statement (Nucleus)" (PDF). COBOL85 Reference Manual. Fujitsu. November 1996. p. 555. Archived from the original (PDF) on 6 January 2014.

"ALTER Statement". Enterprise COBOL for z/OS Language Reference. IBM. June 2013.

29. ^ Lämmel, Ralf; Verhoef, Chris (November-December 2001). "Cracking the 500-language problem" (PDF). IEEE Software. 18 (6): 79. doi:10.1109/52.965809. hdl:1871/9853. Archived from the original (PDF) on 19 August 2014.

30. ^ Conway, Richard; Gries, David (1973). An Introduction to Programming: A Structured Approach using PL/1 and PL/C. Cambridge, Massachusetts: Winthrop Publishers. p. 341. ISBN 0-87626-405-4.

31. ^ Pratt, Terrence W.; Zelkowitz, Marvin V. (1984). Programming Languages: Design and Implementation (2nd ed.). Englewood Cliffs, N.J. : Prentice Hall. ISBN 0136780121.

32. ^ "Academia needs more support to tackle the IT skills gap" (Press release). Micro Focus. 7 March 2013.

33. ^ Sammet, Jean; Garfunkel, Jerome (October 1985). "Summary of Changes in COBOL, 1960-1985". Annals of the History of Computing. 7 (4): 342. doi:10.1109/MAHC.1985.10033. S2CID 17940092.

34. ^ Cook, Margaret M. (June 1978). Ghosh, Sakti P.; Liu, Leonard Y. (eds.). Data Base Facility for COBOL 80 (PDF). 1978 National Computer Conference. Anaheim, California: AFIPS Press. pp. 1107-1112. doi:10.1109/AFIPS.1978.63. LCCN 55-44701. The earliest date that a new COBOL standard could be developed and approved is the year 1980 [...].

35. ^ "Resolutions from WG4 meeting 24 - June 26-28, 2003 Las Vegas, Nevada, USA". 11 July 2003. p. 1. Archived from the original (doc) on 8 March 2016. a June 2008 revision of the COBOL standard

36. ^ Coughlan, Michael (2002). "Introduction to COBOL". Archived from the original on 5 March 2023.

37. ^ "What Will the Future Hold". CIO. International Data Group. 15 December 1995 - 1 January 1996. p. 82.

Carr, Donald E.; Kizior, Ronald J. (31 December 2003). "Continued Relevance of COBOL in Business and Academia: Current Situation and Comparison to the Year 2000 Study" (PDF). Information Systems Education Journal. 1 (52). ISSN 1545-679X. S2CID 62485945. Archived (PDF) from the original on 5 March 2023.

CODASYL (July 1969). CODASYL COBOL Journal of Development 1968. National Bureau of Standards. ISSN 0591-0218. LCCN 73601243. OL 14204153M.

Conner, Richard L. (14 May 1984). "Cobol, your age is showing". Computerworld. 18 (20): ID/7-ID/18. ISSN 0010-4841.

Cutler, Gary (9 April 2014). GNU COBOL Programmer's Guide (PDF) (3rd ed.).

Garfunkel, Jerome (1987). The COBOL 85 Example Book. Wiley. ISBN 978-0471804611.

ISO/IEC JTC 1/SC 22/WG 4 (4 December 2001). "ISO/IEC IS 1989:2001 - Programming language COBOL". ISO. Archived from the original (ZIP of PDF) on 24 January 2002. (Link goes to draft N 0147)

ISO/IEC JTC 1/SC 22/WG 4 (31 October 2014). INCITS/ISO/IEC 1989:2014 [2014] - Programming language COBOL. INCITS.

ISO/IEC JTC 1/SC 22/WG 4 (January 2023). ISO/IEC 1989:2023 - Programming language COBOL. ISO.

Klein, William M. (4 October 2010). "The History of COBOL" (PDF). Archived from the original (PDF) on 7 January 2014.

Marcotty, Michael (1978a). Wexelblat, Richard L. (ed.). Transcript of question and answer session. History of Programming Languages. Academic Press (published 1981). p. 263. doi:10.1145/800025.1198370. ISBN 0127450408.

Marcotty, Michael (1978b). Wexelblat, Richard L. (ed.). Full text of all questions submitted. History of Programming Languages. Academic Press (published 1981). p. 274. doi:10.1145/800025.1198371. ISBN 0127450408.

McCracken, Daniel D.; Golden, Donald G. (1988). A Simplified Guide to Structured COBOL Programming (2nd ed.). Wiley. ISBN 978-0471610540. LCCN 87034608.

Riehle, Richard L. (August 1992). "PERFORM considered harmful". Communications of the ACM. 35 (8): 125-128. doi:10.1145/135226.376106. S2CID 18845698.

Sammet, Jean E. (May 1961). A method of combining ALGOL and COBOL. Papers presented at the 9-11 May 1961, western joint IRE-AIEE-ACM computer conference. ACM. pp. 379-387. doi:10.1145/1460690.1460734.

Sammet, Jean E. (1978a). Wexelblat, Richard L. (ed.). The early history of COBOL. History of Programming Languages. Academic Press (published 1981). doi:10.1145/800025.1198367. ISBN 0127450408.

Sammet, Jean E. (1978b). Wexelblat, Richard L. (ed.). Transcript of presentation. History of Programming Languages. Academic Press (published 1981). doi:10.1145/800025.1198368. ISBN 0127450408.

Sammet, Jean E. (23 July 2004). "COBOL". In Reilly, Edwin D. (ed.). Concise Encyclopedia of Computer Science. Wiley. ISBN 978-0470090954. OCLC 249810423.

Shneiderman, B. (October 1985). "The Relationship Between COBOL and Computer Science". Annals of the History of Computing. 7 (4): 348-352. doi:10.1109/MAHC.1985.10041. S2CID 1009406.

# data[].attributes.attachment_link.description
Paradigm Procedural, imperative, object-oriented, generic Designed by Howard Bromberg, Norman Discount, Vernon Reeves, William Selden, Gertrude Tierney, with indirect influence from Jean E.

# data[].attributes.attachment_link.readable_text
Administración de sistemas, programación en red, desarrollo de proyectos web o de programas CGI ( Common Gateway Interface)... Perl es un lenguaje de propósito general que en la actualidad está disfrutando de una segunda juventud, se utiliza cada vez más en el desarrollo de proyectos. Hoy en día es un lenguaje atractivo porque es una sintaxis pseudo-compilada que se distribuye de forma gratuita y se puede ejecutar en cualquier plataforma si se dispone de un intérprete para Perl.

Las características fundamentales de este lenguaje de programación son:

- Fácil de usar y de programación rápida.

- Su curva de aprendizaje es alta.

- Dispone de librerías y módulos, lo que aumenta su funcionalidad.

- Soporta programación estructurada, orientada a objetos y funcional.

- Tiene un sistema de procesamiento de texto.

- Se puede utilizar en varios entornos: Windows, Mac OS X y Linux.

Este es un listado de algunas de las herramientas más útiles para los desarrolladores en Perl:
1. Komodo IDE Entorno de Desarrollo Integrado:
Este Entorno de Desarrollo Integrado de ActiveState permite no sólo la programación en Perl, también en otros lenguajes de programación como Python, PHP, Go, HTML o Node.js. La idea de Komodo IDE es facilitar a los programadores el desarrollo de interfaces en Perl gracias a características como su control de versiones, su depurador gráfico, su sistema de prueba unitaria, su ayuda en línea...

Los últimos avances en Komodo IDE lo convierten en una herramienta mucho más cómoda y funcional para la mayoría de los desarrolladores de software:

- La versión 9.2. dispone de un panel que permite reducir al máximo las interrupciones y la pérdida de tiempo en el trabajo de programación. Se pueden visualizar los nombres de instancias directamente en ese panel.

- Komodo IDE tiene ya un sistema de colaboración inteligente, que alerta a cada miembro del equipo de qué compañeros de desarrollo se encuentran editando código en ese momento dentro del IDE.

- Corrección rápida y automática de errores de sintaxis desde el editor.

- El nuevo instalador de paquetes permite incorporar nuevas funcionalidades al IDE en función de las características de cada proyecto.

- Introduce el modo enfoque, que facilita la ocultación de elementos dentro del IDE para que el programador se concentre en la escritura de código.

- Interfaz de usuario mejorada.

- Gestor de paquetes integrado.

- Creación de configuraciones personalizadas para el trabajo diario.

- Nuevo sistema de notificaciones.

- Combinaciones de colores y temas variadas.
EPIC (Perl Editor and IDE for Eclipse)
- Revisión de su API: nuevo SDK para desarrolladores.

EPIC es un Entorno de Desarrollo Integrado de código abierto, que incluye un editor y un depurador propios, basado en la plataforma Eclipse y compatible con varios sistemas: Windows, Linux y Mac OS X. Es un IDE bastante habitual en el desarrollo de proyectos de secuencias de comandos CGI y cuya integración con la Interfaz Gráfica de Usuario (GUI) de Eclipse le da un valor añadido interesante.

Sus características principales son:

- Coloración configurable de elementos sintácticos.

- Detección automática de errores de sintaxis durante la programación y en el momento de guardar archivos.

- Autocompletado de variables.
2. Editores de texto Emacs
- Sistema de control de ejecución.

- Función de exportación HTML.

Emacs es un editor de texto extensible, personalizable, auto-documentado y de tiempo real para el entorno Linux. Fue escrito en 1975 por Richard Stallman y Guy Steele, dos referencias del software libre. En estos momentos existen dos versiones de este editor de texto: GNU Emacs, desarrollada por Stallman en 1984 y mantenida desde entonces por el Proyecto GNU Emacs; y XEmacs, otra versión del editor basada en los trabajos de la primera, lanzada en 1991.

Algunas de sus características más importantes son:

- Sistema sencillo de edición de texto: comandos para manipular palabras y párrafos, resaltado de sintaxis para favorecer la lectura del código y ejecución de macros de teclado a través de comandos personalizados.

- El editor de texto es modificable al gusto del propio desarrollador mediante la incorporación de fragmentos de código Emacs Lisp (bibliotecas, librerías, paquetes o extensiones de código) con nuevas funcionalidades:

- Calc: una calculadora que se incorpora dentro del editor.

- Emacs/W3: un navegador web.
UltraEdit
- ERC: un cliente IRC.

- MULE: permite la edición de texto escrito en varios lenguajes.

UltraEdit es un editor de texto avanzado para Perl, PHP, Java y JavaScript. Con este editor, los programadores de código pueden manipular archivos de más de 4 GB. Es una herramienta de pago, pero dispone de un periodo de prueba gratuito.

Algunas de sus características fundamentales son:

- Resaltado de sintaxis configurable.

- Soporte FTP completo.

- Navegador FTP multipanel.

- Plantillas inteligentes.

- Función de plegado de código, que permite al programador esconder las partes de código que no necesita visualizar.

- Lista completa de funciones: es posible ver todas las funciones en una vista de árbol, incluidos todos los subgrupos ( parámetros, variables, propiedades...).

- Buscador incorporado.

- Añadir comentarios en línea o en bloque en el texto seleccionado.

- Macros editables.

- Integración de lenguaje de scripting para automatización de tareas.
TextMate
- Diseño de temas del editor personalizables.

- Sistema de copia de seguridad y almacenamiento automático.

TextMate es una editor de texto con Interfaz Gráfica de Usuario (GUI) para sistema operativo Mac OS X. Fue desarrollado por Allan Odgaard. Dispone de una gran comunidad que lanza contribuciones públicas para personalizar el editor en función de las necesidades de cada proyecto. Un editor en mejora continua.
- Búsqueda y reemplazo de texto por expresiones regulares. - Esquema dinámico para trabajar con varios archivos. - Bloques de código plegable. - Histórico de portapapeles. - Grabación de macros sin necesidades de programación. - Navegación entre archivos mediante el uso de pestañas. - Editor personalizable a través de varios temas. 3. Frameworks para Perl Mojolicious
Algunas de sus funciones más destacadas:
Catalyst
- Función de buscar y reemplazar texto en un proyecto.

Mojolicious es un framework web en tiempo real para desarrolladores en Perl. Fue creado por Sebastian Riedel. Este marco de desarrollo usa el patrón estándar Modelo-Vista-Controlador (MVC) y soporta CGI, FastCGI y PSGI. Es un framework que también soporta rutas RESTful, extensiones, cookies firmadas, test unitarios, servidor de ficheros estáticos, plantillas, formato JSON... Además, el sitio web de este framework dispone de una documentación muy útil para iniciados.

Catalyst es un framework web de código abierto que utiliza un patrón Modelo-Vista-Controlador, multiplataforma y con una amplia documentación gracias a una gran comunidad de desarrolladores que mantiene una mejora continua de este marco de desarrollo de software. Está inspirado en Ruby on Rails.

# data[].attributes.attachment_link.title
Herramientas básicas para desarrolladores en Perl

# data[].attributes.attachment_link.description
Perl es un lenguaje de programación de propósito general, fácil de usar y que facilita la escritura rápida de código a los desarrolladores. Además, dispone de numerosas librerías y módulos que amplían mucho su funcionalidad para el desarrollo de proyectos web.

# data[].attributes.attachment_link.description
The Perl languages borrow features from other programming languages including C, shell script ( sh), AWK, and sed; Wall also alludes to Basic and Lisp in the introduction to Learning Perl (Schwartz & Christiansen) and so on. They provide powerful text processing facilities without the arbitrary data-length limits of many contemporary Unix commandline tools, facilitating easy manipulation of text files.

# data[].attributes.attachment_link.title
Tutorial Python 1: Introducción al Lenguaje de Programación

# data[].attributes.attachment_link.readable_text
Dev-C++ es un entorno de desarrollo para los lenguajes C y C++. Además del consabido editor, añade un compilador y otras utilidades menos evidentes que lo convierten en un gran aliado en la programación.

Dev-C++ integra utilidades como un debugger, un explorador de clases y paquetes, un depurador de código y un asistente de proyecto. Todo ello junto al completo editor con realce de sintaxis y predictor de expresiones.

La inclusión de bibliotecas estáticas y DLL, además de otras plantillas de Dev-C++, ayuda a que los primeros pasos en la programación sean más sencillos.

El PackMan ahora acepta archivos ZIP Mejorada la ayuda Mejorado el aspecto visual WebUpdate ahora puede divulgar problemas de la instalación del PackMan Cambiado el aspecto visual de los iconos de los archivos asociados al programa Instalador mejorado Numerosas pequeñas mejoras

Cambios

El PackMan ahora acepta archivos ZIP Mejorada la ayuda Mejorado el aspecto visual WebUpdate ahora puede divulgar problemas de la instalación del PackMan Cambiado el aspecto visual de los iconos de los archivos asociados al programa Instalador mejorado Numerosas pequeñas mejoras

# data[].attributes.attachment_link.description
Dev-C++ es un entorno de desarrollo para los lenguajes C y C++. Además del consabido editor, añade un compilador y otras utilidades menos evidentes que lo convierten en un gran aliado en la programación. Dev-C++ integra utilidades como un debugger, un explorador de clases y paquetes, un depurador de código y un asistente de proyecto.

# data[].attributes.attachment_link.readable_text
Paradigms

Multi-paradigm: procedural, imperative, functional, object-oriented, generic, modular

Family
C

Designed by
Bjarne Stroustrup

Developer

ISO/IEC JTC 1 (Joint Technical Committee 1) / SC 22 (Subcommittee 22) / WG 21 (Working Group 21)

First appeared

1985; 39 years ago

Stable release

C++20 (ISO/IEC 14882:2020) / 15 December 2020; 3 years ago

Preview release

C++23 / 19 March 2023; 9 months ago

Typing discipline

Static, strong, nominative, partially inferred

OS
Cross-platform

Filename extensions

.C, .cc, .cpp, .cxx, .c++, .h, .H, .hh, .hpp, .hxx, .h++ .cppm, .ixx,[1]

Website

isocpp.org

GCC, LLVM Clang, Microsoft Visual C++, Embarcadero C++Builder, Intel C++ Compiler, IBM XL C++, EDG

Ada, ALGOL 68,[2] BCPL,[3] C, CLU,[2] F#,[4][note 1] ML, Mesa,[2] Modula-2,[2] Simula, Smalltalk[2]

Ada 95, C#,[5] C99, Carbon, Chapel,[6] Clojure,[7] D, Java,[8] JS++,[9] Lua,[10] Nim,[11] Objective-C++, Perl, PHP, Python,[12] Rust,[13] Seed7

C++ (, pronounced " C plus plus" and sometimes abbreviated as CPP) is a high-level, general-purpose programming language created by Danish computer scientist Bjarne Stroustrup. First released in 1985 as an extension of the C programming language, it has since expanded significantly over time; as of 1997, C++ has object-oriented, generic, and functional features, in addition to facilities for low-level memory manipulation. It is almost always implemented as a compiled language, and many vendors provide C++ compilers, including the Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle, and IBM.

C++ was designed with systems programming and embedded, resource-constrained software and large systems in mind, with performance, efficiency, and flexibility of use as its design highlights. C++ has also been found useful in many other contexts, with key strengths being software infrastructure and resource-constrained applications, including desktop applications, video games, servers (e.g., e-commerce, web search, or databases), and performance-critical applications (e.g., telephone switches or space probes).

C++ is standardized by the International Organization for Standardization (ISO), with the latest standard version ratified and published by ISO in December 2020 as ISO/IEC 14882:2020 (informally known as C++20). The C++ programming language was initially standardized in 1998 as ISO/IEC 14882:1998, which was then amended by the C++03, C++11, C++14, and C++17 standards. The current C++20 standard supersedes these with new features and an enlarged standard library. Before the initial standardization in 1998, C++ was developed by Stroustrup at Bell Labs since 1979 as an extension of the C language; he wanted an efficient and flexible language similar to C that also provided high-level features for program organization. Since 2012, C++ has been on a three-year release schedule with C++23 as the next planned standard.

Bjarne Stroustrup, the creator of C++, in his AT&T New Jersey office, c. 2000

In 1979, Bjarne Stroustrup, a Danish computer scientist, began work on "", the predecessor to C++. The motivation for creating a new language originated from Stroustrup's experience in programming for his PhD thesis. Stroustrup found that Simula had features that were very helpful for large software development, but the language was too slow for practical use, while BCPL was fast but too low-level to be suitable for large software development. When Stroustrup started working in AT&T Bell Labs, he had the problem of analyzing the UNIX kernel with respect to distributed computing. Remembering his PhD experience, Stroustrup set out to enhance the C language with Simula-like features. C was chosen because it was general-purpose, fast, portable, and widely used. In addition to C and Simula's influences, other languages influenced this new language, including ALGOL 68, Ada, CLU, and ML.

Initially, Stroustrup's "C with Classes" added features to the C compiler, Cpre, including classes, derived classes, strong typing, inlining, and default arguments.

A quiz on C++11 features being given in Paris in 2015

In 1982, Stroustrup started to develop a successor to C with Classes, which he named "C++" ( being the increment operator in C) after going through several other names. New features were added, including virtual functions, function name and operator overloading, references, constants, type-safe free-store memory allocation (new/delete), improved type checking, and BCPL-style single-line comments with two forward slashes (). Furthermore, Stroustrup developed a new, standalone compiler for C++, Cfront.

In 1984, Stroustrup implemented the first stream input/output library. The idea of providing an output operator rather than a named output function was suggested by Doug McIlroy (who had previously suggested Unix pipes).

In 1985, the first edition of The C++ Programming Language was released, which became the definitive reference for the language, as there was not yet an official standard. The first commercial implementation of C++ was released in October of the same year.

In 1989, C++ 2.0 was released, followed by the updated second edition of The C++ Programming Language in 1991. New features in 2.0 included multiple inheritance, abstract classes, static member functions, const member functions, and protected members. In 1990, The Annotated C++ Reference Manual was published. This work became the basis for the future standard. Later feature additions included templates, exceptions, namespaces, new casts, and a Boolean type.

In 1998, C++98 was released, standardizing the language, and a minor update ( C++03) was released in 2003.

After C++98, C++ evolved relatively slowly until, in 2011, the C++11 standard was released, adding numerous new features, enlarging the standard library further, and providing more facilities to C++ programmers. After a minor C++14 update released in December 2014, various new additions were introduced in C++17. After becoming finalized in February 2020, a draft of the C++20 standard was approved on 4 September 2020, and officially published on 15 December 2020.

On January 3, 2018, Stroustrup was announced as the 2018 winner of the Charles Stark Draper Prize for Engineering, "for conceptualizing and developing the C++ programming language".

As of December 2022, C++ ranked third on the TIOBE index, surpassing Java for the first time in the history of the index. It ranks third, after Python and C.

According to Stroustrup, "the name signifies the evolutionary nature of the changes from C." This name is credited to Rick Mascitti (mid-1983) and was first used in December 1983. When Mascitti was questioned informally in 1992 about the naming, he indicated that it was given in a tongue-in-cheek spirit. The name comes from C's operator (which increments the value of a variable) and a common naming convention of using "+" to indicate an enhanced computer program.

During C++'s development period, the language had been referred to as "new C" and "C with Classes" before acquiring its final name.

Throughout C++'s life, its development and evolution has been guided by a set of principles:

It must be driven by actual problems and its features should be immediately useful in real world programs.

Every feature should be implementable (with a reasonably obvious way to do so).

Programmers should be free to pick their own programming style, and that style should be fully supported by C++.

Allowing a useful feature is more important than preventing every possible misuse of C++.

It should provide facilities for organising programs into separate, well-defined parts, and provide facilities for combining separately developed parts.

No implicit violations of the type system (but allow explicit violations; that is, those explicitly requested by the programmer).

User-created types need to have the same support and performance as built-in types.

Unused features should not negatively impact created executables (e.g. in lower performance).

There should be no language beneath C++ (except assembly language).

C++ should work alongside other existing programming languages, rather than fostering its own separate and incompatible programming environment.

If the programmer's intent is unknown, allow the programmer to specify it by providing manual control.

Scene during the C++ standards committee meeting in Stockholm in 1996

C++ is standardized by an ISO working group known as JTC1/SC22/WG21. So far, it has published six revisions of the C++ standard and is currently working on the next revision, C++23.

In 1998, the ISO working group standardized C++ for the first time as ISO/IEC 14882:1998, which is informally known as C++98. In 2003, it published a new version of the C++ standard called ISO/IEC 14882:2003, which fixed problems identified in C++98.

The next major revision of the standard was informally referred to as "C++0x", but it was not released until 2011. C++11 (14882:2011) included many additions to both the core language and the standard library.

In 2014, C++14 (also known as C++1y) was released as a small extension to C++11, featuring mainly bug fixes and small improvements. The Draft International Standard ballot procedures completed in mid-August 2014.

After C++14, a major revision C++17, informally known as C++1z, was completed by the ISO C++ committee in mid July 2017 and was approved and published in December 2017.

As part of the standardization process, ISO also publishes technical reports and specifications:

ISO/IEC TR 18015:2006 on the use of C++ in embedded systems and on performance implications of C++ language and library features,

ISO/IEC TR 19768:2007 (also known as the C++ Technical Report 1) on library extensions mostly integrated into C++11,

ISO/IEC TS 19570:2015 on parallel versions of the standard library algorithms, integrated into C++17,

ISO/IEC TS 19217:2015 on the C++ concepts, integrated into C++20,

ISO/IEC TS 19568:2017 on a new set of general-purpose library extensions,

ISO/IEC TS 19216:2018 on the networking library,

ISO/IEC TS 19570:2018 on a new set of library extensions for parallelism, and

ISO/IEC TS 23619:2021 on new extensions for reflection.

More technical specifications are in development and pending approval, including new set of concurrency extensions.

The C++ language has two main components: a direct mapping of hardware features provided primarily by the C subset, and zero-overhead abstractions based on those mappings. Stroustrup describes C++ as "a light-weight abstraction programming language [designed] for building and using efficient and elegant abstractions"; and "offering both hardware access and abstraction is the basis of C++. Doing it efficiently is what distinguishes it from other languages."

C++ inherits most of C's syntax. The following is Bjarne Stroustrup's version of the Hello world program that uses the C++ Standard Library stream facility to write a message to standard output:

As in C, C++ supports four types of memory management: static storage duration objects, thread storage duration objects, automatic storage duration objects, and dynamic storage duration objects.

Static storage duration objects are created before main() is entered (see exceptions below) and destroyed in reverse order of creation after main() exits. The exact order of creation is not specified by the standard (though there are some rules defined below) to allow implementations some freedom in how to organize their implementation. More formally, objects of this type have a lifespan that "shall last for the duration of the program".

Static storage duration objects are initialized in two phases. First, "static initialization" is performed, and only after all static initialization is performed, "dynamic initialization" is performed. In static initialization, all objects are first initialized with zeros; after that, all objects that have a constant initialization phase are initialized with the constant expression (i.e. variables initialized with a literal or constexpr). Though it is not specified in the standard, the static initialization phase can be completed at compile time and saved in the data partition of the executable. Dynamic initialization involves all object initialization done via a constructor or function call (unless the function is marked with constexpr, in C++11). The dynamic initialization order is defined as the order of declaration within the compilation unit (i.e. the same file). No guarantees are provided about the order of initialization between compilation units.

Variables of this type are very similar to static storage duration objects. The main difference is the creation time is just prior to thread creation and destruction is done after the thread has been joined.

The most common variable types in C++ are local variables inside a function or block, and temporary variables. The common feature about automatic variables is that they have a lifetime that is limited to the scope of the variable. They are created and potentially initialized at the point of declaration (see below for details) and destroyed in the reverse order of creation when the scope is left. This is implemented by allocation on the stack.

Local variables are created as the point of execution passes the declaration point. If the variable has a constructor or initializer this is used to define the initial state of the object. Local variables are destroyed when the local block or function that they are declared in is closed. C++ destructors for local variables are called at the end of the object lifetime, allowing a discipline for automatic resource management termed RAII, which is widely used in C++.

Member variables are created when the parent object is created. Array members are initialized from 0 to the last member of the array in order. Member variables are destroyed when the parent object is destroyed in the reverse order of creation. i.e. If the parent is an "automatic object" then it will be destroyed when it goes out of scope which triggers the destruction of all its members.

Temporary variables are created as the result of expression evaluation and are destroyed when the statement containing the expression has been fully evaluated (usually at the ; at the end of a statement).

These objects have a dynamic lifespan and can be created directly with a call to and destroyed explicitly with a call to . C++ also supports malloc and free, from C, but these are not compatible with and . Use of returns an address to the allocated memory. The C++ Core Guidelines advise against using directly for creating dynamic objects in favor of smart pointers through for single ownership and for reference-counted multiple ownership, which were introduced in C++11.

C++ templates enable generic programming. C++ supports function, class, alias, and variable templates. Templates may be parameterized by types, compile-time constants, and other templates. Templates are implemented by instantiation at compile-time. To instantiate a template, compilers substitute specific arguments for a template's parameters to generate a concrete function or class instance. Some substitutions are not possible; these are eliminated by an overload resolution policy described by the phrase " Substitution failure is not an error" (SFINAE). Templates are a powerful tool that can be used for generic programming, template metaprogramming, and code optimization, but this power implies a cost. Template use may increase object code size, because each template instantiation produces a copy of the template code: one for each set of template arguments, however, this is the same or smaller amount of code that would be generated if the code were written by hand. This is in contrast to run-time generics seen in other languages (e.g., Java) where at compile-time the type is erased and a single template body is preserved.

Templates are different from macros: while both of these compile-time language features enable conditional compilation, templates are not restricted to lexical substitution. Templates are aware of the semantics and type system of their companion language, as well as all compile-time type definitions, and can perform high-level operations including programmatic flow control based on evaluation of strictly type-checked parameters. Macros are capable of conditional control over compilation based on predetermined criteria, but cannot instantiate new types, recurse, or perform type evaluation and in effect are limited to pre-compilation text-substitution and text-inclusion/exclusion. In other words, macros can control compilation flow based on pre-defined symbols but cannot, unlike templates, independently instantiate new symbols. Templates are a tool for static polymorphism (see below) and generic programming.

In addition, templates are a compile-time mechanism in C++ that is Turing-complete, meaning that any computation expressible by a computer program can be computed, in some form, by a template metaprogram prior to runtime.

In summary, a template is a compile-time parameterized function or class written without knowledge of the specific arguments used to instantiate it. After instantiation, the resulting code is equivalent to code written specifically for the passed arguments. In this manner, templates provide a way to decouple generic, broadly applicable aspects of functions and classes (encoded in templates) from specific aspects (encoded in template parameters) without sacrificing performance due to abstraction.

C++ introduces object-oriented programming (OOP) features to C. It offers classes, which provide the four features commonly present in OOP (and some non-OOP) languages: abstraction, encapsulation, inheritance, and polymorphism. One distinguishing feature of C++ classes compared to classes in other programming languages is support for deterministic destructors, which in turn provide support for the Resource Acquisition is Initialization (RAII) concept.

Encapsulation is the hiding of information to ensure that data structures and operators are used as intended and to make the usage model more obvious to the developer. C++ provides the ability to define classes and functions as its primary encapsulation mechanisms. Within a class, members can be declared as either public, protected, or private to explicitly enforce encapsulation. A public member of the class is accessible to any function. A private member is accessible only to functions that are members of that class and to functions and classes explicitly granted access permission by the class ("friends"). A protected member is accessible to members of classes that inherit from the class in addition to the class itself and any friends.

The object-oriented principle ensures the encapsulation of all and only the functions that access the internal representation of a type. C++ supports this principle via member functions and friend functions, but it does not enforce it. Programmers can declare parts or all of the representation of a type to be public, and they are allowed to make public entities not part of the representation of a type. Therefore, C++ supports not just object-oriented programming, but other decomposition paradigms such as modular programming.

It is generally considered good practice to make all data private or protected, and to make public only those functions that are part of a minimal interface for users of the class. This can hide the details of data implementation, allowing the designer to later fundamentally change the implementation without changing the interface in any way.

Inheritance allows one data type to acquire properties of other data types. Inheritance from a base class may be declared as public, protected, or private. This access specifier determines whether unrelated and derived classes can access the inherited public and protected members of the base class. Only public inheritance corresponds to what is usually meant by "inheritance". The other two forms are much less frequently used. If the access specifier is omitted, a "class" inherits privately, while a "struct" inherits publicly. Base classes may be declared as virtual; this is called virtual inheritance. Virtual inheritance ensures that only one instance of a base class exists in the inheritance graph, avoiding some of the ambiguity problems of multiple inheritance.

Multiple inheritance is a C++ feature allowing a class to be derived from more than one base class; this allows for more elaborate inheritance relationships. For example, a "Flying Cat" class can inherit from both "Cat" and "Flying Mammal". Some other languages, such as C# or Java, accomplish something similar (although more limited) by allowing inheritance of multiple interfaces while restricting the number of base classes to one (interfaces, unlike classes, provide only declarations of member functions, no implementation or member data). An interface as in C# and Java can be defined in C++ as a class containing only pure virtual functions, often known as an abstract base class or "ABC". The member functions of such an abstract base class are normally explicitly defined in the derived class, not inherited implicitly. C++ virtual inheritance exhibits an ambiguity resolution feature called dominance.

C++ provides more than 35 operators, covering basic arithmetic, bit manipulation, indirection, comparisons, logical operations and others. Almost all operators can be overloaded for user-defined types, with a few notable exceptions such as member access (. and .*) as well as the conditional operator. The rich set of overloadable operators is central to making user-defined types in C++ seem like built-in types.

Overloadable operators are also an essential part of many advanced C++ programming techniques, such as smart pointers. Overloading an operator does not change the precedence of calculations involving the operator, nor does it change the number of operands that the operator uses (any operand may however be ignored by the operator, though it will be evaluated prior to execution). Overloaded "&&" and "||" operators lose their short-circuit evaluation property.

Polymorphism enables one common interface for many implementations, and for objects to act differently under different circumstances.

C++ supports several kinds of static (resolved at compile-time) and dynamic (resolved at run-time) polymorphisms, supported by the language features described above. Compile-time polymorphism does not allow for certain run-time decisions, while runtime polymorphism typically incurs a performance penalty.

Function overloading allows programs to declare multiple functions having the same name but with different arguments (i.e. ad hoc polymorphism). The functions are distinguished by the number or types of their formal parameters. Thus, the same function name can refer to different functions depending on the context in which it is used. The type returned by the function is not used to distinguish overloaded functions and differing return types would result in a compile-time error message.

When declaring a function, a programmer can specify for one or more parameters a default value. Doing so allows the parameters with defaults to optionally be omitted when the function is called, in which case the default arguments will be used. When a function is called with fewer arguments than there are declared parameters, explicit arguments are matched to parameters in left-to-right order, with any unmatched parameters at the end of the parameter list being assigned their default arguments. In many cases, specifying default arguments in a single function declaration is preferable to providing overloaded function definitions with different numbers of parameters.

Templates in C++ provide a sophisticated mechanism for writing generic, polymorphic code (i.e. parametric polymorphism). In particular, through the curiously recurring template pattern, it is possible to implement a form of static polymorphism that closely mimics the syntax for overriding virtual functions. Because C++ templates are type-aware and Turing-complete, they can also be used to let the compiler resolve recursive conditionals and generate substantial programs through template metaprogramming. Contrary to some opinion, template code will not generate a bulk code after compilation with the proper compiler settings.

Inheritance

Variable pointers and references to a base class type in C++ can also refer to objects of any derived classes of that type. This allows arrays and other kinds of containers to hold pointers to objects of differing types (references cannot be directly held in containers). This enables dynamic (run-time) polymorphism, where the referred objects can behave differently, depending on their (actual, derived) types.

C++ also provides the dynamic_cast operator, which allows code to safely attempt conversion of an object, via a base reference/pointer, to a more derived type: downcasting. The attempt is necessary as often one does not know which derived type is referenced. ( Upcasting, conversion to a more general type, can always be checked/performed at compile-time via static_cast , as ancestral classes are specified in the derived class's interface, visible to all callers.) dynamic_cast relies on run-time type information (RTTI), metadata in the program that enables differentiating types and their relationships. If a dynamic_cast to a pointer fails, the result is the constant, whereas if the destination is a reference (which cannot be null), the cast throws an exception. Objects known to be of a certain derived type can be cast to that with static_cast , bypassing RTTI and the safe runtime type-checking of dynamic_cast , so this should be used only if the programmer is very confident the cast is, and will always be, valid.

Virtual member functions

Ordinarily, when a function in a derived class overrides a function in a base class, the function to call is determined by the type of the object. A given function is overridden when there exists no difference in the number or type of parameters between two or more definitions of that function. Hence, at compile time, it may not be possible to determine the type of the object and therefore the correct function to call, given only a base class pointer; the decision is therefore put off until runtime. This is called dynamic dispatch. Virtual member functions or methods allow the most specific implementation of the function to be called, according to the actual run-time type of the object. In C++ implementations, this is commonly done using virtual function tables. If the object type is known, this may be bypassed by prepending a fully qualified class name before the function call, but in general calls to virtual functions are resolved at run time.

In addition to standard member functions, operator overloads and destructors can be virtual. An inexact rule based on practical experience states that if any function in the class is virtual, the destructor should be as well. As the type of an object at its creation is known at compile time, constructors, and by extension copy constructors, cannot be virtual. Nonetheless, a situation may arise where a copy of an object needs to be created when a pointer to a derived object is passed as a pointer to a base object. In such a case, a common solution is to create a (or similar) virtual function that creates and returns a copy of the derived class when called.

A member function can also be made "pure virtual" by appending it with after the closing parenthesis and before the semicolon. A class containing a pure virtual function is called an abstract class. Objects cannot be created from an abstract class; they can only be derived from. Any derived class inherits the virtual function as pure and must provide a non-pure definition of it (and all other pure virtual functions) before objects of the derived class can be created. A program that attempts to create an object of a class with a pure virtual member function or inherited pure virtual member function is ill-formed.

C++ provides support for anonymous functions, also known as lambda expressions, with the following form:

Since C++20, the keyword is optional for template parameters of lambda expressions:

If the lambda takes no parameters, and no return type or other specifiers are used, the () can be omitted; that is,

The return type of a lambda expression can be automatically inferred, if possible; e.g.:

The list supports the definition of closures. Such lambda expressions are defined in the standard as syntactic sugar for an unnamed function object.

Exception handling is used to communicate the existence of a runtime problem or error from where it was detected to where the issue can be handled. It permits this to be done in a uniform manner and separately from the main code, while detecting all errors. Should an error occur, an exception is thrown (raised), which is then caught by the nearest suitable exception handler. The exception causes the current scope to be exited, and also each outer scope (propagation) until a suitable handler is found, calling in turn the destructors of any objects in these exited scopes. At the same time, an exception is presented as an object carrying the data about the detected problem.

Some C++ style guides, such as Google's, LLVM's, and Qt's, forbid the usage of exceptions.

The exception-causing code is placed inside a block. The exceptions are handled in separate blocks (the handlers); each block can have multiple exception handlers, as it is visible in the example below.

It is also possible to raise exceptions purposefully, using the keyword; these exceptions are handled in the usual way. In some cases, exceptions cannot be used due to technical reasons. One such example is a critical component of an embedded system, where every operation must be guaranteed to complete within a specified amount of time. This cannot be determined with exceptions as no tools exist to determine the maximum time required for an exception to be handled.

Unlike signal handling, in which the handling function is called from the point of failure, exception handling exits the current scope before the catch block is entered, which may be located in the current function or any of the previous function calls currently on the stack.

The draft "Working Paper" standard that became approved as C++98; half of its size was devoted to the C++ Standard Library.

The C++ standard consists of two parts: the core language and the standard library. C++ programmers expect the latter on every major implementation of C++; it includes aggregate types ( vectors, lists, maps, sets, queues, stacks, arrays, tuples), algorithms (find, for_each, binary_search, random_shuffle, etc.), input/output facilities ( iostream, for reading from and writing to the console and files), filesystem library, localisation support, smart pointers for automatic memory management, regular expression support, multi-threading library, atomics support (allowing a variable to be read or written to by at most one thread at a time without any external synchronisation), time utilities (measurement, getting current time, etc.), a system for converting error reporting that does not use C++ exceptions into C++ exceptions, a random number generator, and a slightly modified version of the C standard library (to make it comply with the C++ type system).

A large part of the C++ library is based on the Standard Template Library (STL). Useful tools provided by the STL include containers as the collections of objects (such as vectors and lists), iterators that provide array-like access to containers, and algorithms that perform operations such as searching and sorting.

Furthermore, (multi)maps ( associative arrays) and (multi)sets are provided, all of which export compatible interfaces. Therefore, using templates it is possible to write generic algorithms that work with any container or on any sequence defined by iterators. As in C, the features of the library are accessed by using the directive to include a standard header. The C++ Standard Library provides 105 standard headers, of which 27 are deprecated.

The standard incorporates the STL that was originally designed by Alexander Stepanov, who experimented with generic algorithms and containers for many years. When he started with C++, he finally found a language where it was possible to create generic algorithms (e.g., STL sort) that perform even better than, for example, the C standard library qsort, thanks to C++ features like using inlining and compile-time binding instead of function pointers. The standard does not refer to it as "STL", as it is merely a part of the standard library, but the term is still widely used to distinguish it from the rest of the standard library (input/output streams, internationalization, diagnostics, the C library subset, etc.).

Most C++ compilers, and all major ones, provide a standards-conforming implementation of the C++ standard library.

C++ Core Guidelines

The C++ Core Guidelines are an initiative led by Bjarne Stroustrup, the inventor of C++, and Herb Sutter, the convener and chair of the C++ ISO Working Group, to help programmers write 'Modern C++' by using best practices for the language standards C++11 and newer, and to help developers of compilers and static checking tools to create rules for catching bad programming practices.

The main aim is to efficiently and consistently write type and resource safe C++.

The Core Guidelines were announced in the opening keynote at CPPCon 2015.

The Guidelines are accompanied by the Guideline Support Library (GSL), a header only library of types and functions to implement the Core Guidelines and static checker tools for enforcing Guideline rules.

To give compiler vendors greater freedom, the C++ standards committee decided not to dictate the implementation of name mangling, exception handling, and other implementation-specific features. The downside of this decision is that object code produced by different compilers is expected to be incompatible. There were, however, attempts to standardize compilers for particular machines or operating systems (for example C++ ABI), though they seem to be largely abandoned now.

C++ is often considered to be a superset of C but this is not strictly true. Most C code can easily be made to compile correctly in C++ but there are a few differences that cause some valid C code to be invalid or behave differently in C++. For example, C allows implicit conversion from to other pointer types but C++ does not (for type safety reasons). Also, C++ defines many new keywords, such as and , which may be used as identifiers (for example, variable names) in a C program.

Some incompatibilities have been removed by the 1999 revision of the C standard ( C99), which now supports C++ features such as line comments () and declarations mixed with code. On the other hand, C99 introduced a number of new features that C++ did not support that were incompatible or redundant in C++, such as variable-length arrays, native complex-number types (however, the class in the C++ standard library provides similar functionality, although not code-compatible), designated initializers, compound literals, and the keyword. Some of the C99-introduced features were included in the subsequent version of the C++ standard, C++11 (out of those which were not redundant). However, the C++11 standard introduces new incompatibilities, such as disallowing assignment of a string literal to a character pointer, which remains valid C.

To intermix C and C++ code, any function declaration or definition that is to be called from/used both in C and C++ must be declared with C linkage by placing it within an block. Such a function may not rely on features depending on name mangling (i.e., function overloading).

One of the most often criticised points of C++ is its perceived complexity as a language, with the criticism that a large number of non-orthogonal features in practice necessitates restricting code to a subset of C++, thus eschewing the readability benefits of common style and idioms. As expressed by Joshua Bloch:

I think C++ was pushed well beyond its complexity threshold, and yet there are a lot of people programming it. But what you do is you force people to subset it. So almost every shop that I know of that uses C++ says, "Yes, we're using C++ but we're not doing multiple-implementation inheritance and we're not using operator overloading." There are just a bunch of features that you're not going to use because the complexity of the resulting code is too high. And I don't think it's good when you have to start doing that. You lose this programmer portability where everyone can read everyone else's code, which I think is such a good thing.

Donald Knuth (1993, commenting on pre-standardized C++), who said of Edsger Dijkstra that "to think of programming in C++" "would make him physically ill":

The problem that I have with them today is that... C++ is too complicated. At the moment, it's impossible for me to write portable code that I believe would work on lots of different systems, unless I avoid all exotic features. Whenever the C++ language designers had two competing ideas as to how they should solve some problem, they said "OK, we'll do them both". So the language is too baroque for my taste.

Ken Thompson, who was a colleague of Stroustrup at Bell Labs, gives his assessment:

It certainly has its good points. But by and large I think it's a bad language. It does a lot of things half well and it's just a garbage heap of ideas that are mutually exclusive. Everybody I know, whether it's personal or corporate, selects a subset and these subsets are different. So it's not a good language to transport an algorithm-to say, "I wrote it; here, take it." It's way too big, way too complex. And it's obviously built by a committee. Stroustrup campaigned for years and years and years, way beyond any sort of technical contributions he made to the language, to get it adopted and used. And he sort of ran all the standards committees with a whip and a chair. And he said "no" to no one. He put every feature in that language that ever existed. It wasn't cleanly designed-it was just the union of everything that came along. And I think it suffered drastically from that.

However Brian Kernighan, also a colleague at Bell Labs, disputes this assessment:

C++ has been enormously influential. ... Lots of people say C++ is too big and too complicated etc. etc. but in fact it is a very powerful language and pretty much everything that is in there is there for a really sound reason: it is not somebody doing random invention, it is actually people trying to solve real world problems. Now a lot of the programs that we take for granted today, that we just use, are C++ programs.

Stroustrup himself comments that C++ semantics are much cleaner than its syntax: "within C++, there is a much smaller and cleaner language struggling to get out."

Other complaints may include a lack of reflection or garbage collection, long compilation times, perceived feature creep, and verbose error messages, particularly from template metaprogramming.

# data[].attributes.attachment_link.description
Paradigms Multi-paradigm: procedural, imperative, functional, object-oriented, generic, modular Family C Designed by Bjarne Stroustrup Developer ISO/IEC JTC 1 (Joint Technical Committee 1) / SC 22 (Subcommittee 22) / WG 21 (Working Group 21) First appeared 1985; 39 years ago Stable release C++20 (ISO/IEC 14882:2020) / 15 December 2020; 3 years

# data[].attributes.attachment_link.title
Curso Java desde cero  #1 | Introducción e instalación de JDK

# data[].attributes.attachment_link.description
Java is a general-purpose computer-programming language that is concurrent, class-based, object-oriented, and specifically designed to have as few implementation dependencies as possible. It is intended to let application developers " write once, run anywhere" (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.