Кристалл (язык программирования)
![]() | |
Парадигма | Мультипарадигма : объектно-ориентированная , параллельная |
---|---|
Разработано | Ари Боренцвейг, Хуан Вайнерман, Брайан Кардифф |
Разработчик | Манас Технологии Солюшнс |
Впервые появился | 19 июня 2014 г [1] |
Стабильная версия | 1.13.1 [2] ![]() |
Дисциплина набора текста | статический , предполагаемый , номинальный , утка |
Язык реализации | Кристалл |
Платформа | ИА-32 (i386), x86-64 , AArch64 [3] |
ТЫ | Linux , macOS , FreeBSD , OpenBSD , Windows [3] |
Лицензия | Лицензия Апач 2.0 |
Расширения имен файлов | .cr |
Веб-сайт | кристалл-лэнг |
Под влиянием | |
Руби , Си , Ржавчина , Го , [4] С# , [4] Питон [4] |
Crystal — это высокого уровня общего назначения , объектно-ориентированный язык программирования спроектированный и разработанный Ари Боренцвейгом, Хуаном Вайнерманом, Брайаном Кардиффом и более чем 400 участниками. [5] Благодаря синтаксису, вдохновленному языком Ruby , [4] это компилируемый язык со статической проверкой типов , но указание типов переменных или аргументов метода обычно не требуется. Типы разрешаются с помощью усовершенствованного алгоритма вывода глобального типа . [6] [7] Кристалл в настоящее время находится в активной разработке. Он распространяется как бесплатное программное обеспечение с открытым исходным кодом по лицензии Apache версии 2.0.
История
[ редактировать ]Работа над языком началась в июне 2011 года. [8] с целью объединить элегантность и производительность Ruby со скоростью, эффективностью и типобезопасностью компилируемого языка. [9] [8] Первоначально названный Joy , он был быстро переименован в Crystal . [8]
Компилятор Crystal был сначала написан на Ruby, но позже переписан на Crystal, таким образом он стал автономным . , по состоянию на ноябрь 2013 года [update]. [10] Первая официальная версия была выпущена в июне 2014 года. [11] В июле 2016 года Crystal присоединилась к индексу TIOBE .
Описание
[ редактировать ]Несмотря на то, что Crystal похож на язык Ruby по синтаксису, он компилируется в гораздо более эффективный собственный код с использованием серверной части LLVM за счет исключения динамических аспектов Ruby. Расширенный вывод глобального типа, используемый компилятором Crystal, в сочетании с типами объединения , придает ему больше ощущения языка сценариев более высокого уровня, чем многие другие сопоставимые языки программирования. Он имеет автоматизированную сборку мусора и предлагает сборщик Бёма . Crystal обладает системой макросов и поддерживает дженерики, а также перегрузку методов и операторов. Его модель параллелизма основана на последовательных процессах взаимодействия (CSP) и реализует легкие волокна и каналы (для межволоконной связи), вдохновленные Go . [4]
Примеры
[ редактировать ]Привет, мир
[ редактировать ]Это самый простой способ написать программу Hello World в Crystal:
puts "Hello World!"
То же, что и в Руби.
Или используя объектно-ориентированный стиль программирования:
class Greeter
def initialize(@name : String)
end
def salute
puts "Hello #{@name}!"
end
end
g = Greeter.new("world")
g.salute
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
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
Вывод типа и типы объединения
[ редактировать ]Следующий код определяет массив, содержащий разные типы без общего предка, который можно использовать. Crystal автоматически создает тип объединения из типов отдельных элементов.
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
Параллелизм
[ редактировать ]Каналы могут использоваться для связи между волокнами, которые инициируются с помощью ключевого слова 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
Дальнейшее чтение
[ редактировать ]- Сен-Лоран, Симон; Бальберт, Иво (1 февраля 2019 г.), Programming Crystal (изд. P1.0), Pragmatic Bookshelf , ISBN 978-1-68050-286-2
- Дитрих, Джордж; Берналь, Гильерме (27 мая 2022 г.), Crystal Programming , Packt Publishing , ISBN 978-1801818674
- Вартала, Рамон (март 2016 г.), «Die Ruby-artige Programmiersprache Crystal» [Руби-подобный язык программирования Crystal], Linux Magazin (на немецком языке), вып. 3/2016, ISSN 1432-640X
Ссылки
[ редактировать ]- ^ «Выпущен Кристалл 0.1.0!» . кристалл-язык . 19 июня 2014 г.
- ^ «Выпуск 1.13.1» . 12 июля 2024 г. Проверено 22 июля 2024 г.
- ^ Jump up to: а б «Поддержка платформы Crystal» . Crystal-lang.org .
- ^ Jump up to: а б с д и
Боренцвейг, Ари (16 июня 2016 г.). «Выпущен Кристалл 0.18.0!» . Crystal-lang.org .
Он во многом вдохновлен Ruby и другими языками (например, C#, Go и Python).
- ^ «Соавторы» . Получено 25 июля 2019 г. — через GitHub .
- ^ Брайан Дж., Кардифф (9 сентября 2013 г.). «Вывод типа, часть 1» . Crystal-lang.org .
- ^ «Программирование с помощью Crystal: язык для людей и компьютеров » . devm.io. 3 июля 2023 г.
- ^ Jump up to: а б с Давид, Мария Инти (1 апреля 2016 г.). «История #CrystalLang» . Манас.тех .
- ^ Се, Адлер (20 сентября 2015 г.). «Почему язык программирования Crystal?» . motion-express.com .
- ^ Боренцвейг, Ари (14 ноября 2013 г.). «Прощай, Руби Четверг» . Crystal-lang.org .
- ^ Боренцвейг, Ари (19 июня 2014 г.). «Выпущен Кристалл 0.1.0!» . Crystal-lang.org .
Внешние ссылки
[ редактировать ]- Языки программирования
- Мультипарадигмальные языки программирования
- Объектно-ориентированные языки программирования
- Параллельные языки программирования
- Статически типизированные языки программирования
- Кроссплатформенное бесплатное программное обеспечение
- Кроссплатформенное программное обеспечение
- Бесплатные компиляторы и интерпретаторы
- Программное обеспечение, использующее лицензию Apache
- Языки программирования, созданные в 2014 году.
- программное обеспечение 2014 года