Articulo de referencia

Ceylon (lenguaje de programación)

{{cite web\n | url=http://ceylon-lang.org/documentation/1.2/spec/html_single/#compilationunitstructure\n | title=The Ceylon Language: §4.1 Compilation unit structure\n | quote=A...

Ceylon era un lenguaje de programación orientado a objetos , fuertemente tipado estáticamente y con énfasis en la inmutabilidad , creado por Red Hat . Los programas Ceylon se ejecutaban en la máquina virtual Java (JVM) y podían compilarse a JavaScript . [ 6 ] [ 7 ] El diseño del lenguaje se centra en la legibilidad del código fuente , la previsibilidad , la facilidad de uso de herramientas , la modularidad y la metaprogramabilidad . [ 8 ]

Las características importantes de Ceilán incluyen: [ 9 ]

El nombre "Ceilán" es una referencia indirecta a Java, ya que Java y Sri Lanka , anteriormente conocida como Ceilán, son islas famosas por el cultivo y la exportación de café y .

En agosto de 2017, Ceylon fue donado a la Fundación Eclipse . El desarrollo se ralentizó y finalmente se detuvo en 2020. [ 13 ] En abril de 2023, la Fundación Eclipse declaró la finalización de la transición. [ 14 ]

Características del idioma

Ceylon está fuertemente influenciado por la sintaxis de Java , pero añade muchas características nuevas.

Sistema de tipos

Uno de los aspectos más novedosos de Ceylon en comparación con Java es su sistema de tipos . Ceylon prescinde de los tipos primitivos de Java [ 15 ] y del empaquetado (boxing) en favor de un sistema de tipos compuesto enteramente por objetos de primera clase. Si bien esto puede generar sobrecarga de empaquetado en algunas situaciones, hace que el sistema de tipos sea más uniforme.

Ceylon permite tipos de unión e intersección , de forma similar a TypeScript , Whiley y FLOW , que de hecho tomaron la idea de Ceylon.

Los tipos de unión, escritos como A|B, permiten que una variable tenga más de un tipo. El siguiente ejemplo muestra una función de Ceylon que puede aceptar un número entero o una cadena :

shared void integerOrString ( Integer | String input ) { if ( is Integer input ) { print ( "Se recibió el entero ``input``" ); } else { print ( "Se recibió la cadena '``input``'" ); } }

Los tipos de intersección, escritos como A&B, son la base teórica de la tipificación sensible al flujo :

shared void integerOrString ( Integer | String input ) { Integer added = input + 6 ; // ilegal; el operador + no está definido en Integer|Stringif ( is Integer input ) { Integer added = input + 6 ; // válido; ahora se sabe que input es un Integer print ( "Se recibió el entero ``input``" ); } else { print ( "Se recibió la cadena '``input``'" ); } }

La condición is Integer inputrestringe el tipo de inputa , que se distribuye a , que, como y son tipos disjuntos, es equivalente a ( es el tipo inferior vacío), que se simplifica a simplemente .<Integer|String>& IntegerInteger&Integer | String&IntegerStringIntegerInteger&Integer | NothingNothingInteger

Seguridad nula

Los tipos de unión e intersección se utilizan para proporcionar seguridad nula . El tipo superior de la jerarquía de tipos de Ceylon es la clase Anything, que tiene dos subclases: Object, la superclase de todas las clases normales y todas las interfaces, y Null, con la única instancia null. Dado que Objecty Nullson tipos disjuntos, la mayoría de los tipos regulares como Integero no son nulos; un tipo nulo es la unión , abreviada . [ 16 ]List<String>Integer|NullInteger?

Los tipos de intersección se pueden usar para obtener un tipo no opcional a partir de un tipo posiblemente opcional, como un parámetro de tipo. Por ejemplo, la firma de una función que elimina nullelementos de una secuencia de valores podría ser:

Iterable < Elemento y Objeto > eliminarNulos < Elemento >( Iterable < Elemento > flujo );

Cuando removeNullsse llama con un flujo de Integer|Nullelementos, el resultado será un flujo de elementos, que se simplifica a .<Integer|Null> & ObjectInteger

Funciones

De manera similar a muchos lenguajes modernos, Ceylon admite funciones de primera clase y funciones de orden superior , incluidos tipos de funciones y funciones anónimas [ 17 ].

// Una función de orden superior de nivel superior que utiliza sintaxis de bloque (no asociada con ninguna clase creada por el usuario) String process ( String text , String transformString ( String toChange )) { return transformString ( text ); }// Una función de nivel superior que llama a String.reverse en forma de expresión. String reverse ( String text ) => text . reversed ;// Una referencia a la función String.reversed, pero en su mayor parte equivalente a la función anterior. String ( String ) reverseFunctionReference = String . reversed ;// Un ejemplo donde la función de nivel superior anterior se proporciona como argumento a la función de orden superior anterior String reversed1 = process ( "one" , reverse );// Un ejemplo donde se proporciona una función anónima - (texto) => texto+texto - a la función de orden superior anterior. String reversed2 = process ( "one" , ( texto ) => texto + texto );

Tipos enumerados

Al igual que Java y muchos otros lenguajes, y con un mecanismo similar al de los tipos algebraicos , Ceylon admite tipos enumerados , también conocidos como enumeraciones. Esto se implementa en Ceylon mediante un patrón que limita las instancias de una clase abstracta en su declaración a un conjunto limitado de objetos (en este caso, instancias únicas). Otra forma de implementar este patrón es con la nueva característica de constructor en Ceylon 1.2, donde los objetos se implementan como diferentes declaraciones de constructor con nombre. [ 18 ]

// Sintaxis tradicional para tipos enumerados, en este caso, limitando las instancias a tres objetos (para este propósito: Singletons) abstract class Vehicle ( shared String name ) of plane | train | automobile {}object plane extends Vehicle ( "plane" ) {} object train extends Vehicle ( "train" ) {} object automobile extends Vehicle ( "automobile" ) {} // Error de compilación: el tipo no es un subtipo de ningún caso del supertipo enumerado: 'boat' hereda de 'Vehicle' //object boat extends Vehicle("boat") {}// Nueva sintaxis basada en constructor (a partir de Ceylon 1.2.0) class Vehicle of plane | train | automobile { String name ;abstracto nuevo llamado ( String pName ) { nombre = pName ; }shared new plane extends named ( "plane" ) {} shared new train extends named ( "train" ) {} shared new automobile extends named ( "automobile" ) {} // Error de compilación: el constructor de valor no aparece en la cláusula of de una clase enumerada no abstracta: 'boat' no está listado en la cláusula of de 'Vehicle' //shared new boat extends named("boat") {} }

Inferencia de tipo

Ceylon es fuertemente tipado y estático, pero también admite la inferencia de tipos . La valuepalabra clave se usa para inferir el tipo de una variable, y la functionpalabra clave se usa para inferir el tipo de una función. Los siguientes dos pares de definiciones son equivalentes:

Entero i = 3 ; valor i = 3 ;Función add ( Integer i1 , Integer i2 ) { return i1 + i2 ; }

Sin embargo, para que la inferencia de tipos de una sola pasada sea posible, la inferencia de tipos solo está permitida para declaraciones que no sean de nivel superior y no compartidas. [ 19 ]

Punto de entrada con nombres

Por defecto, el iniciador ( ceylon run) ejecuta la función compartida run() de un módulo:

/* El clásico programa "Hola Mundo" */ shared void run () { print ( "Hola, Mundo!" ); }

pero cualquier otra función compartida sin parámetros puede usarse como llamada principal al programa con el parámetro run , de esta manera:

ceylon run --compile=force --run hello default

Versiones

Versiones de Ceylon publicadas: [ 20 ]

  • M1 0.1 "Newton" (20 de diciembre de 2011)
  • M2 0.2 "Minitel" (2 de marzo de 2012)
  • M3 0.3 "V2000" (21 de junio de 2012)
  • M3.1 0.3.1 "V2000" (6 de julio de 2012)
  • M4 0.4 "Motor analítico" (29 de octubre de 2012)
  • M5 0.5 "Nesa Pong" (13 de marzo de 2013)
  • M6 0.6 "Niño virtual" (23 de septiembre de 2013)
  • 1.0 beta "Virtual Boy" (24 de septiembre de 2013)
  • 1.0.0 "No más buen tipo" (13 de noviembre de 2013)
  • 1.1.0 "Ultimate Ship The Second" (9 de octubre de 2014)
  • 1.2.0 "Una serie de explicaciones improbables" (28 de octubre de 2015)
  • 1.2.1 "Apocalipsis irregular" (11 de febrero de 2016)
  • 1.2.2 "Encantador pero irracional" (11 de marzo de 2016)
  • 1.3.0 "Reflexión interna total" (19 de septiembre de 2016)
  • 1.3.1 "Ahora lo intentamos a mi manera" (22 de noviembre de 2016)
  • 1.3.2 "Sonríe con tolerancia" (2 de marzo de 2017)
  • 1.3.3 "El contenido puede variar" (21 de agosto de 2017)

Licencia

Todas las partes de Ceylon están disponibles como software libre , principalmente bajo la Licencia Apache . [ 21 ] Parte del código fuente está licenciado bajo LGPL.

Véase también

Referencias

  1. King, Gavin. "El idioma ceilandés: §4.1 Estructura de la unidad de compilación" . Consultado el 4 de diciembre de 2015. Una unidad de compilación es un archivo de texto con la extensión de archivo .ceylon.
  2. "Preguntas frecuentes: ¿Qué es Ceylon?" . Consultado el 4 de diciembre de 2015. Ceylon es un nuevo lenguaje de programación profundamente influenciado por Java.
  3. "ceylon/user - Gitter" . Consultado el 4 de diciembre de 2015 .
  4. "ceylon/user - Gitter" . Consultado el 4 de diciembre de 2015 .
  5. "Las 10 características principales del lenguaje Ceylon que Java desearía tener" . Consultado el 29 de noviembre de 2019 .
  6. "Ceylon 1.0 beta" . Consultado el 26 de septiembre de 2013 .
  7. "Proyecto Ceylon: Red Hat crea un reemplazo para Java" . The Register . 13 de abril de 2011. Consultado el 27 de noviembre de 2011 .
  8. King, Gavin (10 de enero de 2012). "Principios que guían este proyecto" . Recuperado el 4 de diciembre de 2015 .
  9. "Preguntas frecuentes sobre el diseño del lenguaje: Objetivos" . Consultado el 4 de diciembre de 2015 .
  10. Festal, David (10 de octubre de 2014). "Escribir en Ceylon, implementar como OSGI, usar en Java EE" . Recuperado el 4 de diciembre de 2015 .
  11. "Repositorios Maven" . Consultado el 4 de diciembre de 2015 .
  12. "Características del IDE de Ceylon" . Consultado el 4 de diciembre de 2015 .
  13. "ceylon / ceylon" . GitHub, Inc. 25 de mayo de 2020. Archivado del original el 3 de octubre de 2023. Consultado el 22 de enero de 2024 .
  14. "Revisión de la rescisión de Eclipse Ceylon™" . Fundación Eclipse. 5 de abril de 2023. Archivado del original el 23 de abril de 2023. Consultado el 23 de abril de 2023 .
  15. King, Gavin. "Ceilán: Preguntas frecuentes sobre el diseño del idioma" .
  16. King, Gavin. "El lenguaje Ceylon: §1.4.3 Seguridad en tiempo de compilación para valores nulos y tipado sensible al flujo" . Recuperado el 4 de diciembre de 2015 .
  17. King, Gavin. "El idioma ceilandés: 4.7 funciones" . Consultado el 5 de diciembre de 2015 .
  18. King, Gavin. "El idioma ceilandés: 4.5.8 Clases enumeradas" . Consultado el 6 de diciembre de 2015 .
  19. King, Gavin. "El idioma ceilandés: §3.2.9 Inferencia de tipo" . Consultado el 4 de diciembre de 2015 .
  20. https://ceylon-lang.org/download-archive/ Ceylon: Descargar versiones anteriores de Ceylon
  21. "Ceilán: Licencias" . Consultado el 4 de diciembre de 2015 .
  • Sitio web oficialEdita esto en Wikidata