Crystal (язык программирования)

редактировать
Crystal
Crystal language logo.svg
Парадигма Многопарадигма : объектно-ориентированный, параллельный
Разработан Ари Бореншвейг, Хуан Вайнерман, Брайан Кардифф
Разработчик Технологические решения Манас
Впервые появилось18 июня 2014 г.; 6 лет назад (18.06.2014)
Предварительный выпуск 0.35.1 / 19 июня 2020 г.; 4 месяца назад (2020-06-19)
Дисциплина печати статическая, выведенная, структурная, утка
язык реализацииCrystal
Платформа IA-32 (i386), x86-64, AArch64
OS Linux, macOS, FreeBSD, OpenBSD
Лицензия Лицензия Apache 2.0
Расширения имен файлов .cr
Веб-сайтcrystal-lang.org
Создан под влиянием
Ruby, C, Rust, Go,C#,Python

Crystal - это универсальный, объектно-ориентированный язык программирования, разработанный и разработанный Эри Боренсвейг, Хуан Вайнерман, Брайан Кардифф и более 300 участников. Благодаря синтаксису, вдохновленному языком Ruby, это скомпилированный язык с статической проверкой типов, но указывать типы переменных или аргументов метода обычно не требуется. Типы разрешаются с помощью расширенного глобального алгоритма вывода типа . Кристалл в настоящее время находится в активной разработке. Он выпущен как бесплатное программное обеспечение с открытым исходным кодом под лицензией Apache License версии 2.0.

Содержание
  • 1 История
  • 2 Описание
  • 3 Примеры
    • 3.1 Hello World
    • 3.2 HTTP-сервер
    • 3.3 TCP-эхо-сервер
    • 3.4 Типы вывода и объединения
    • 3.5 Параллелизм
  • 4 Дополнительная литература
  • 5 Ссылки
  • 6 Внешние ссылки
История

Работа над языком началась в июне 2011 года с целью объединить элегантность и производительность Ruby с скорость, эффективность и безопасность типов компилируемого языка. Первоначально названный Joy, он был быстро переименован в Crystal.

Компилятор Crystal сначала был написан на Ruby, но позже переписан на Crystal, таким образом, с ноября 2013 года он стал самообслуживанием. первая официальная версия была выпущена в июне 2014 года. В июле 2016 года Crystal присоединился к TIOBE index.

Description

Хотя синтаксис напоминал язык Ruby, Crystal компилируется в гораздо более эффективный собственный код, используя LLVM backend, за счет исключения динамических аспектов Ruby. Однако расширенный вывод глобального типа, используемый компилятором Crystal, в сочетании с использованием типов объединения, дает Crystal ощущение языка сценариев более высокого уровня в большей степени, чем многие другие сопоставимые языки программирования. В языке есть автоматизированная сборка мусора, и в настоящее время предлагается сборщик Boehm. Crystal обладает макросистемой и поддерживает дженерики, а также перегрузку методов и операторов. Модель параллелизма Crystal основана на обмене последовательными процессами (CSP) и реализует легкие волокна и каналы (для связи между волокнами), вдохновленные Go.

примерами

Hello World

Это самый простой способ написать программу Hello World в Crystal:

помещает «Hello World!»

То же, что и в Ruby.

Или используя стиль объектно-ориентированного программирования :

class Greeter def initialize (@name: String) end def salute помещает "Hello # {@ name}!" end end g = Greeter.new ("world") g.salute

HTTP-сервер

требует "http / server" server = HTTP :: Server.new do | context | context.response.content_type = "text / plain" context.response.print "Привет, мир! Время # {Time.now}" end server.bind_tcp ("0.0.0.0", 8080) ставит "Прослушивание 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) а client = server.accept? spawn handle_client (client) end

Типы вывода и объединения

Следующий код определяет массив, содержащий различные типы без общего предка, который можно использовать. Crystal автоматически создает тип объединения из типов отдельных элементов.

desire_things = [: unicorns, "butterflies", 1_000_000] p typeof (desire_things.first) # typeof возвращает тип времени компиляции, здесь (Int32 | String | Symbol) p desire_things.first.class # метод класса возвращает тип среды выполнения, здесь Symbol

Concurrency

Каналы могут использоваться для связи между волокнами, которые инициируются с помощью ключевого слова spawn.

channel = Channel (Int32).new spawn do put "Before первая отправка "channel.send (1) помещает" Перед второй отправкой "channel.send (2) end помещает" Перед первым приемом "value = channel.receive помещает значение # =>1 помещает" Перед вторым приемом "value = channel.receive помещает значение # =>2
Дополнительная литература
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-16 10:25:24
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте