LINUX.ORG.RU

Релиз Crystal-0.27.0

 ,


2

4

Crystal — объектно-ориентированный язык программирования общего назначения, созданный с целью:

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

Как заявляют авторы проекта: «мы любим ruby за его эффективность написания кода, а С за его эффективность при выполнения кода и мы хотим скрестить все лучшее из этих двух миров...».

Changelog

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



Проверено: jollheef ()
Последнее исправление: cetjs2 (всего исправлений: 3)
Ответ на: комментарий от anonymous

clang -fsanitize=undefined ругается

не UB

Нет.

Out of bounds вполне себе defined behavior.

Царя уже даже в стандарт головой макали — не, не доходит. Ещё раз лень искать точную страницу, где это расписано.

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

так а есть она, эта эволюция? В котнексте ЯП?

Безусловно.
Если вдруг тебе захочется возразить, то ответь сначала, как давно ты изучаешь языки программирования (и сколько за это время успел изучить)?

да не, возражать особо не буду. Поверю так.

Изучать особо уже не изучаю. Но так работал с ассемблером,с машинными кодами (ПМК), с Бейсиком, с TP/Object Pascal/Delphi, C, C++ (слабо), Octave, Python, Prolog (пришлось когда был студентотой), Haskell

В принципе достаточно радикально отличается Python, Октама, Хаскель и Пролог. Остальное все одно.

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

И от чего и чем именно питон радикально отличается?

библиотекой SciPy и соответствующей перегрузкой операторов. Хотя наверное это и на паскакале можно...

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

Возможно нубский вопрос, но чем принципиально перегрузка оператора в питоне отличается от оной в плюсах?

А хер ее знает. Скорей всего ничем. Однако на плюсах почему-то нет божественной SciPy.

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

Совсем дебил? Ты своей жизни хоть что-то заметное создал, кроме кубометров мусора и отходов своей жалкой жизнедеятельности, откуда у тебя может быть право вякать на вещи, созданные тысячами умных людей, вещи, которые работают и каждый день приносят пользу, чтобы такое чучело, как ты, воняло «стрелочка мне не нравится, кококо»? Даже название языка прочитать не может, а лезет со своими комментариями про язык, которому явно лет, больше чем самому.

Ничего себе как мозг рабиста заклинило. burato смотри, это как раз представитель программиста-гумманитария без технической предрасположенности из твоего недавнего поста про чувака с хабра

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

Будто кто-то может предложить что-то с синтаксисом, лучше Ruby.

Очевидный хаскель

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

Чоткий дерзкий

Если меня не подводит память и понимание сути вещей, ситуация обстоит так:

Вот пишешь ты на С++, но типы указывать как-то влом. И тут вспоминаешь, что в языке есть шаблоны и заводишь песню template<typename A1, typename A2, typename A3> void f(A1 a1, A2 a2, A3 a3) на каждую функцию в коде. Выходит конечно удобно, но синтаксический шум бесит. Вот тут на помошь приходит кристалл, который делает то же самое, но без угловых скобок.

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

Вообще, не очень понимаю этих людей, есть же скриптопетушиное пыхосемейство, где с этим всё хорошо. При этом в полноценных языках программирования со сложными объектами(не в смысле ООП), задачами и проч. всё по другому. Типы не являются мусорной информацией, но напротив сильно упрощают чтение кода, если это не так, то зачем брать полноценный язык вместо скриптопетушни? Кажется, это синдром утёнка от макак, которые никогда ничего сложнее дёрганья бд в бэкенде не писали. Не взлетит. Без задач.

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

используй auto

Ага, напиши авто в параметре функции. Так только языки ML семейства умеют по причине отсутствия перегрузки функций в языке

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

В лямбде - без проблем

Ну это потому что компилятор видит, что мы с этой лямбдой будем делать. А если это библиотечная функция, как быть? Вот тут как раз приходит кристалл и говорит передавай мне любой тип, лишь бы вызываемые методы в нём были. А я тебе на каждый вид вызова наплодю инстанц кода. Соответственно никакой динамической линковки тут не может быть со всеми вытекающими в виде разбухания бинаря и невыносимо долгой компиляции не говоря уж о проблемах с написанием плагинов. Короче для мелких и средних тулзов втч. числодробилок - отличный выбор, а остальное на нем пробовать не стоит.

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

А если это библиотечная функция, как быть?

Можно и библиотечную же

auto f = [](auto x) { std::cout << x; };

int main()
{
  f(1);
  f("x");
}

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

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

действительно. Ну... ступил, бывает ))

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

питон

библиотекой SciPy и соответствующей перегрузкой операторов

Вот ты сейчас одной фразой красиво намекнул почему питон — страшное говно. Как раз после того, как в ядро языка добавили матричный оператор @ (при том, что в ядре питона такого типа данных, как матрицы, напрочь нет), я понял, что питон — всё.

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

Возможно нубский вопрос, но чем принципиально перегрузка оператора в питоне отличается от оной в плюсах?

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

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

Полагаю что это обычный шаблон

Теперь я наконец проникнулся тем, насколько наворочен С++. Common lisp отдыхает. Ну тут как всегда с С++, в нем всё есть, но чтоб доступится к фичам надо врапперить и страдать. Не ну вот не будем же мы писать

class C {
public:
  auto f() { return [this](auto x) { std::cout << x; }; }
};

в продакшене.

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

спасибо, уже нашел, там еще косяк что llvm должен поддерживать все те же target, у меня при линковке на aarch64 ругнулось на x86 и armv7 (обе были на хосте кросс-компиляции)

разверну chroot с aarch64 на x86 - буду тестить

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