Кристалл (язык программирования) - Википедия - Crystal (programming language)
Парадигма | Мультипарадигма: объектно-ориентированный, одновременный |
---|---|
Разработано | Ари Боренсвейг, Хуан Вайнерман, Брайан Кардифф |
Разработчик | Технологические решения Манас |
Впервые появился | 18 июня 2014 г. |
Предварительный выпуск | 0.35.1 / 19 июня 2020 г.[1] |
Печатная дисциплина | статический, предполагаемый, структурный, утка |
Язык реализации | Кристалл |
Платформа | IA-32 (i386), x86-64, AArch64[2] |
Операционные системы | Linux, macOS, FreeBSD, OpenBSD[2] |
Лицензия | Лицензия Apache 2.0 |
Расширения имени файла | .cr |
Интернет сайт | кристальный язык |
Под влиянием | |
Рубин, C, Ржавчина, Идти,[3] C #,[3] Python[3] |
Кристалл это общее назначение, объектно-ориентированного программирования язык, разработанный и разработанный Ари Боренсвейгом, Хуаном Вайнерманом, Брайаном Кардиффом и более чем 300 участниками.[4] С синтаксисом, вдохновленным языком Рубин,[3] это компилируемый язык с статическая проверка типов, но указывать типы переменных или аргументов метода обычно не требуется. Типы разрешаются расширенным глобальным вывод типа алгоритм.[5] Кристалл в настоящее время находится в активной разработке. Он выпущен как бесплатное программное обеспечение с открытым исходным кодом под Лицензия Apache версия 2.0.
История
Работа над языком началась в июне 2011 года.[6] с целью объединения элегантности и производительности Ruby со скоростью, эффективностью и безопасностью типов компилируемого языка.[7][6] Первоначально названный Радость, он был быстро переименован в Кристалл.[6]
Компилятор Crystal сначала был написан на Ruby, но позже переписан на Crystal, таким образом став самостоятельный хостинг, по состоянию на ноябрь 2013 г.[8] Первая официальная версия была выпущена в июне 2014 года.[9] В июле 2016 года Кристал присоединилась к Индекс TIOBE.
Описание
Хотя по синтаксису напоминает язык Ruby, Crystal компилируется в гораздо более эффективный собственный код, используя LLVM backend, за счет исключения динамических аспектов Ruby. Однако расширенный вывод глобального типа, используемый компилятором Crystal, в сочетании с использованием типы профсоюзов, дает Crystal ощущение языка сценариев более высокого уровня в большей степени, чем многие другие сопоставимые языки программирования. Язык имеет автоматическую сборку мусора и в настоящее время предлагает Коллекционер Бема. Crystal обладает макросистемой и поддерживает дженерики, а также перегрузку методов и операторов. Модель параллелизма Crystal основана на связь последовательных процессов (CSP) и реализует легкие волокна и каналы (для связи между волокнами), вдохновленные Идти.[3]
Примеры
Привет, мир
Это самый простой способ написать Привет, мир программа в Crystal:
ставит "Привет, мир!"
То же, что и в Ruby.
Или используя объектно-ориентированного программирования стиль:
учебный класс Приветствующий def инициализировать(@имя : Нить) конец def салют ставит "Привет #{@имя}!" конецконецграмм = Приветствующий.новый("Мир")грамм.салют
HTTP сервер
требовать "http / сервер"сервер = HTTP::Сервер.новый делать |контекст| контекст.отклик.Тип содержимого = "текст / обычный" контекст.отклик.Распечатать «Привет, мир! Время пришло. #{Время.сейчас же}"конецсервер.bind_tcp("0.0.0.0", 8080)ставит "Прослушивание http://0.0.0.0:8080"сервер.Слушать
Эхо-сервер TCP
требовать "разъем"def handle_client(клиент) сообщение = клиент.получает клиент.ставит сообщениеконецсервер = TCPServer.новый("localhost", 1234)пока клиент = сервер.принимать? порождать handle_client(клиент)конец
Выведение типов и типы объединения
Следующий код определяет массив, содержащий разные типы без общего предка, который можно использовать. Crystal автоматически создает тип объединения из типов отдельных элементов.
желаемые_ вещи = [: единороги, "бабочки", 1_000_000]п тип(желаемые_ вещи.первый) # typeof возвращает тип времени компиляции, здесь (Int32 | String | Symbol)п желаемые_ вещи.первый.учебный класс # метод класса возвращает тип среды выполнения, здесь Symbol
Параллелизм
Каналы могут использоваться для связи между волокнами, которые инициируются с помощью ключевого слова порождать
.
канал = Канал(Int32).новыйпорождать делать ставит "Перед первой отправкой" канал.Отправить(1) ставит "Перед второй отправкой" канал.Отправить(2)конецставит «Перед первым получением»ценить = канал.получитьставит ценить # => 1ставит «До второго приема»ценить = канал.получитьставит ценить # => 2
дальнейшее чтение
- Сен-Лоран, Саймон; Бальберт, Иво (1 февраля 2019 г.), Программирование кристалла (P1.0 ред.), Прагматическая книжная полка, ISBN 978-1-68050-286-2
- Вартала, Рамон (март 2016 г.), "Die Ruby-artige Programmiersprache Crystal" [Ruby-подобный язык программирования Crystal], Linux Magazin (на немецком языке) (03/2016), ISSN 1432-640X
Рекомендации
- ^ «Релизы». Получено 18 февраля, 2020 - через GitHub.
- ^ а б «Поддержка платформы». Кристалл Вики - через GitHub.
- ^ а б c d е Бореншвейг, Ари (16 июня 2016 г.). "Кристалл 0.18.0 выпущен!". crystal-lang.org.
Он во многом вдохновлен Ruby и другими языками (такими как C #, Go и Python).
- ^ «Авторы». Получено 25 июля, 2019 - через GitHub.
- ^ Брайан Дж., Кардифф (9 сентября 2013 г.). "Вывод типа, часть 1". crystal-lang.org.
- ^ а б c Давид, Мария Инти (1 апреля 2016 г.). "История #CrystalLang". manas.tech.
- ^ Ше, Адлер (20 сентября 2015 г.). "Почему язык программирования Crystal?". motion-express.com.
- ^ Бореншвейг, Ари (14 ноября 2013 г.). «Прощай, Руби, четверг». crystal-lang.org.
- ^ Бореншвейг, Ари (19 июня 2014 г.). "Кристалл 0.1.0 выпущен!". crystal-lang.org.