Crystal (langage de programmation)

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
Page d'aide sur l'homonymie Pour les articles homonymes, voir Crystal.

Crystal est un langage de programmation orienté objet conçu et développé par Ary Borenszweig et Juan Wajnerman, ainsi que par plus d'une centaine de contributeurs listés[1]. Crystal est développé de manière open-source et sa syntaxe est inspirée par Ruby. Le type des variables et arguments est vérifié statiquement sans qu'il soit nécessaire de le préciser dans le code.

Ce langage est officiellement sorti en juin 2014[2],[3]. Bien que le compilateur Crystal original ait été écrit en Ruby, en 2013, un nouveau compilateur a été écrit dans le langage Crystal lui-même[4]. La version actuelle est la 0.23.1, et le langage est dans une phase de développement active.

Description[modifier | modifier le code]

Bien qu'il ressemble au langage Ruby dans sa syntaxe, Crystal se compile en un code natif beaucoup plus efficace en utilisant un backend LLVM[5]. Le prix à payer pour cela est l'interdiction d'utiliser les aspects dynamiques de Ruby. De récents tests de performance ont démontré que Crystal a une performance largement similaire à celle du C pour une vaste étendue de taches de computation[6],[7],[8]. Le langage a automatisé le ramassage de miettes et offre actuellement un collecteur de Boehm. Crystal possède un système de macros, supporte la généricité et la surcharge d'opérateurs.


Exemples[modifier | modifier le code]

Hello World[modifier | modifier le code]

Voici la manière la plus simple d'écrire un "Hello World" en Crystal:

puts "Hello World!"

Ou en utilisant un style de programmation orientée objet:

class Greeter
  def initialize(name)
    @name = name.capitalize
  end

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

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

Serveur HTTP[modifier | modifier le code]

# A very basic HTTP server
require "http/server"

server = HTTP::Server.new do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello world, got #{context.request.path}!"
end

puts "Listening on http://127.0.0.1:8080"
server.listen(8080)

Références[modifier | modifier le code]

Liens externes[modifier | modifier le code]