Eiffel (lenguaje de programación)

Muchos conceptos inicialmente introducidos por Eiffel aparecen más tarde en Java, C# y otros lenguajes.Hay otras cuatro implementaciones de código abierto: "The Eiffel Compiler" tecomp, Gobo Eiffel, SmartEiffel - la implementación GNU, basada en una versión anterior del lenguaje-, LibertyEiffel-basado el compilador de SmartEiffel- y VisualEiffel.Diversos lenguajes de programación incorporan elementos aportados por primera vez en Eiffel.Sather, por ejemplo, se basó originalmente en Eiffel, pero ha variado desde entonces, y ahora incluye características de la programación funcional.El estándar fue desarrollado por Ecma International, que por primera vez aprobada la norma, el 21 de junio de 2005, como estándar ECMA 367, Eiffel: Analysis, Design and Implementation Language.El comité ECMA no ha anunciado ningún calendario ni en que dirección se resolverán estas inconsistencias.Los tipos estándar de datos como entero, string o array, son todos ellos clases.Una consecuencia de esto es que el método "set" puede, y normalmente lo hace, implementa las invariancias por los cuales Eiffel proporciona sintaxis.Por ejemplo, el operador "+" se define en diversas clases: INTEGER, REAL, STRING, etc.(Eiffel reserva "argumento" para las rutinas, y utiliza "parámetro" solo para las clases genéricas.)Una clase que hereda de otra u otras obtiene todas sus características, por defecto con sus nombres originales.Los tipos tuples pueden ser vistos como una forma simple de clase, proporcionando solo los atributos y el correspondientemente método "set".Un tipo tupla típico podría ser utilizado para describir una simple acta de nacimiento si no fuese necesaria una clase.(En algunos compiladores esta es la única forma de tuple, ya que las etiquetas se van introduciendo en el estándar ECMA).Otros lenguajes de programación, especialmente los que hacen énfasis en la programación funcional, permiten un patrón similar con las continuaciones, clausuras, o generadores; los agentes Eiffel enfatizan el paradigma de los lenguajes orientados a objetos, y usa una sintaxis y semántica similares a los bloques de código en Smalltalk y Ruby.Por ejemplo, para ejecutar el bloque accion_propia para cada elemento de lista_propia, se podría escribir: Para ejecutar accion_propia solo los elementos que satisfacen condicion_propia, una limitación de filtro se puede añadir: En estos ejemplos, accion_propia y condicion_propia son rutinas.Prefijándolos con agente cede un objeto que representa la rutina correspondiente, con todas sus propiedades, en particular, la capacidad de ser llamado con los argumentos adecuados.Los argumentos son siempre cerrados en el momento de la definición del agente.Las llamadas a una rutina de estos tipos, salvo la primera vez, no requieren cálculos adicionales o la asignación de recursos, sino que simplemente devuelve un resultado previamente calculado con la primera llamada.Un controlador de excepciones Eiffel se define utilizando la palabra clave rescue.Así, por ejemplo, una suma es conceptualmente entendida como si se tratase de una llamada a la función con el objetivo a, la característica mes i el argumento b.Eso es particularmente útil para las estructuras de contenedores, como matrices, tablas hash, listas, etc.Los comentarios son introducidos por -- (dos guiones consecutivos) y se extienden hasta el final de línea.La mayoría de las veces el punto y coma es omitido, excepto para separar múltiples instrucciones en una línea.Eso esta en consonancia con el principio de separación orden-consulta del método Eiffel.Algunas de estas convenciones se aplican al formato de código en si, y otros para la representación tipográfica estándar del código Eiffel en formatos y publicaciones en las que estas convenciones son posibles.La especificación de Eiffel incluye directrices para los textos del programa que muestra en formato composición tipográfica: palabras clave en negrita, identificadores definidos por el usuario y las constantes se muestran en cursiva, los comentarios, los operadores y marcas de puntuación en Roman, con el texto del programa en azul como en el presente artículo para distinguirlo de un texto explicativo.Es posible, por ejemplo, programar a nivel máquina y sistema operativo en C. Eiffel proporciona una interfaz sencilla para las rutinas en C, incluido el soporte a "C en línea" (escribir el cuerpo de una rutina de Eiffel en C, en general para pequeñas operaciones a nivel máquina).El compilador Eiffel de tecomp puede ejecutar cogido Eiffel directamente (como un intérprete) sin tener que pasar a través de un código C intermedio ni emitir código C que se pasara a un compilador de C para obtener el código nativo optimizado.En.NET, el compilador EiffelStudio genera directamente código en CIL (Common Intermediate Language).