Crystal is a programming language created in 2014 by Ary Borenszweig.
#61on PLDB | 9Years Old | 27.1kUsers |
5Books | 6Papers | 8kRepos |
In computer software programming languages, Crystal is a general-purpose, object-oriented programming language, designed and developed by Ary Borenszweig and Juan Wajnerman and more than 200 contributors. With syntax inspired by the language Ruby, it is a compiled language 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 algorithm. Read more on Wikipedia...
# Type your code here, or load an example.
# compile with --prelude=empty
fun square(num : Int32) : Int32
num &* num
end
puts "Hello, world!"
puts "Hello World"
# Hello world in Crystal
puts "Hello World"
#!/usr/bin/env bin/crystal --run
require "../../spec_helper"
describe "Type inference: declare var" do
it "types declare var" do
assert_type("a :: Int32") { int32 }
end
it "types declare var and reads it" do
assert_type("a :: Int32; a") { int32 }
end
it "types declare var and changes its type" do
assert_type("a :: Int32; while 1 == 2; a = 'a'; end; a") { union_of(int32, char) }
end
it "declares instance var which appears in initialize" do
result = assert_type("
class Foo
@x :: Int32
end
Foo.new") { types["Foo"] }
mod = result.program
foo = mod.types["Foo"] as NonGenericClassType
foo.instance_vars["@x"].type.should eq(mod.int32)
end
it "declares instance var of generic class" do
result = assert_type("
class Foo(T)
@x :: T
end
Foo(Int32).new") do
foo = types["Foo"] as GenericClassType
foo_i32 = foo.instantiate([int32] of Type | ASTNode)
foo_i32.lookup_instance_var("@x").type.should eq(int32)
foo_i32
end
end
it "declares instance var of generic class after reopen" do
result = assert_type("
class Foo(T)
end
f = Foo(Int32).new
class Foo(T)
@x :: T
end
f") do
foo = types["Foo"] as GenericClassType
foo_i32 = foo.instantiate([int32] of Type | ASTNode)
foo_i32.lookup_instance_var("@x").type.should eq(int32)
foo_i32
end
end
it "declares an instance variable in initialize" do
assert_type("
class Foo
def initialize
@x :: Int32
end
def x
@x
end
end
Foo.new.x
") { int32 }
end
end
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
abstract do if nil? self unless alias else in of sizeof until as elsif include out struct when as? end instancesizeof pointerof super while asm ensure isa? private then with begin enum lib protected true yield break extend macro require type case false module rescue typeof class for next return uninitialized def fun nil select union
Feature | Supported | Token | Example |
---|---|---|---|
While Loops | ✓ | ||
Conditionals | ✓ | ||
Functions | ✓ | ||
Classes | ✓ | ||
File Imports | ✓ | require | require "../../spec_helper" |
Booleans | ✓ | true false | |
Strings | ✓ | " | "Hello world" |
Print() Debugging | ✓ | puts | |
Comments | ✓ | # A comment |
|
Line Comments | ✓ | # | # A comment |
Type Inference | ✓ | ||
Semantic Indentation | X | ||
MultiLine Comments | X |
title | authors | year | publisher |
---|---|---|---|
Crystal Clear: A Human-Powered Methodology for Small Teams: A Human-Powered Methodology for Small Teams | Cockburn, Alistair and Paul Becker, Alistair | 2004 | Addison-Wesley Professional |
Crystal Reports .net Programming | Bischof and Brian | 2004 | Bischof Systems |
Crystal Reports Professional Results | Peck, George | 2003 | McGraw-Hill Education |
Crystal Programming: A project-based introduction to building efficient, safe, and readable web and CLI applications | Dietrich, George and Bernal, Guilherme | 2022 | Packt Publishing |
Crystal Reports XI Official Guide | Fitzgerald, Neil and et al. | 2006 | Sams Publishing |
title | authors | year | citations | influentialCitations |
---|---|---|---|---|
Crystal engineering with DNA | Christine R Laramy and Matthew N. O’Brien and C. Mirkin | 2019 | 103 | 1 |
FOX: Modular Approach to Crystal Structure Determination from Powder Diffraction | V. Favre-Nicolin and R. Černý | 2004 | 34 | 0 |
Crystal Gazer | Shoaib Akram and Jennifer B. Sartor and K. McKinley and L. Eeckhout | 2019 | 7 | 0 |
Crystal Reference Manual Version 3.0 | M. Jacquemin and J. A. Yang | 1991 | 3 | 0 |
3DStructGen: an interactive web-based 3D structure generation for non-periodic molecule and crystal | Pin Chen and Yu Wang and Hui Yan and Sen Gao and Zexin Xu and Yangzhong Li and Qing Mo and Junkang Huang and Jun Tao and Gechuanqi Pan and Jiahui Li and Yunfei Du | 2020 | 2 | 0 |
Simulation of a micro-milling single crystal copper process based on crystal plastic constitutive theory | Luan Yihan and Meng Xiangyue and Xue Liang and S. Liang and L. Xiaohong | 2020 | 1 | 0 |