Crystal (язык программирования)
Crystal | |
---|---|
Класс языка | язык программирования и объектно-ориентированный |
Появился в | 2014[2] |
Разработчик | Арье Боренвейг[вд] и Manas Technology Solutions[вд] |
Расширение файлов |
.cr |
Выпуск | |
Испытал влияние | Ruby, Си, C#, Python[3], Go и Rust |
Лицензия | Apache License 2.0[4] |
Сайт | crystal-lang.org (англ.) |
Платформа | IA-32, x86-64, AArch64[вд] и Web Assembly[вд] |
ОС | macOS, Linux, FreeBSD, OpenBSD и WebAssembly |
Crystal — объектно-ориентированный язык программирования общего назначения, спроектированный и разработанный Арье Боренцвейгом, Хуаном Вайнерманом и Брайаном Кардиффом. Развивается сообществом из более 300 разработчиков. Обладает Ruby-подобным синтаксисом, но, в отличие от Ruby, является компилируемым и статически типизированным языком, использующим вывод типов (в связи с чем явное объявление типов, как и в Ruby, не обязательно). Распространяется как свободное и открытое программное обеспечение под лицензией Apache версии 2.0.
Программы на Crystal компилируются средствами LLVM, при этом утрачены некоторые динамические аспекты, имеющиеся в Ruby, но эффективность программ намного выше, а производительность сравнима с программами на Си[5][6][7]. Язык использует сборщик мусора Бёма[англ.], обладает системой макросов, поддерживает обобщённое программирование, перегрузку методов и операторов. Реализован интерфейс вызова функций из двоичных библиотек на Си и C++, при этом синтаксис взаимодействия с такими библиотеками максимально упрощён, что позволяет легко создавать библиотеки-обёртки, а не писать весь код с нуля. Также Crystal поддерживает ассемблерные вставки и прямое обращение по указателям — это считается небезопасной практикой, но не запрещено, поскольку необходимо, в частности, и для взаимодействия с функциями из внешних библиотек.
История
[править | править код]Работа над новым языком программирования была начата в июне 2011 года в компании Manas. Разработчики поставили перед собой цель создать язык с элегантностью и продуктивностью Ruby и скоростью, эффективностью и безопасностью типов, присущих компилируемым языкам программирования. Первоначально разработка получила название Joy, однако позже была переименована в Crystal.
Первый официальный выпуск языка состоялся в июне 2014 года. Изначально компилятор языка был написан на Ruby, пока в 2013 году не был переписан на Crystal. В июле 2016 года вошёл в индекс TIOBE. 22 марта 2021 года разработчики выпустили первую стабильную версия языка — 1.0.0.
Примеры
[править | править код]puts "Hello World!"
или в объектно-ориентированном стиле:
class Greeter
def initialize(@name : String)
end
def salute
"Hello #{@name}!"
end
end
g = Greeter.new("world")
puts g.salute
Простейший HTTP-сервер:
require "http/server"
server = HTTP::Server.new do |context|
context.response.content_type = "text/plain"
context.response.print "Hello world!"
end
server.bind_tcp 8080
puts "Listening on http://127.0.0.1:8080"
server.listen
Следующий код объявляет коллекцию (массив), состоящую из элементов различных типов данных; Crystal в данном случае автоматически создаёт тип объединения с индивидуальными типами данных элементов массива:
desired_things = [:unicorns, "butterflies", 1_000_000]
p typeof(desired_things.first) # typeof возвращает типы данных на момент компиляции, в данном случае (Int32 | String | Symbol)
p desired_things.first.class # метод класса возвращает тип данных времени исполнения, в данном случае Symbol
Каналы (Channel
) используются для коммуникации между фиберами, создаваемыми при помощи команды spawn
:
channel = Channel(Int32).new
spawn do
puts "Перед первой отправкой сообщения"
channel.send(1)
puts "Перед второй отправкой сообщения"
channel.send(2)
end
puts "Перед первым получением"
value = channel.receive
puts value # => 1
puts "Перед вторым получением"
value = channel.receive
puts value # => 2
Примечания
[править | править код]- ↑ Release 1.14.0 — 2024.
- ↑ https://crystal-lang.org/2014/06/19/crystal-0.1.0-released.html
- ↑ https://www.rankred.com/new-programming-languages-to-learn/
- ↑ https://github.com/crystal-lang/crystal/blob/master/LICENSE
- ↑ kostya/benchmarks . GitHub. Дата обращения: 18 февраля 2016. Архивировано 4 марта 2017 года.
- ↑ kostya/crystal-benchmarks-game . GitHub. Дата обращения: 18 февраля 2016. Архивировано 11 июня 2018 года.
- ↑ smarr/are-we-fast-yet . GitHub. Дата обращения: 18 февраля 2016.
Литература
[править | править код]- Simon St. Laurent, Ivo Balbaert. Programming Crystal: Create High-Performance, Safe, Concurrent Apps. — 1-е изд. — Pragmatic Bookshelf, 2019. — 246 с. — ISBN 1680502867. — ISBN 978-1680502862.