LINUX.ORG.RU

Crystal 0.16.0

 ,


0

3

Состоялся релиз языка программирования Crystal 0.16.0.

Цели языка:

  • Синтаксис, похожий на Ruby (но совместимость с ним не является целью).
  • Статическая типизация (но без необходимости явного указания типов переменных и аргументов методов).
  • Вызов кода на Си с помощью биндингов, написанных на Crystal.
  • Исполнение и генерация кода во время компиляции (макросы).
  • Трансляция в эффективный нативный код.

Текущее состояние:

  • Проект находится в стадии alpha: язык и стандартная библиотека всё ещё подвергаются значительным изменениям.
  • Компилятор написан на Crystal.

Этот релиз содержит значительное изменение, ломающее обратную совместимость, о котором было объявлено несколько месяцев назад. Также был внесён ряд других незначительных изменений и множество новых вкусностей.

Новый алгоритм вывода типов

Ранее типы переменных выводились путем анализа всех видов использования. Например:

class Some
  def initialize(@var)
  end
end

Some.new(1)

В примере выше типом @var будет являться Int32. Если вы сделаете так:

Some.new(1)
Some.new("hello")

Тогда типом являлся бы Int32 | String (union). И даже в следующем коде тип останется таким же:

class Some
  def initialize(@var)
  end

  def var=(value)
    @var = value
  end
end

some = Some.new(1)
some.var = "hello"

Приведённые выше примеры больше не будут компилироваться, так как теперь компилятор должен знать тип @var наверняка. Например, предположим, что предназначенный тип для @var — Int32, тогда мы могли бы написать:

class Some
  # Так как конструктор принимает только Int32, типом @var будет Int32
  def initialize(@var : Int32)
  end
end

Вывод типов используя литералы и конструкторы:

class Some
  def initialize
    @int = 0            # Int32
    @string = "hello"   # String
    @bools = [] of Bool # Array(Bool)
    @time = Time.new    # Time
  end
end

Обратите внимание, что указание типов для аргументов методов необязательно и никогда не будет обязательным.

Это изменение в будущем позволит реализовать инкрементальную компиляцию и уменьшить общее время компиляции и использование памяти. Прямо сейчас больших проектов на Crystal не много. Возможно, самый большой проект — это сам компилятор, и его компиляция с нуля занимает 16 секунд и 1 GB памяти. Но появятся более крупные проекты, и даже несмотря на то, что компьютер программиста должен быть быстрым и иметь много памяти, нет никаких причин ждать или расходовать CPU и память.

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

Добавлена поддержка FreeBSD и musl libc

Это также облегчит портирование Crystal на другие платформы. Пока ещё нет официальных релизов, но они, безусловно, скоро появятся.

Именованные аргументы везде

Ранее именованные аргументы могли быть применимы только к тем аргументам, которые имели значение по умолчанию:

def method(x, y = 1)
  x + y
end

method 10           # OK
method 10, y: 20    # OK
method x: 10        # Error
method y: 20, x: 10 # Error

Теперь весь код, приведённый выше, компилируется. Это может быть особенно полезно для методов, имеющих длинный список аргументов.

Прочие изменения

  • В Array и Range добавлена возможность бинарного поиска.
  • Добавлены типы BigFloat и BigRational.
  • Упрощён маппинг перечислений, BigInt и BigFloat в JSON и YAML.

С более полным списком изменений можно ознакомиться в примечаниях к выпуску.

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Wizard_ (всего исправлений: 7)

Python все-равно лучше, это все знают.

anonymous
()

Чуть ли не каждый день выходит новый язык программирования. И впоследнее десятилетие выходит один сплошной баян. Сплошные велосипеды.

bs1988
()

Цели языка:

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

Мне не очень понятны цели языка:

1. Ну тут вопросов нет, каждому свое.

2. ОК.

3. Тут вопросов нет. ЯП без биндингов не айс.

4. эм... что? имеется ввиду проверка логики или проверка синтаксиса или еще что? Поподробнее бы надо написать.

5. Тут вопросов нет. (найдите мне язык, цель которого компиляция в не эффективный код)

В целом из целей вытекает «еще один какой-то язык зачем-то (общего пользования или нет? Тут не задекларированно) с синтаксисом раби.

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 4)
Ответ на: комментарий от RiseOfDeath

4. эм... что? имеется ввиду проверка логики или проверка синтаксиса или еще что? Поподробнее бы надо написать.

Вообще в оригинале сказано так:

Have compile-time evaluation and generation of code, to avoid boilerplate code.

Не знал, как лучше перевести, потому скопипастил из предыдущей новости.

Kilte ★★★★★
() автор топика

С C

Хм-м, вызов кода на C, говорите? Можно связать с Glib и использовать вместо Vala? Заманчиво.

Camel ★★★★★
()

Пробовал для продакшена. По производительности не сильно сливает go. От использования оттолкнули две вещи: 1. Отсутствие многопоточности. 2. Утечки памяти.

Освоил за день.

exst ★★★★
()

Компиляция в эффективный нативный код.

через Си?

slon
()

Компилятор написан на Crystal.
Проект находится в стадии alpha: язык и стандартная библиотека всё ещё подвергаются значительным изменениям.

хм

Цели языка:
Синтаксис похожий на X
Отсутствие необходимости указания типов переменных и аргументов методов.

Но зачем?

vladimir-vg ★★
()

Очередное поделие, которое просто GCC собираться отказывается:

Makefile:20: *** Could not locate llvm-config, make sure it is installed and in your PATH.  Останов.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

Очередное поделие, которое просто GCC собираться отказывается:

У этого поделия есть веские причины для этого.

tailgunner ★★★★★
()

Скажите, чем это лучше Cython? Ну или, если нужен язык более низкого уровня с приятным синтаксисом, есть ведь Nim, или даже Go на худой конец. Может дело в том, что сейчас просто все пилят языки, кому не лень?

anonymous
()
Ответ на: комментарий от anonymous

Go
с приятным синтаксисом

Kilte ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Скажите, чем это лучше Cython?

Системой типов, макросами.

Ну или, если нужен язык более низкого уровня с приятным синтаксисом, есть ведь Nim, или даже Go на худой конец.

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

P.S. только что заметил, что на русской раскладке Go - это Пщ. Это неспроста.

tailgunner ★★★★★
()

Всё равно не понятно, зачем пилить ещё один язык, для которого опять надо пилить библиотеки (ибо одними байндингами жив не будешь), потом IDE, инструменты.... не великоват груз? При всём при том, вся эта велосипедастия происходит на фоне вброса Go, Rust от «именитых брэндов», языка D (от создателей компилятора С++) и даже эти языки всё никак не снискают популярность у закостенелых пингволюбов - как хочет у них выйграть Crystal?? Поддержкой руби? :)

Вот воистину, опенсорс - скрытое зло. Каждый клоун может запилить проект, даже не удосужившись влиться в существующие проекты, а ведь это раскол сообщества и замедление уже существующих разработок! Ведь те, кто придут пилить Кристал, сначала потратят время на него, разочаруются, и только потом вольются в какой-нибудь Rust! Это время, деньги, ресурсы... и FOSS так глупо этим распоряжается!

matumba ★★★★★
()

Исполнение кода и генерация кода

tailgunner, наверное лучше тогда «исполнение и генерация кода».

Kilte ★★★★★
() автор топика
Последнее исправление: Kilte (всего исправлений: 1)
Ответ на: комментарий от anonymous

Просто впечатление от того, что в Nim больше писанины.

tailgunner ★★★★★
()

Трансляция в эффективный нативный код.

Достаточно написать, что язык компилируемый, и всё! Либо интерпретируемый как Жаба, либо компилируемый, третьего не дано.

anonymous
()

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

pascal ★★★
()
Ответ на: комментарий от matumba

Вот воистину, опенсорс - скрытое зло. Каждый клоун может запилить проект, даже не удосужившись влиться в существующие проекты, а ведь это раскол сообщества и замедление уже существующих разработок! Ведь те, кто придут пилить Кристал, сначала потратят время на него, разочаруются, и только потом вольются в какой-нибудь Rust! Это время, деньги, ресурсы... и FOSS так глупо этим распоряжается!

Я вижу природа тебя совсем не наделила мудростью! Сила и мощь «Открытых Исходников» в его разнообразии. Единообразие приведет лишь к к деградации. Твоя ошибка в том, что ты пытаешся примерить «корпоративный дух» свойственный коммерческим компаниям «свободному сообществу».

на фоне вброса Go, Rust от «именитых брэндов», языка D (от создателей компилятора С++) и даже эти языки всё никак не снискают популярность у закостенелых пингволюбов - как хочет у них выйграть Crystal?? Поддержкой руби? :)

Если «именитых брэнды» что-то там высрали, совсем необязательно бежать к ним в объятия и восхищатсья. И с чего ты решил, что Crystal должен (блин вот кровь из носу), у кого то там что-то выигрывать? Или ты думаешь, что создатели этого ЯП спят и видят, как бы им прибрать себе корпоративный сектор.

anonymous
()
Ответ на: комментарий от pascal

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

Сиди на своей сишке и не трыньди!

anonymous
()
Ответ на: комментарий от anonymous

Достаточно написать, что язык компилируемый, и всё! Либо интерпретируемый как Жаба, либо компилируемый, третьего не дано.

а компиляция в байт-код - это к какой категории относится? :)

hoopoe ★★
()
Последнее исправление: hoopoe (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Жаль, что для Python такого не пилят.

Пилят:

  • синтаксис, похожий на Python
  • статическая типизация с выводом типов
  • простой FFI с Си
  • макросы + простой и удобный CTFE
  • компиляция в натив (через кодогенерацию в Си)
ArtemBan
()
Ответ на: комментарий от ArtemBan

Жаль, что для Python такого не пилят.

Nim

Ты вот это вот серьезно?

А что?

Предполагался ответ «да» или «нет». Надеюсь, это всё-таки было «нет».

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от ArtemBan

синтаксис, похожий на Python

Там от ¨синтаксиса, похожего на Python¨ только выделение блоков индентацией. Crystal же действительно напоминает Ruby (к которому добавили аннотации типов).

theNamelessOne ★★★★★
()
Ответ на: комментарий от matumba

даже эти языки всё никак не снискают популярность

На гитхабе давно были? Почти каждый новый проект начинают писать на rust/swift/go.

RazrFalcon ★★★★★
()
Ответ на: комментарий от ArtemBan

Я серьёзно

Это печально.

хотелось бы услышать от тебя конструктив в адрес Нима.

С чего бы у меня взялся какой-нибудь конструктив к Nim? Еще одна вариация на тему Object Pascal, единственная интересная вещь - effect system, но что из этого выйдет - ХЗ. И Nim не похож на Python от слова «совсем».

tailgunner ★★★★★
()

Дед писал на С, отец писал, и я буду! Понаделали новомодных языков!

anonymous
()
Ответ на: комментарий от anonymous

Либо интерпретируемый как Жаба, либо компилируемый, третьего не дано.

А уроки ты уже сделал? Или не утерпел и полез на ЛОР своей мудростью делиться?

ЗЫ: чисто интерпретируемых языков (не считая эзотерики или совсем уж маргинальщины) уже давно нет.

anonymous
()
Ответ на: комментарий от tailgunner

Nim не похож на Python от слова «совсем»

Ну ХЗ, как по мне, он достаточно взял от Питона для компилируемого языка. Да и в интернетах полно отзывов типа: «Искал компилируемый Питон, наткнулся на Ним и хожу теперь довольный». Да и ближе всё равно ничего нет.

единственная интересная вещь - effect system

По декларируемым фичам он, вроде, один фиг не хуже Crystal.

ArtemBan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.