Crystal es una de propósito general , la programación orientada a objetos lenguaje, diseñado y desarrollado por Ary Borenszweig, Juan Wajnerman, Brian Cardiff y más de 300 colaboradores. [4] Con una sintaxis inspirada en el lenguaje Ruby , [3] es un lenguaje compilado con verificación de tipo estática , pero generalmente no es necesario especificar los tipos de variables o argumentos del método. Los tipos se resuelven mediante un algoritmo de inferencia de tipos global avanzado . [5] Crystal se encuentra actualmente en desarrollo activo. Se lanza como software gratuito y de código abierto bajo la licencia Apache. versión 2.0.
Paradigma | Multi-paradigma : orientado a objetos , concurrente |
---|---|
Diseñada por | Ary Borenszweig, Juan Wajnerman, Brian Cardiff |
Desarrollador | Soluciones tecnológicas de Manas |
Apareció por primera vez | 18 de junio de 2014 cita requerida ] | [
Lanzamiento estable | 1.0.0 [1] / 22 de marzo de 2021 |
Disciplina de mecanografía | estático , inferido , nominal , pato |
Lenguaje de implementación | Cristal |
Plataforma | IA-32 (i386), x86-64 , AArch64 [2] |
SO | Linux , macOS , FreeBSD , OpenBSD [2] |
Licencia | Licencia Apache 2.0 |
Extensiones de nombre de archivo | .cr |
Sitio web | crystal-lang |
Influenciado por | |
Ruby , C , Rust , Go , [3] C # , [3] Python [3] |
Historia
El trabajo en el lenguaje comenzó en junio de 2011, [6] con el objetivo de fusionar la elegancia y productividad de Ruby con la velocidad, eficiencia y seguridad de tipos de un lenguaje compilado. [7] [6] Inicialmente llamado Joy , fue rápidamente renombrado a Crystal . [6]
El compilador Crystal se escribió por primera vez en Ruby, pero luego se reescribió en Crystal, convirtiéndose así en autohospedado , a partir de noviembre de 2013. [8] La primera versión oficial se lanzó en junio de 2014. [9] En julio de 2016, Crystal se unió a TIOBE índice .
Descripción
Aunque se asemeja al lenguaje Ruby en sintaxis, Crystal compila en código nativo mucho más eficiente usando un backend LLVM , a costa de excluir los aspectos dinámicos de Ruby. Sin embargo, la inferencia de tipo global avanzada utilizada por el compilador Crystal, combinada con el uso de tipos de unión , le da a Crystal la sensación de un lenguaje de scripting de nivel superior más que muchos otros lenguajes de programación comparables. El lenguaje tiene recolección de basura automatizada y actualmente ofrece un recolector Boehm . Crystal posee un sistema de macros y admite genéricos, así como la sobrecarga de métodos y operadores. El modelo de concurrencia de Crystal se inspira en la comunicación de procesos secuenciales (CSP) e implementa fibras y canales livianos (para la comunicación entre fibras) inspirados en Go . [3]
Ejemplos de
Hola Mundo
Esta es la forma más sencilla de escribir el programa Hello World en Crystal:
pone "¡Hola mundo!"
Lo mismo que en Ruby.
O usando un estilo de programación orientado a objetos :
class Greeter def initialize ( @name : String ) end def salute pone "¡Hola # { @name } !" fin fing = Saludador . nuevo ( "mundo" ) g . saludo
Servidor HTTP
requiere "http / servidor"servidor = HTTP :: Servidor . nuevo hacer | contexto | contexto . respuesta . content_type = contexto "text / plain" . respuesta . print "¡Hola mundo! El tiempo es # { Hora . ahora } " fin servidor . bind_tcp ( "0.0.0.0" , 8080 ) coloca el servidor "Escuchando en http://0.0.0.0:8080" . escuchar
Servidor de eco TCP
requiere "enchufe"def handle_client ( cliente ) mensaje = cliente . consigue cliente . pone fin al mensajeservidor = TCPServer . nuevo ( "localhost" , 1234 ) mientras cliente = servidor . ¿aceptar? spawn handle_client ( cliente ) final
Tipos de unión e inferencia de tipos
El siguiente código define una matriz que contiene diferentes tipos sin un ancestro común utilizable. Crystal crea automáticamente un tipo de unión a partir de los tipos de elementos individuales.
desired_things = [ : unicornios , "mariposas" , 1_000_000 ] p typeof ( desired_things . primero ) # typeof devuelve la compilación de tipo tiempo, aquí (Símbolo | Cadena | Int32) p desired_things . primero . class # el método de clase devuelve el tipo de tiempo de ejecución, aquí Símbolo
Concurrencia
Los canales se pueden utilizar para comunicarse entre fibras, que se inician mediante la palabra clave spawn
.
canal = Canal ( Int32 ) . nuevospawn do pone el canal "Antes del primer envío" . enviar ( 1 ) pone el canal "Antes del segundo envío" . enviar ( 2 ) final pone "Antes del primer reciben" valor = canal . recibir pone valor # => 1pone "Antes de recibir el segundo" valor = canal . recibir pone valor # => 2
Otras lecturas
- St. Laurent, Simon; Balbaert, Ivo (1 de febrero de 2019), Programming Crystal (P1.0 ed.), Pragmatic Bookshelf , ISBN 978-1-68050-286-2
- Wartala, Ramon (marzo de 2016), "Die Ruby-artige Programmiersprache Crystal" [El lenguaje de programación Crystal, similar a Ruby], Linux Magazin (en alemán) (3/2016), ISSN 1432-640X
Referencias
- ^ "Versión 1.0.0" . 22 de marzo de 2021 . Consultado el 22 de marzo de 2021 .
- ^ a b "Soporte Crystal Platform" . crystal-lang.org .
- ^ a b c d e Borenszweig, Ary (16 de junio de 2016). "¡Lanzamiento de Crystal 0.18.0!" . crystal-lang.org .
Está muy inspirado en Ruby y otros lenguajes (como C #, Go y Python).
- ^ "Colaboradores" . Recuperado el 25 de julio de 2019 , a través de GitHub .
- ^ Brian J., Cardiff (9 de septiembre de 2013). "Escriba la parte 1 de la inferencia" . crystal-lang.org .
- ^ a b c David, María Inti (1 de abril de 2016). "La historia detrás de #CrystalLang" . manas.tech .
- ^ Hsieh, Adler (20 de septiembre de 2015). "¿Por qué el lenguaje de programación Crystal?" . motion-express.com .
- ^ Borenszweig, Ary (14 de noviembre de 2013). "Adiós Ruby Thursday" . crystal-lang.org .
- ^ Borenszweig, Ary (19 de junio de 2014). "¡Lanzamiento de Crystal 0.1.0!" . crystal-lang.org .
enlaces externos
- Página web oficial
- Crystal-lang en GitHub
- / r / subreddit de programación_cristal
- Anuncios de cristal