Jump to content

Кристалл (язык программирования)

Кристалл
Парадигма Мультипарадигма : объектно-ориентированная , параллельная
Разработано Ари Боренцвейг, Хуан Вайнерман, Брайан Кардифф
Разработчик Манас Технологии Солюшнс
Впервые появился 19 июня 2014 г .; 10 лет назад ( 19.06.2014 ) [1]
Стабильная версия
1.13.1 [2]  Отредактируйте это в Викиданных / 12 июля 2024 г .; 21 день назад ( 12 июля 2024 г. )
Дисциплина набора текста статический , предполагаемый , номинальный , утка
Язык реализации Кристалл
Платформа ИА-32 (i386), x86-64 , AArch64 [3]
ТЫ Linux , macOS , FreeBSD , OpenBSD , Windows [3]
Лицензия Лицензия Апач 2.0
Расширения имен файлов .cr
Веб-сайт кристалл-лэнг .org
Под влиянием
Руби , Си , Ржавчина , Го , [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 года . [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
  1. ^ «Выпущен Кристалл 0.1.0!» . кристалл-язык . 19 июня 2014 г.
  2. ^ «Выпуск 1.13.1» . 12 июля 2024 г. Проверено 22 июля 2024 г.
  3. ^ Jump up to: а б «Поддержка платформы Crystal» . Crystal-lang.org .
  4. ^ Jump up to: а б с д и Боренцвейг, Ари (16 июня 2016 г.). «Выпущен Кристалл 0.18.0!» . Crystal-lang.org . Он во многом вдохновлен Ruby и другими языками (например, C#, Go и Python).
  5. ^ «Соавторы» . Получено 25 июля 2019 г. — через GitHub .
  6. ^ Брайан Дж., Кардифф (9 сентября 2013 г.). «Вывод типа, часть 1» . Crystal-lang.org .
  7. ^ «Программирование с помощью Crystal: язык для людей и компьютеров » . devm.io. ​3 июля 2023 г.
  8. ^ Jump up to: а б с Давид, Мария Инти (1 апреля 2016 г.). «История #CrystalLang» . Манас.тех .
  9. ^ Се, Адлер (20 сентября 2015 г.). «Почему язык программирования Crystal?» . motion-express.com .
  10. ^ Боренцвейг, Ари (14 ноября 2013 г.). «Прощай, Руби Четверг» . Crystal-lang.org .
  11. ^ Боренцвейг, Ари (19 июня 2014 г.). «Выпущен Кристалл 0.1.0!» . Crystal-lang.org .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 36a1827ec727e4b3625a37fc064a0a9d__1711050600
URL1:https://arc.ask3.ru/arc/aa/36/9d/36a1827ec727e4b3625a37fc064a0a9d.html
Заголовок, (Title) документа по адресу, URL1:
Crystal (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)