ada | |
---|---|
Semántica | multi- paradigma : competitivo , generalizado, imperativo , orientado a objetos , programación distribuida , paralelo |
clase de idioma | lenguaje de programación de amplio espectro [d] ,lenguaje de programación multiparadigmaprogramación imperativo,deorientado a objetosylenguaje |
tipo de ejecución | compilado |
Apareció en | 1980 |
Autor |
|
Desarrollador | Ishbia, Jean y S. Tucker Taft [d] [1] |
Liberar | Ada 2012 (10 de diciembre de 2012 ) |
Versión de prueba | Ada 2012 [3] (noviembre de 2011 ) |
sistema de tipos | estático , estricto , seguro , nominativo |
Implementaciones principales |
AdaCore GNAT , MapuSoft Ada-C/C++ Changer (AdaMagic) [4] , Green Hills Software Optimizing Ada 95 compilador, PTC ObjectAda [5] , DDC-I Score |
Dialectos | SPARK , perfil de Ravenscar |
sido influenciado | ALGOL 68 , Pascal , C++ (Ada 95), Smalltalk (Ada 95), Java (Ada 2005), Eiffel (Ada 2012) |
influenciado | C++, Eiffel , M10, M9.3, MAYA, Seed7 , PL/SQL , Nim |
Sitio web | adaic.org |
Archivos multimedia en Wikimedia Commons |
Ada ( Ada ) es un lenguaje de programación creado en 1979-1980 como parte de un proyecto del Departamento de Defensa de los EE. UU. para desarrollar un lenguaje de programación unificado para sistemas integrados (es decir, sistemas de control en tiempo real para sistemas automatizados). En primer lugar, tenían en mente los sistemas de control a bordo de instalaciones militares (barcos, aviones, tanques, misiles, proyectiles, etc.). Los desarrolladores no tenían la tarea de crear un lenguaje universal, por lo que las decisiones tomadas por los autores de Ada deben tomarse en el contexto de las características del área temática elegida. El idioma lleva el nombre de Ada Lovelace .
En su forma original, estandarizada en 1983, Ada es un lenguaje de programación modular estructurado que contiene herramientas de programación de procesos paralelos de alto nivel . La sintaxis de Ada es heredada de lenguajes como Algol o Pascal , pero ampliada y hecha más rigurosa y lógica. Ada es un lenguaje fuertemente tipado , excluye el trabajo con objetos que no tienen tipos , y las conversiones automáticas de tipos se reducen a un mínimo absoluto: se permite convertir implícitamente el valor de un entero común o tipo numérico real a un tipo numérico compatible [6] . En el estándar de 1995, se agregaron al lenguaje herramientas básicas de programación orientada a objetos , en el estándar de 2007 se complementaron estas herramientas, por lo que el Ada moderno es un lenguaje de programación orientado a objetos.
El lenguaje no distingue entre mayúsculas y minúsculas. La sintaxis es similar a Algol, en el espíritu de los lenguajes de finales de la década de 1970: todas las estructuras de control que comienzan con una palabra clave terminan con una palabra clave y le permiten colocar cualquier número de operadores dentro, lo que elimina el inconveniente inherente a menudo criticado. en Algol-60 y Pascal: la necesidad del uso frecuente de "soportes de operador" begin-end. Los detalles de la sintaxis están diseñados para reducir la posibilidad de errores accidentales. Por ejemplo, está prohibido usar varios guiones bajos seguidos en los identificadores. Las palabras clave finales para diferentes estructuras de control son diferentes: una declaración condicional iftermina con una combinación end if, bucles con una combinación end loop, un operador de opción múltiple end case, etc. El manejo de excepciones estructurales se admite en el nivel de sintaxis del lenguaje .
El lenguaje tiene un sistema de tipos desarrollado, tanto integrado como generado por el programador. Hay muchas formas de crear nuevos tipos, el lenguaje admite dos conceptos diferentes: "subtipo" y "tipo derivado". Las variables de un tipo y un subtipo son compatibles, las variables de un tipo y su tipo derivado no lo son.
Los procedimientos y funciones admiten parámetros de entrada y salida, pasando parámetros por nombre y parámetros con valores predeterminados. Se admite la redefinición de procedimientos, funciones y operadores : la creación de varias variantes de un procedimiento, función u operador con el mismo nombre, pero diferentes firmas (tipos y número de parámetros).
Los programas son modulares, el mecanismo para controlar la importación-exportación de descripciones entre módulos incluye dos directivas diferentes: una para conectar otro módulo ( with), la otra para importar sus descripciones ( use). También es posible cambiar el nombre del módulo al importar ( rename); esta opción le permite usar identificadores que son más convenientes para que el programador designe el paquete. Los paquetes (uno de los tipos de módulos) pueden contener un encabezado y una parte privada: lo que contiene no se exporta y no está disponible para otros módulos. Se admite el mecanismo de módulos generalizados (genéricos) : paquetes, procedimientos y funciones que le permiten describir algoritmos de procesamiento de datos sin especificar un tipo específico.
Las estructuras de soporte de programación paralela están integradas en el lenguaje : se admiten los conceptos de "tarea" (un fragmento de programa ejecutado en paralelo), "entrada de tarea" (un medio para sincronizar y comunicar tareas paralelas), se admite el mecanismo de encuentro (un protocolo para la interacción de tareas paralelas a través de la entrada de una de ellas), hay un operador de elección SELECTpara organizar la interacción condicional entre subprocesos (elegir una tarea paralela con la que interactuar, dependiendo de la preparación para una cita y algunas otras condiciones). En principio, las herramientas de programación paralela disponibles en el lenguaje son suficientes para resolver una gran clase de tareas que requieren procesamiento paralelo sin recurrir a herramientas externas, como bibliotecas adicionales o API del sistema operativo.
Para cumplir con los requisitos de confiabilidad, el lenguaje está diseñado de tal manera que se detectan tantos errores como sea posible en la etapa de compilación . Además, uno de los requisitos en el desarrollo del lenguaje fue la más fácil legibilidad de los textos del programa , incluso en detrimento de la facilidad de escritura [7] . El resultado de este enfoque fue una sintaxis algo "pesada" y muchas restricciones que están ausentes en los lenguajes de propósito general más comunes (como C y C ++ ), por ejemplo, el mismo tipo fuerte . Esto llevó a la formación de la idea de Ada como un lenguaje complejo, oscuro e inconveniente de usar [8] .
Programa de muestra ¡Hola, mundo! »:
con Ada.Text_IO ; procedimiento Hola es usar Ada.Text_IO ; begin Put_Line ( "¡Hola, mundo!" ); Fin Hola ;Aquí, para usar la función, el Put_Linepaquete que la contiene se Ada.Text_IOimporta usando la construcción use, lo que hace posible llamar a la función por su nombre sin calificación, especificando el nombre del paquete que contiene la función en la llamada.
El desarrollo del lenguaje fue parte de una competencia internacional organizada y financiada por el Departamento de Defensa de los Estados Unidos . El objetivo del desarrollo fue obtener un lenguaje de programación que pudiera convertirse en uno unificado para el desarrollo de proyectos encargados por el departamento militar, principalmente para el desarrollo de sistemas militares integrados y para grandes computadoras militares (basadas en el procesador iAPX 432 de Intel ). El trabajo comenzó en 1975 con la formación de un conjunto de requisitos lingüísticos que satisfarían plenamente a los desarrolladores de sistemas de este tipo. La lista inicial de requisitos, emitida bajo el nombre en clave "Strawman" ("Paja"), se envió para su revisión a varias organizaciones y empresas, durante dos años se perfeccionó constantemente, pasando por "Woodenman" ("Wooden") , "Tinman" ("Tin"), "Ironman" ("Iron") y finalmente se convirtió en un documento final llamado "Steelman" ("Acero"). Steelman fue lanzado en junio de 1978 [DoD 1978] [9] .
Incluso antes de la finalización final de la formación de requisitos, el análisis mostró que ninguno de los lenguajes de programación existentes satisface suficientemente los requisitos, por lo que se tomó la decisión de desarrollar un nuevo lenguaje. En 1977 se anunció un concurso para su creación , se pidió a los desarrolladores que se basaran en uno de tres lenguajes: Pascal , Algol-68 o PL/1 . De los 15 proyectos presentados al concurso, 4 fueron seleccionados (todos basados en Pascal). Estos proyectos fueron enviados para un mayor desarrollo. En la siguiente etapa, de 4 proyectos, se seleccionaron dos, de los cuales, después de otra revisión, se seleccionó uno. Este lenguaje fue llamado "Ada" - el grupo que lo desarrolló, liderado por el francés Jean Ishbia , nombró el lenguaje en honor a Augusta Ada King Lovelace (1815-1852), hija del poeta George Byron , quien desarrolló programas para la computadora de Babbage. y es considerado el primer programador del mundo.
En 1983, ANSI estandarizó oficialmente el lenguaje . El estándar de lenguaje ANSI /MIL-STD-1815-A-1983 fue aprobado el 17 de febrero de 1983. El Departamento de Defensa de EE. UU. ha hecho de "Ada" una marca registrada, prohibiendo la publicación de traductores del idioma que no hayan pasado el procedimiento de prueba oficial para el cumplimiento de las normas. El procedimiento consistió en ejecutar un gran número (más de 1000) de programas de prueba (el llamado conjunto ACVC) a través del compilador bajo prueba , para cada uno de los cuales se determinó sin ambigüedades el resultado de la prueba: ya sea una compilación exitosa o la emisión de un muy mensaje de error específico. La prueba se llevó a cabo de acuerdo con el principio de "todo o nada": si hubo un error en el procesamiento de al menos un caso de prueba, se consideró que el compilador no pasó la prueba y la prueba fue válida solo en la plataforma de hardware y software en la cual se llevó a cabo. De esta forma, se cortó de raíz la posibilidad de la formación de dialectos de la lengua de Ada.
En 1987, el lenguaje Ada fue estandarizado oficialmente por ISO . Desde entonces, el Departamento de Defensa de EE. UU. ha colocado el idioma en el dominio público .
Para 1990, ya había alrededor de 200 compiladores en el mundo que correspondían al estándar de lenguaje Ada.
En 1995, se adoptó un nuevo estándar Ada, conocido como Ada95. Se introdujeron herramientas de programación de objetos en el lenguaje. Además, el lenguaje se complementó con herramientas más avanzadas para interactuar con programas escritos en otros lenguajes.
En marzo de 2007, se publicaron los cambios en el estándar Ada [10] . Abordaron principalmente las posibilidades de la programación orientada a objetos : se introdujeron las interfaces , se adoptó la sintaxis para llamar a un método, que es común para la mayoría de los lenguajes híbridos, y se hicieron una serie de adiciones.
En 2012, ISO adoptó y publicó un nuevo estándar de idioma [11] .
En 1984, el periodista soviético Melor Sturua en el periódico Izvestia dio la siguiente evaluación del lenguaje de programación Ada:
El lenguaje del Pentágono es el enemigo del mundo. El idioma de "Ada" es la voz del infierno termonuclear... En el idioma de "Ada" se escucha una maldición sobre la raza humana.
- M. G. Sturua . 1984 y "1984" [12]En la década de 1980, se organizó un grupo de trabajo sobre el idioma de Ada en el marco del Comité Estatal de Ciencia y Tecnología de la URSS . El grupo participó en el estudio de todos los datos abiertos (y, según los rumores, obtenidos por inteligencia secreta) sobre el idioma de Ada e investigó la posibilidad y conveniencia de desarrollar y usar Ada en la URSS. Las actividades de este grupo llevaron a fines de la década de 1980 al desarrollo de compiladores Ada para casi todas las computadoras utilizadas en la URSS. Se han publicado varios libros sobre el idioma de Ada en ruso.
En la Universidad Estatal de Moscú , se trabajó para crear sus propios paquetes para probar traductores de anuncios para el cumplimiento de los estándares. En la Universidad Estatal de Leningrado , para crear un sistema Ada, se utilizó el sistema Pallada, que se desarrolló previamente para la implementación de Algol-68, que se transfirió a Ada. El sistema contiene un entorno de desarrollo integrado, un compilador, un editor de texto, un depurador, bibliotecas, un sistema de control de versiones y un intérprete de comandos.
Después del colapso de la URSS, el trabajo de distribución de Ada prácticamente se interrumpió. Es cierto que se adoptaron tres programas para el desarrollo del desarrollo de software en Ada (en el Ministerio de Defensa , el Ministerio de Aviación Civil y el Ministerio de Educación y Ciencia ), pero su desarrollo es lento y descoordinado. Como resultado , el lenguaje Ada es poco conocido en Rusia , la mayoría de los programadores rusos modernos lo consideran un "lenguaje muerto" y no saben nada al respecto. Ada se utiliza en Rusia y la CEI por entusiastas individuales. Sin embargo, el lenguaje se utiliza para el desarrollo de software industrial. Hay varios proyectos desarrollados en Ada y trabajando en Rusia. Entre ellos:
Desde sus inicios, Ada ha sido criticada por algunas autoridades reconocidas en el campo del desarrollo de lenguajes de programación, principalmente por la complejidad de la sintaxis y el gran volumen. En particular, el lenguaje fue criticado por Charles Hoare y Niklaus Wirth (quienes participaron con su proyecto en esta competencia, pero se retiraron después de la primera etapa), así como por Edsger Dijkstra .
Dijkstra dudaba que un lenguaje tan complejo como el Ada pudiera ser visto y manejado.
Si Ada va a emitir un estándar, es deseable que esté documentado sin ambigüedades. Al menos dos grupos han intentado hacerlo; como resultado, ambos produjeron alrededor de 600 páginas de texto formal. Esto es mucho más de lo necesario para asegurarse de que es imposible establecer incluso con firmeza que ambos documentos definen el mismo idioma. El error en la aparente inmanejabilidad de estos dos documentos no radica en los dos grupos que los compilaron, ni en el formalismo que adoptaron, sino solo en el lenguaje mismo: sin dar una definición formal si sus desarrolladores pueden ocultar que ofrecen un monstruo inmanejable . Que Ada reduzca los problemas de programación y aumente la confiabilidad de nuestros diseños a límites aceptables es solo uno de esos cuentos de hadas que solo las personas con antecedentes militares pueden creer.
— Ciencia ficción y realidad científica en informática (Edsger W. Dijkstra, EWD952)Hoare lamentó que "los sonajeros y las baratijas hayan tenido prioridad sobre los requisitos fundamentales de confiabilidad y seguridad" y advirtió contra "una armada de misiles volando en la dirección equivocada debido a un error no detectado en el compilador Ada". Niklaus Wirth habló de forma más reservada, pero también negativa. Él dijo: “Se lanza demasiado al programador. No creo que habiendo estudiado un tercio de Ada, uno pueda trabajar normalmente. Si no domina todos los detalles del idioma, en el futuro puede tropezar con ellos y esto tendrá consecuencias desagradables . Jean Ishbia , líder del equipo de desarrollo de Ada, aunque expresó su "respeto y admiración" por Wirth, no estuvo de acuerdo y dijo: "Wirt cree en soluciones simples para problemas complejos. Yo no creo en tales milagros. Los problemas complejos requieren soluciones complejas”.
El procedimiento para verificar el cumplimiento del compilador con el estándar del lenguaje mediante pruebas también genera dudas. A partir de consideraciones generales, está claro que las pruebas pueden encontrar inconsistencias, pero no pueden garantizar la corrección. Una confirmación práctica de esto es el hecho de que los compiladores certificados, cuando se probaron en un conjunto diferente de pruebas, encontraron incumplimiento con el estándar [14] .
Los partidarios de Ada argumentan que la única alternativa a un lenguaje grande y complejo en proyectos grandes es el uso de varios lenguajes compactos, lo que inevitablemente crea problemas de compatibilidad, de los cuales Ada se inventó para deshacerse. También señalan que la noción de complejidad en el desarrollo de Ada es solo parcialmente cierta: escribir un programa simple en Ada lleva más tiempo que en otros lenguajes menos formales como C , pero depurar y mantener programas, especialmente programas grandes y complejos, es muy simplificado. Según Stephen Zeiger de Rational Software Corporation [15] , el desarrollo de software en Ada es generalmente un 60% más económico y el programa desarrollado tiene 9 veces menos defectos que usando el lenguaje C.
En la práctica, resultó que Ada, habiendo ocupado el nicho que le correspondía en los desarrollos militares y relacionados de los sistemas integrados, no fue más allá de este nicho ni en Occidente, ni en la URSS, ni en el espacio postsoviético. Hay muchas razones para esto. Los opositores al idioma se basan en su complejidad y deficiencias, los partidarios hablan, en primer lugar, sobre las circunstancias objetivas de la aparición del idioma y los aspectos negativos del proceso de su implementación. Según S. I. Rybin, investigador principal de la Universidad Estatal de Moscú, consultor de AdaCore EU, experto en el idioma Ada del grupo de trabajo de ISO sobre el estándar del idioma [14] , Ada debe sus fallas a dos razones principales:
Sin embargo, según algunos pronósticos cautelosos, con hardware más barato y la proliferación de sistemas embebidos con software complejo, el mercado de programas en Ada puede crecer significativamente:
… Ada está firmemente en el nicho de los grandes sistemas integrados con requisitos de alta confiabilidad, y es poco probable que ceda el paso a alguien en este nicho en el futuro previsible. A medida que aumenta el rendimiento de los componentes de hardware mientras que su costo disminuye, los sistemas integrados se vuelven cada vez más complejos y puede resultar que el mercado potencial para las aplicaciones de Ada pronto crezca significativamente.
— Entrevista con S.I. Rybina [14]Además, Ada tiene aplicaciones, aunque muy limitadas, en la educación superior. Se imparten cursos especiales sobre Ada en la Universidad Estatal de Moscú y la Universidad de Kharkov. Sin embargo, según el mismo S.I. Rybin ,
... ahora en el espacio postsoviético en el campo de la industria del software y la educación, se ha desarrollado un círculo vicioso obvio: en la industria prácticamente no conocen a Ada, respectivamente, no hay demanda de la industria para la educación. formar especialistas de Ada, y viene gente nueva de las universidades a la industria, que prácticamente no saben nada de Ada.
Varios sistemas operativos están escritos en Ada, entre ellos MaRTE Archivado el 10 de julio de 2017 en Wayback Machine , RTEMS ( un sistema de código abierto desarrollado por DARPA , Departamento de Defensa de los EE . módulo de radio de control "Electra"), Ravenskar , RTOS-32 . Se están desarrollando varios proyectos más para crear sistemas operativos en Ada, entre ellos, AuroraUX , un proyecto para reescribir el kernel de OpenSolaris , y luego, DragonFly BSD , así como un proyecto para crear un sistema Lovelace en el microkernel L4 .
Anteriormente, había otros sistemas operativos escritos en Ada, entre ellos: BiiN, Pulse, AdaOS.
Actualmente, se está desarrollando el sistema operativo Muen [16] , escrito en Ada y SPARK, se utilizan sistemas operativos educativos Ada Barebones [17] , Microkernel Ada (TAMP [18] ).
Nombre | Compañía | Versión | Plataformas objetivo | Sitio web |
---|---|---|---|---|
Compiladores del proyecto DragonLace (GNAT AUX y futuros compiladores DRACO Ada) | proyecto comunitario | Ada: todas las versiones del idioma; versiones del compilador: 4.9.x o 6.3.x (para varias plataformas) | LLVM, DragonFly, FreeBSD, NetBSD, OpenBSD, OmniOS, Android | http://www.dragonlace.net/ Archivado el 31 de marzo de 2018 en Wayback Machine . |
Ada-C/C++ Changer (basado en la tecnología AdaMagic) | mapusoft | Ada 83, Ada 95, un subconjunto de Ada 2005 | C, C++ | www.mapusoft.com Archivado el 21 de noviembre de 2016 en Wayback Machine . |
ada/ed | Universidad de Nueva York | ada 83 | MS-DOS x86 , UnixWare | www2.informatik.uni-stuttgart.de |
AdaMagic | SofCheck | ada 95 | ? | www.sofcheck.com Archivado el 4 de marzo de 2021 en Wayback Machine . |
AdaMULTI | Software de colinas verdes | Ada 83, Ada 95, C , C++ , Fortran | Solaris SPARC , GNU / Linux x86 , Windows | www.ghs.com Archivado el 15 de enero de 2021 en Wayback Machine . |
Dic Ada | Hewlett Packard | ada 83 | openvms | h71000.www7.hp.com |
MOSQUITO | AdaCore | Ada 83, Ada 95, Ada 2005, Ada 2012, C | Solaris SPARC, Linux x86/ x86-64 , Windows, Java Virtual Machine , otros | libre.adacore.com Archivado el 12 de febrero de 2005 en Wayback Machine . |
CPI | Corporación del compilador de Irvine | Ada 83, Ada 95 | DEC VAX / VMS , HP 9000/700 , Solaris SPARC, DEC Alpha OSF/1 , PC Linux, SGI IRIX , Windows | www.irvine.com Archivado el 2 de mayo de 2009 en Wayback Machine . |
Jano/Ada | Software RR | Ada 83, Ada 95 | SCO , UnixWare , Interactivo , MS-DOS , Windows | www.rrsoftware.com Archivado el 21 de enero de 2022 en Wayback Machine . |
MAXAda | Concurrente | ada 95 | Linux/ Xeon , Power PC | www.ccur.com Archivado el 3 de septiembre de 2011 en Wayback Machine . |
ObjetoAda | PTC | Ada 95, Ravenskar | Solaris SPARC, VxWorks , HP-UX , IBM AIX , Linux, Windows, Java Virtual Machine /Java con compatibilidad con navegador | www.ptc.com Archivado el 10 de octubre de 2016 en Wayback Machine . |
PowerAda | Sistemas CO | Ada 83, Ada 95 | Linux, AIX (Ada 95); Sistema IBM 370/390 (Ada 83) | www.ocsystems.com Archivado el 24 de agosto de 2010 en Wayback Machine . |
Ápice racional | Racional de IBM | Ada 83, C, C++ | Solaris SPARC Linux | www-01.ibm.com Archivado el 27 de septiembre de 2009 en Wayback Machine . |
PUNTAJE | DDC-I | Ada 83, Ada 95, C, Fortran | Solaris SPARC, Windows | www.ddci.com |
XD Ada | SWEP-EDS | ada 83 | OpenVMS Alfa/VAX | www.swep-eds.com |
XGC Ada | Software XGC | Ada 83, Ada 95, C | Solaris SPARC, PC Linux, Windows ( Cygwin ) | www.xgc.com Archivado desde el original el 9 de febrero de 2013. |
LLVM ( Máquina virtual de bajo nivel ) | Grupo de desarrolladores de LLVM | en la mayoría de los sistemas tipo UNIX y Windows | llvm.org | |
A# (puerto de Ada a la plataforma Microsoft .NET ) | Academia de la Fuerza Aérea de los Estados Unidos ( GNU ) | ventanas | asharp.martincarlisle.com Archivado el 2 de julio de 2011 en Wayback Machine . |
Con la excepción de LLVM , GNAT y XGC (para algunas plataformas), los compiladores anteriores son de pago. Algunas empresas, como Aonix , ofrecen demostraciones gratuitas limitadas en el tiempo o en la funcionalidad.
Los entornos de desarrollo NetBeans [19] y Eclipse tienen complementos para trabajar con Ada.
La sintaxis de Ada se reproduce en gran medida en lenguajes como PL/SQL (y más tarde PL/pgSQL ), VHDL , SPARK .
En los lenguajes de programación E [20] y Clarity [21] , luego en muchos otros: por ejemplo, en los lenguajes Erlang , Fortress , Chapel , X10 , D y Go , las ideas de computación distribuida, multitarea y multiproceso , que son implementados por el lenguaje mismo, se desarrollaron más, y no por bibliotecas externas, que primero se usaron ampliamente en la práctica en el lenguaje Ada.
Lenguajes de programación | |
---|---|
|