Парадигма | Мультипарадигма : объектно-ориентированная , параллельная |
---|---|
Разработано | Ари Боренсвейг, Хуан Вайнерман, Брайан Кардифф |
Разработчик | Технологические решения Манас |
Впервые появился | 18 июня 2014 г . необходима ссылка ] | [
Предварительный выпуск | 0.36.1 [1] / 2 февраля 2021 г . |
Печатная дисциплина | статический , предполагаемый , структурный , утка |
Язык реализации | Кристалл |
Платформа | IA-32 (i386), x86-64 , AArch64 [2] |
Операционные системы | Linux , macOS , FreeBSD , OpenBSD [2] |
Лицензия | Лицензия Apache 2.0 |
Расширения имени файла | .cr |
Интернет сайт | crystal-lang |
Под влиянием | |
Ruby , C , Rust , Go , [3] C # , [3] Python [3] |
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
Ссылки [ править ]
- ^ "Выпуск 0.36.1" . 2 февраля 2021 . Проверено 8 февраля 2021 года .
- ^ a b «Поддержка платформы» . Crystal Wiki - через GitHub .
- ^ a b c d e Бореншвейг, Ари (16 июня 2016 г.). "Кристалл 0.18.0 выпущен!" . crystal-lang.org .
Он во многом вдохновлен Ruby и другими языками (такими как C #, Go и Python).
- ^ «Авторы» . Проверено 25 июля 2019 г. - через GitHub .
- ↑ Брайан Дж., Кардифф (9 сентября 2013 г.). «Вывод типа, часть 1» . crystal-lang.org .
- ^ a b c Дэвид, Мария Инти (1 апреля 2016 г.). «История создания #CrystalLang» . manas.tech .
- ^ Се, Адлер (20 сентября 2015). "Почему язык программирования Crystal?" . motion-express.com .
- ^ Borenszweig, Ары (14 ноября 2013). «Прощай, Руби, четверг» . crystal-lang.org .
- ^ Borenszweig, Ары (19 июня 2014). "Кристалл 0.1.0 выпущен!" . crystal-lang.org .
Внешние ссылки [ править ]
- Официальный веб-сайт
- Crystal-lang на GitHub
- Субреддит / r / crystal_programming
- Хрустальные объявления