Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

История [ править ]

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

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

Описание [ править ]

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

Примеры [ править ]

Привет, мир [ править ]

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

ставит  "Hello World!"

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

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

class  Greeter  def  initialize ( @name  :  String )  конец def  salute  помещает  "Hello # { @name } !"  конец конецg  =  Приветствующий . новый ( "мир" ) g . салют

HTTP-сервер [ править ]

требуется  "http / сервер"сервер  =  HTTP :: Сервер . новый  делать  | контекст |  контекст . ответ . content_type  =  "текст / простой"  контекст . ответ . print  "Привет, мир! Время # { Время . сейчас } " конецсервер . bind_tcp ( "0.0.0.0" ,  8080 ) устанавливает  сервер "Прослушивание http://0.0.0.0:8080" . Слушать

TCP эхо-сервер [ править ]

требуется  "розетка"def  handle_client ( client )  message  =  client . получает  клиент . кладет  конец сообщениясервер  =  TCPServer . new ( "localhost" ,  1234 ), а  client  =  server . принимать?  spawn  handle_client ( клиент ) конец

Типы вывода и объединения [ править ]

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

желаемый_things  =  [ : единороги ,  "бабочки" ,  1_000_000 ] p  typeof ( желаемые_ вещи . сначала )  # typeof возвращает тип времени компиляции, здесь (Int32 | Строка | Символ) p  желаемые_ вещи . первый . class  # метод класса возвращает тип среды выполнения, здесь Symbol

Параллелизм [ править ]

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

канал  =  Канал ( Int32 ) . новыйspawn  do  помещает  канал "Перед первой отправкой"  . send ( 1 ) помещает канал "Перед второй отправкой" . отправить ( 2 ) конец   ставит  «Перед первым получить» значение  =  канал . получить значение put  # => 1 ставит  «Перед вторым получить» значение  =  канал . получить значение put  # => 2 

Дальнейшее чтение [ править ]

  • Сен-Лоран, Саймон; Бальберт, Иво (1 февраля 2019 г.), Programming Crystal (P1.0 ed.), Pragmatic Bookshelf , ISBN 978-1-68050-286-2
  • Вартала, Рамон (март 2016 г.), «Die Ruby-artige Programmiersprache Crystal» [Ruby-подобный язык программирования Crystal], Linux Magazin (на немецком языке) (03/2016), ISSN  1432-640X

Ссылки [ править ]

  1. ^ "Выпуск 0.36.1" . 2 февраля 2021 . Проверено 8 февраля 2021 года .
  2. ^ a b «Поддержка платформы» . Crystal Wiki - через GitHub .
  3. ^ a b c d e Бореншвейг, Ари (16 июня 2016 г.). "Кристалл 0.18.0 выпущен!" . crystal-lang.org . Он во многом вдохновлен Ruby и другими языками (такими как C #, Go и Python).
  4. ^ «Авторы» . Проверено 25 июля 2019 г. - через GitHub .
  5. Брайан Дж., Кардифф (9 сентября 2013 г.). «Вывод типа, часть 1» . crystal-lang.org .
  6. ^ a b c Дэвид, Мария Инти (1 апреля 2016 г.). «История создания #CrystalLang» . manas.tech .
  7. ^ Се, Адлер (20 сентября 2015). "Почему язык программирования Crystal?" . motion-express.com .
  8. ^ Borenszweig, Ары (14 ноября 2013). «Прощай, Руби, четверг» . crystal-lang.org .
  9. ^ Borenszweig, Ары (19 июня 2014). "Кристалл 0.1.0 выпущен!" . crystal-lang.org .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Crystal-lang на GitHub
  • Субреддит / r / crystal_programming
  • Хрустальные объявления