Crystal (linguagem de programação) - Crystal (programming language)

Cristal
Crystal language logo.svg
Paradigma Multi-paradigma : orientado a objetos , concorrente
Projetado por Ary Borenszweig, Juan Wajnerman, Brian Cardiff
Desenvolvedor Manas Technology Solutions
Apareceu pela primeira vez 18 de junho de 2014 ; 7 anos atrás ( 18/06/2014 )
Versão estável
1.1.1  Edite isso no Wikidata / 26 de julho de 2021 ; 22 dias atrás ( 26 de julho de 2021 )
Disciplina de digitação estático , inferido , nominal , pato
Linguagem de implementação Cristal
Plataforma IA-32 (i386), x86-64 , AArch64
SO Linux , macOS , FreeBSD , OpenBSD
Licença Licença Apache 2.0
Extensões de nome de arquivo .cr
Local na rede Internet crystal-lang .org
Influenciado por
Ruby , C , Rust , Go , C # , Python

Cristal é um general-purpose , programação orientada a objeto linguagem, projetado e desenvolvido por Ary Borenszweig, Juan Wajnerman, Brian Cardiff e mais de 300 colaboradores. Com sintaxe inspirada na linguagem Ruby , é uma linguagem compilada com verificação de tipo estática , mas especificar os tipos de variáveis ​​ou argumentos de método geralmente é desnecessário. Os tipos são resolvidos por um algoritmo de inferência de tipo global avançado . Crystal está atualmente em desenvolvimento ativo. É lançado como software livre e de código aberto sob a licença Apache versão 2.0.

História

O trabalho na linguagem começou em junho de 2011, com o objetivo de combinar a elegância e produtividade do Ruby com a velocidade, eficiência e segurança de tipo de uma linguagem compilada. Inicialmente chamado de Joy , foi rapidamente renomeado para Crystal .

O compilador Crystal foi primeiro escrito em Ruby, mas depois reescrito em Crystal, tornando - se self-hosting , em novembro de 2013. A primeira versão oficial foi lançada em junho de 2014. Em julho de 2016, Crystal juntou-se ao índice TIOBE .

Descrição

Embora se assemelhe à linguagem Ruby na sintaxe, o Crystal compila para um código nativo muito mais eficiente usando um back-end LLVM , ao custo de impedir os aspectos dinâmicos do Ruby. No entanto, a inferência de tipo global avançada usada pelo compilador Crystal, combinada com o uso de tipos de união , dá ao Crystal a sensação de uma linguagem de script de nível superior mais do que muitas outras linguagens de programação comparáveis. A linguagem automatizou a coleta de lixo e atualmente oferece um coletor Boehm . O Crystal possui um sistema macro e suporta genéricos, bem como sobrecarga de método e operador. O modelo de simultaneidade do Crystal é inspirado em processos sequenciais de comunicação (CSP) e implementa fibras e canais leves (para comunicação entre fibras) inspirados em Go .

Exemplos

Olá Mundo

Esta é a maneira mais simples de escrever o programa Hello World no Crystal:

puts "Hello World!"

O mesmo que em Ruby.

Ou usando um estilo de programação orientado a objetos :

class Greeter
  def initialize(@name : String)
  end

  def salute
    puts "Hello #{@name}!"
  end
end

g = Greeter.new("world")
g.salute

Servidor HTTP

require "http/server"

server = HTTP::Server.new do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello world! The time is #{Time.local}"
end

server.bind_tcp("0.0.0.0", 8080)
puts "Listening on http://0.0.0.0:8080"
server.listen

Servidor de eco TCP

require "socket"

def handle_client(client)
  message = client.gets
  client.puts message
end

server = TCPServer.new("localhost", 1234)
while client = server.accept?
  spawn handle_client(client)
end

Tipos de inferência e união

O código a seguir define uma matriz contendo diferentes tipos sem ancestral comum utilizável. O Crystal cria automaticamente um tipo de união a partir dos tipos de itens individuais.

desired_things = [:unicorns, "butterflies", 1_000_000]
p typeof(desired_things.first) # typeof returns the compile time type, here (Symbol | String | Int32)
p desired_things.first.class   # the class method returns the runtime type, here Symbol

Simultaneidade

Os canais podem ser usados ​​para comunicação entre as fibras, que são iniciadas com a palavra-chave spawn.

channel = Channel(Int32).new

spawn do
  puts "Before first send"
  channel.send(1)
  puts "Before second send"
  channel.send(2)
end

puts "Before first receive"
value = channel.receive
puts value # => 1

puts "Before second receive"
value = channel.receive
puts value # => 2

Leitura adicional

  • St. Laurent, Simon; Balbaert, Ivo (1 de fevereiro de 2019), Programming Crystal (P1.0 ed.), Pragmatic Bookshelf , ISBN 978-1-68050-286-2
  • Wartala, Ramon (março de 2016), "Die Ruby-artige Programmiersprache Crystal" [The Ruby-like programming language Crystal], Linux Magazin (em alemão) (3/2016), ISSN  1432-640X

Referências

links externos