Size: a a a

Сrystal Lang — русскоговорящее сообщество

2021 October 23

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
А чего не так с Crystal? Там же даже подсказоньки от IDE часто нафиг не нужны, всё сделано настолько единообразно и завязано на хорошо продуманную иерархию классов, что в большинстве случаев можно просто догадаться, что метод такой-то просто обязан быть. Поначалу, правда, вывод типов немного бесил, но потом оказалось, что это весьма полезная фишка
источник

HH

Hz Hz in Сrystal Lang — русскоговорящее сообщество
Самый жирный минус кристала, очень долгая компиляция больших проектов
источник

КП

Константин Пунш... in Сrystal Lang — русскоговорящее сообщество
С таким выводом типа я не удивлен
источник

АК

Андрей Коновод... in Сrystal Lang — русскоговорящее сообщество
я когда к D попробовал после кристала вернуться быстро забил - надо тебе filter сделать - идешь читаешь документацию про алгоритмы, итераторы и все эти иголки в стогу. а всё потому что боятся лишний массив выделить. А кристалл для меня идеален - не супербыстрый но при этом довольно быстрый, не супергибкий но довольно гибкий (если свыкнуться с ограничениями генериков и макросов), ну и при этом лаконичный и читаемый. Раньше таким языком для меня паскаль был, но там все-таки писанины много и если там пользоваться генериками то стабильность не далеко от кристалла ушла.
источник

G

Gabben in Сrystal Lang — русскоговорящее сообщество
Особенно traits и CT friends
источник

YS

Yura Sokolov in Сrystal Lang — русскоговорящее сообщество
👍
источник

КП

Константин Пунш... in Сrystal Lang — русскоговорящее сообщество
ну из синтаксиса не нравится {%if cond%}
источник

КП

Константин Пунш... in Сrystal Lang — русскоговорящее сообщество
в D лучше. Что мешало сделать ct_if ct_elsif ct_end и т.д я не знаю
источник

G

Gabben in Сrystal Lang — русскоговорящее сообщество
Вот эти Jinja подобные макросы мне тоже не зашли. Совершенно нечитаемо.
С другой стороны в кристале есть модули, и если фунция принимает модуль, то она перегрузится для каждого конкретного типа в CT. И тебе не нужно городить кучу static if __magic_shit!()
источник

DV

Dmitriy Vishnevskiy in Сrystal Lang — русскоговорящее сообщество
С вложенными макросами вообще уродливо получается, там появляются странные слеши, экранирование переменных одного макроса от другого
источник
2021 October 24

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Да, я вот чем больше пишу на Go - тем лучше понимаю, почему у него такой типа быстрый компилятор. Там просто магии не то, что меньше в N раз, чем в Crystal, её там по факту просто нет. Crystal же позволяет писать код как на интерпретируемом языке, ещё и генерировать код как угодно макросами, но за это приходится платить временем компиляции. Ну и второй фактор, не менее важный конечно, - у Crystal нет сотен специалистов hi-end класса по разработке компиляторов как у Google'а.
источник

АК

Александр Куцан... in Сrystal Lang — русскоговорящее сообщество
Всем привет, в кристале я начинающий.
Столкнулся с проблемой, хочу для бинарника со спеками прикрутить OptionParser но  как только я делаю require "spec" то подставляется OptionParser из require "spec" и он конечно не пропускает мои кастомные параметьры командной строки.
Кто может посоветовать как бы мне использовать вместе со спеками свои собственные параметры командной строки?
источник

YS

Yura Sokolov in Сrystal Lang — русскоговорящее сообщество
Да.
Плюс ещё там оптимизатор дубовый. До llvm на O3 ему как до неба. А оптимизатор llvm тоже значимую часть времени сьедает. Как мне даже кажется, большую часть времени (иначе почему такая разница между debug и release?)
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
В spec.cr не смотрел, могу с ходу предположить, что ::OptionParser будет работать правильно. То есть fully resolved имя до класса вместо "автоматического поиска в иерархии"
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Забавно, оно само парсит опции
https://github.com/crystal-lang/crystal/blob/5999ae29b/src/spec.cr#L93
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
  opts.unknown_args do |args|
 end

Мда...
Может, опции передавать в переменных окружения??
источник

АК

Александр Куцан... in Сrystal Lang — русскоговорящее сообщество
https://github.com/crystal-lang/crystal/blob/6ef135535ed2e978d07e8a6227f2a5cfa079acc1/src/spec/cli.cr#L64
Вот тут нашел как парсит оно опции. По идее я могу достучаться до этого поля класса и расширить его, хотя не уверен.
Совсем забыл про переменные окружения.
Костыль конечно, но мою задачу решает, спасибо!
Но попробую еще расширить то что он там сам парсит.
Правда семантика class_property мне пока еще не знакома.
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Попробуйте подключить только DSL:
require "./spec/dsl"
только путь точный до dsl нужен
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Нужен же только DSL
источник

АК

Александр Куцан... in Сrystal Lang — русскоговорящее сообщество
Коллеги меня за такое проклянут 😂
источник