The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск языка программирования Crystal 1.6

17.10.2022 13:53

Опубликован релиз языка программирования Crystal 1.6, разработчики которого пытаются совместить удобство разработки на языке Ruby с высокой производительностью приложений, свойственной языку Си. Синтаксис Crystal близок к языку Ruby, но не полностью совместим с ним, несмотря на то, что без переработки выполняются некоторые ruby-программы. Код компилятора написан на языке Crystal и распространяется под лицензией Apache 2.0.

В языке применяется статическая проверка типов, реализованная без необходимости явного указания типов переменных и аргументов методов в коде. Программы на Crystal компилируются в исполняемые файлы, с вычислением макросов и генерацией кода во время компиляции. В программах на языке Crystal допускается подключение биндингов, написанных на языке Си. Распараллеливание выполнения кода осуществляется при помощи ключевого слова "spawn", которое позволяет запустить фоновую задачу в асинхронном режиме, не блокируя основной поток, в виде легковесных потоков, именуемых файберами (Fiber).

Стандартная библиотека предоставляет большой набор типовых функций, в том числе средства для обработки CSV, YAML, и JSON, компоненты для создания HTTP-серверов и поддержки WebSocket. В процессе разработки удобно использовать команду "crystal play" которая формирует web-интерфейс (по умолчанию localhost:8080) для интерактивного выполнения кода на языке Crystal.

Основные изменения:

  • Изменена логика перегрузки - при перегрузке объединения типов теперь рассматриваются раньше одиночных типов. Например, выполнение нижеприведённого кода теперь выведет значение true, а не 'а', как было в прошлых выпусках.
    
       module Foo(T)
       end
    
       class Bar1
         include Foo(Int32)
       end
    
       class Bar2
         include Foo(Int32)
       end
    
       def foo(x : Foo(Int32))
         'a'
       end
    
       def foo(x : Bar1 | Bar2)
         true
       end
    
       foo(Bar1.new)
    
    
  • Для всех платформ реализованы методы #system_echo и #system_raw, что позволило перевести в разряд устаревших макросы FileDescriptor "cooked_from_tc_mode!", "noecho_from_tc_mode!" и "raw_from_tc_mode!", а методы #noecho! и #raw! теперь возвращают nil вместо значения LibC.tcsetattr.
  • Улучшен API File, который теперь возвращает внутренний объект (возвращается File::Info вместо Crystal::System::FileInfo).
  • Улучшена работа в режиме интерпретатора. Для включения поддержки интерпретатора можно использовать команду "make interpreter = 1".
  • В компилятор и стандартную библиотеку включены новые оптимизации производительности.
  • Улучшена поддержка платформы Windows в компиляторе, в том числе для Windows добавлена возможность сборки интерпретатора и поддержка Mutex.
  • Добавлена поддержка Unicode 15.0 и реализован API для нормализации последовательностей Unicode.


  1. Главная ссылка к новости (https://crystal-lang.org/2022/...)
  2. OpenNews: Выпуск языка программирования Crystal 1.5
  3. OpenNews: Релиз языка программирования Nim 1.6.0
  4. OpenNews: Дрю ДеВолт представил язык системного программирования Hare
  5. OpenNews: Сотрудник Google развивает язык программирования Carbon, нацеленный на замену C++
  6. OpenNews: Выпуск языка программирования Julia 1.8
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/57926-crystal
Ключевые слова: crystal
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (48) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:59, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Этим кто-то пользуется? Кажется оно ещё мертвее Ruby
     
     
  • 2.2, Аноним (2), 14:15, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    я

    я им пользуюсь

     
     
  • 3.45, Аноним (45), 21:21, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Why people leaving crystal?
     
  • 2.3, Аноним (3), 14:24, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Manas Technology Solutions, 84 codes, Nikola Motor Company, PlaceOS.
     
     
  • 3.7, Анонус (?), 14:57, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +9 +/
    >Nikola Motor Company

    Это которая макеты электрогрузовиков под горку катала?

     
     
  • 4.56, Аноним (56), 06:45, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Она самая;)
     
  • 2.11, YetAnotherOnanym (ok), 16:06, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Лишь бы ты им не пользовался. А то ныть начнёшь "сделайте мне то, добавьте мне это, как я привык в том одном-единственном языке, который сумел осилить".
     
  • 2.18, Аноним (18), 16:55, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Я пользуюсь
     
     
  • 3.47, Hck3r (?), 22:24, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А для чего?
    Web?
     
     
  • 4.61, iiiypuk (?), 13:43, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да, когда узнал о языке, начал использовать вместо Go, так как раньше я на Ruby писал.

    А так пишу ещё мелкие консольные утилиты, где необходима работа с интернетом, когда лень на Си писать.

    В целом мне нравится язык и стандартная библиотека, но скорость компиляции убивает.

     

  • 1.4, penetrator (?), 14:25, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –11 +/
    удобство разработки на языке Ruby

    поржал

     
  • 1.9, Аноним (9), 15:14, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Да этим только легаси ускорять.
     
  • 1.12, inferrna (ok), 16:10, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Версия 1.6
    >Изменена логика перегрузки

    В нормальных языках такое делают или в версии 0.х, или в отдельной мажоронй ветке. А тут кто-то через полгода из реп накатит, а потом будет попу вазелином мазать.

     
     
  • 2.19, iiiypuk (?), 16:57, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Такие вещи там грамотно проектрируют.

    Я компилировал код с фичами из новых версий старым компилятором и ничего не ломалось.

     
     
  • 3.57, Аноним (57), 08:18, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Такие вещи там грамотно проектрируют.

    Что там можно грамотно проектировать для этого случая, если один и тот же код, в зависимости от компилятора, теперь будет разный результат давать?
    Условно(!):

    раньше, старый код/старый компилятор: 2x2=66 (а в логике - "активно покупать!")
    теперь, тот же старый код/новый компилятор: 2x2=177 (в логике - "активно продавать!").

    И разработчик чешет репу: что же там поломалось, что он кучу денег пролюбил, ведь ничего не менял же, только компилятор обновил на не мажорную версию.

    А теперь представь что это произошло в глубинах чужих исходников, которые ты себе в проект затащил.

    Да, конечно, надо тестами покрывать. Но надо и в отдельной мажорной ветке несовместимую версию компилятора  выпускать.

     
     
  • 4.62, iiiypuk (?), 13:50, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вообще ты прав. Такое себе решение, если язык хочет быть серьёзным продуктом
     
  • 2.37, Аноним (37), 19:06, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Когда у языка пользователей целое ничего, это не имеет значения.
     
  • 2.50, Аноним (50), 01:46, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это, кстати, хрень какая-то же.
    Более частное теперь менее специфично, чем более общее.
     

  • 1.14, Skullnet (ok), 16:24, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хороший язык программирования, но его не распиарили так как Go.
     
     
  • 2.17, Имя (?), 16:48, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    А какова его "фишка"?
    Golang позиционировался изначально, одна задача - одно решение.
    А здесь одна задача и тысяча и одна ночь на решение (выбор одного решения из тысячи).
     
     
  • 3.30, Аноним (-), 18:13, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    то есть ты не знаешь фишку, но берешься судить. классика опеннета
     
     
  • 4.36, lflfl (?), 19:06, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну тыж не рассказываешь.
     
  • 3.49, Skullnet (ok), 01:13, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > А какова его "фишка"?

    Нормальная стандартная библиотека, а не как в СИ. Возможность компилировать код в бинарник.

     
  • 2.55, leap42 (ok), 05:52, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Хороший язык программирования, но его не распиарили так как Go.

    И кто пиарит Go? Только не говорите Google, эти Go не любят, проекты на нём не пиарят, не одабривают его использование для своих проектов. Как докажу? Ну во-первых об этом говорят многие гуглеры, а во-вторых крупных проектов на Go, которые Google бы поддерживал, пиарил и продвигал, нет вообще (а первая стабильная версия, по-моему, 12 лет назад вышла, что как бы очень давно по меркам гугла).

     
     
  • 3.58, Facemaker (?), 10:49, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >И кто пиарит Go?

    Что-то странное ты говоришь. Go пиарили изо всех утюгов несколько лет подряд. Это я хорошо помню. Сейчас, может быть, уже не так, но и нужды нет - Go "взлетел", стал популярным (что как раз указывает на говённость этого языка, но это уже другая тема).

     
     
  • 4.64, leap42 (ok), 16:30, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Что-то странное ты говоришь.

    Я по факту говорю. Гугл утюгам не платил. Никто не платил.

     
  • 3.59, Hck3r (?), 11:31, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Kubernetes?)
     

  • 1.34, Аноним (-), 18:38, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Макросыыы.. а идея была непло.. а что за идея была ? Сделать руби ? Почти получилось
     
     
  • 2.39, Аноним (39), 19:31, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Идея была сделать руби со статической типизацией (и соответственно настолько быстрый насколько позволит LLVM).
     

  • 1.38, Аноним (38), 19:30, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Разве из помеси питона с паскалем может получиться что-то хорошее?
     
     
  • 2.40, Аноним (39), 19:31, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это про Nim. Crystal это скорее помесь С с Ruby.
     

  • 1.41, Golangdev (?), 19:52, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Есть ли интероперабельность с C ?

    Т. е. могу ли я в Crystal заюзать любую C либу, как в Kotlin любую Java-либу ?

     
     
  • 2.42, kipar (?), 20:13, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Интероперабельность с С есть почти у всех языков. Во всяком случае, с бекендом LLVM для этого особых усилий не надо - просто скорми линкеру сишные библиотеки.
    Вопрос только в том насколько хорош автоматический конвертер заголовков для этого языка. У кристалла он с одной стороны неплохой (библиотеки типа GSL или LAPACK я конвертил с минимумом ручных правок), а с другой - эээ, слегка мертвый? судя по https://github.com/crystal-lang/crystal_lib/issues/2 есть какой-то альтернативный скрипт, но я его завести так и не смог, так что пользуюсь бинарником конвертера скомиленным еще три года назад.
     
  • 2.43, Аноним (43), 20:26, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Нет конечно. Потому что из jar-файла Kotlin может прочитать все классы, интерфейсы и методы со всеми типами. А вот из C-библиотеки ничего кроме имени функции автоматически не получишь. Ни аргументов, ни типов.
     
     
  • 3.51, Аноним (50), 01:47, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А хедеры на что?
     
     
  • 4.53, Аноним (53), 02:53, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Внезапно, для С-компилятора.
     
     
  • 5.63, Аноним (63), 14:25, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Для хедеров есть конвертеры в другие языки
     
  • 4.67, Аноним (-), 00:14, 19/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Хедеры далеко не всегда есть. А вот динамическая библиотека с C-нотацией экпорта функций - без проблем.
     
     
  • 5.70, Аноним (70), 17:11, 19/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Наоборот - хедеры уж точно есть, если конечно библиотека опенсорсная. А вот сама библиотека - далеко не всегда (может и не собираться под данную платформу, а только под целевую).
     
     
  • 6.71, Аноним (71), 18:07, 19/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > хедеры уж точно есть, если конечно библиотека опенсорсная

    Но вот как раз хедеры есть не всегда. Только для случая C и C++. Имея хедеры для C++ ещё и невозможно однозначно определить имена экспортируемых функций в имеющемся бинарнике динамической библиотеки, поскольку разные компиляторы C++ по-разному их формируют.

    И вопрос был в сравнении с Kotlin, который, сидя на JVM, вообще не имеет никаких проблем с восстановлением имён, аргументов и типов из бинарника. И такому подходу никакие хедеры не нужны. В отличии от C, который далеко не всегда используется по-умолчанию.

     
     
  • 7.72, Аноним (70), 18:02, 20/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    С котлином - да, не сравнить. В каком-нибудь бейсике так вообще - в библиотеке не то что имена, весь исходный текст доступен, можно поправить под себя если что не так.

    Но мне кажется странной фраза "А вот динамическая библиотека с C-нотацией экпорта функций - без проблем.". С (и другие нативные языки) как раз позволяют собирать программу имея только хедеры, сама библиотека может быть недоступна. Например, сидя на линуксе линковаться с kernel32.dll.
    Ну и примеры библиотек для которых нет хедеров было бы интересно услышать.

     
  • 2.46, Аноним (46), 22:20, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Carbon, разумеется.
     
     
  • 3.60, Аноним (60), 13:17, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Carbon, разумеется.

    Карбон это замена для Раста. При чем здесь Кристал?

     
     
  • 4.68, Прохожий (??), 07:05, 19/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Карбон - это замена Плюсам, всё-таки.
     
  • 4.69, Facemaker (?), 11:32, 19/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Carbon не замена Расту. Об этом говорится прям на заглавной странице:

    Existing modern languages already provide an excellent developer experience: Go, Swift, Kotlin, Rust, and many more. Developers that can use one of these existing languages should.

    Carbon для тех плюсистов, которым влом изучать что-то совсем новое. То есть замена C++. На этом поле он, конечно, является конкурентом Раста.

     

  • 1.65, Аноним (65), 18:41, 18/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Только ленивый ещё свой язык не сделал
     
  • 1.66, Аноним (66), 23:07, 18/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    :D студентами помню изучали "yacc" то там у каждого были лабораторные работы где мы свои компилируемые ЯП создавали. так вот нужно было отправлять свои поделки в опеннет с приставкой безопасный )))
     
  • 1.73, Аноним (73), 03:51, 23/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот объясните, нафига в синтаксис пихать слово end? Людям не надоедает его вводить? Неужели нельзя по пробелам блок вычислить или сделать нормальные скобки?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру