HOME

TheInfoList



OR:

Crystal is a high-level general-purpose,
object-oriented programming Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impl ...
language, designed and developed by Ary Borenszweig, Juan Wajnerman, Brian Cardiff and more than 400 contributors. With syntax inspired by the language
Ruby Ruby is a pinkish-red-to-blood-red-colored gemstone, a variety of the mineral corundum ( aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sapph ...
, it is a
compiled language Compiled language categorizes a programming language as used with a compiler and generally implies not used with an interpreter. But, since any language can theoretically be compiled or interpreted the term lacks clarity. In practice, for some lan ...
with static type-checking, but specifying the types of variables or method arguments is generally unneeded. Types are resolved by an advanced global
type inference Type inference, sometimes called type reconstruction, refers to the automatic detection of the type of an expression in a formal language. These include programming languages and mathematical type systems, but also natural languages in some bran ...
algorithm. Crystal is currently in active development. It is released as
free and open-source software Free and open-source software (FOSS) is software available under a license that grants users the right to use, modify, and distribute the software modified or not to everyone free of charge. FOSS is an inclusive umbrella term encompassing free ...
under the
Apache License The Apache License is a permissive free software license written by the Apache Software Foundation (ASF). It allows users to use the software for any purpose, to distribute it, to modify it, and to distribute modified versions of the software ...
version 2.0.


History

Work on the language began in June 2011, with the aim of merging the elegance and productivity of Ruby with the speed, efficiency, and type safety of a compiled language. Initially named ''Joy'', it was quickly renamed to ''Crystal''. The Crystal compiler was first written in Ruby, but later rewritten in Crystal, thus becoming self-hosting, . The first official version was released in June 2014. In July 2016, Crystal joined the TIOBE index.


Description

Although resembling the Ruby language in syntax, Crystal compiles to much more efficient native code using an
LLVM LLVM, also called LLVM Core, is a target-independent optimizer and code generator. It can be used to develop a Compiler#Front end, frontend for any programming language and a Compiler#Back end, backend for any instruction set architecture. LLVM i ...
backend, at the cost of precluding the dynamic aspects of Ruby. The advanced global type inference used by the Crystal compiler, combined with union types, gives it more the feel of a higher-level scripting language than many other comparable programming languages. It has automated garbage collection and offers a Boehm collector. Crystal possesses a macro system and supports generics as well as method and operator overloading. Its concurrency model is inspired by
communicating sequential processes In computer science, communicating sequential processes (CSP) is a formal language for describing patterns of interaction in concurrent systems. It is a member of the family of mathematical theories of concurrency known as process algebras, or p ...
(CSP) and implements lightweight fibers and channels (for interfiber communication), inspired by Go.


Examples


Hello World

This is the simplest way to write the Hello World program in Crystal: puts "Hello World!" The same as in Ruby. Or using an
object-oriented programming Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impl ...
style: class Greeter def initialize(@name : String) end def salute puts "Hello #!" end end g = Greeter.new("world") g.salute


HTTP server

require "http/server" server = HTTP::Server.new do , context, context.response.content_type = "text/plain" context.response.print "Hello world! The time is #" end server.bind_tcp("0.0.0.0", 8080) puts "Listening on http://0.0.0.0:8080" server.listen


TCP echo server

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


Type inference and union types

The following code defines an array containing different types with no usable common ancestor. Crystal automatically creates a union type out of the types of the individual items. desired_things = unicorns, "butterflies", 1_000_000p 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


Concurrency

Channels can be used to communicate between fibers, which are initiated using the keyword 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


Adoption

In 2020, it was reported that the infotainment units in vehicles produced by Nikola Corporation were written in Crystal. Much of the backend of the Kagi search engine is written with Crystal.


Further reading

* * *


References


External links

*
Documentation
* {{Github, crystal-lang
/r/crystal_programming subreddit

Crystal Announcements
Programming languages Multi-paradigm programming languages Object-oriented programming languages Concurrent programming languages Statically typed programming languages Cross-platform free software Cross-platform software Free and open source compilers Software using the Apache license Programming languages created in 2014 2014 software