LINUX.ORG.RU

О бедном Crystal замолвите слово

 , , ,


2

7

Рассматриваю варианты на замену Go для личного проекта. Сообществом Crystal высказывается мнение, что он то как раз на эту роль и годится, во всём превосходит первый и незаслуженно обделён вниманием (это же слышу от апологетов Nim). Go, конечно, куц и по возможности я бы предпочёл не популяризировать посредственный ЯП, если есть варианты. На Ruby никогда не писал, но после беглого ознакомления некоторые элементы заходят. Кто заглядывал под хвосткапот этому Crystal? Там всё серъёзно или я-его-сварила-из-того-что-было, как в V?



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

это лисп, но снизу-то джава и временами получается код для форматирования мозга

Понятно, что на жабе можно писать на любом языке. Но зачем? %)

(ns file
  (:require [clojure.string :as s]
            [clojure.java.io :as io])
  (:import (java.io File)))

(let [dir  (io/file "dev")
      clj? #(s/ends-with? (.getName ^File %) ".clj")]
  (->> (file-seq dir)
       (filter clj?)
       count)) ;; => 17
Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 3)
Ответ на: комментарий от menangen

Ну тогда пусть и берёт Раст. У него сообщество крупнейшее из новомодных языков и тоже есть веб-фреймворки. И он не кастрированный как Go в плане фич языка.

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

Я только не понимаю, зачем валидный пример сравнивать с невалидным

В чем невалидность?

Об «вполне себе объективную ситуацию» спотыкаются только хэйтеры Пуйфона. Вы на С++ пользуетесь при оформлении кода отступами по гайдлайну, у питонистов это часть синтаксиса. А нормальный код и там, и там, красиво оформлен отступами.

Под объективной реальностью понимался конкретно кейс с кодогенерацией. При кодогенерации можно не руководствоваться гайдлайнами и заморачиваться отступами.

Престраннейшее описание 😦, видимо я отношусь к другой части людей.

Тем не менее, оно отлично отличает Pascal или Python от С (и подобных C языков).

Сравнивать не с чем, чтобы утверждать, что можно и лучше.

Нет, речь не об этом.

Мне, например, не нравится такое блюдо, как холодец. Вот просто не нравится и все. Даже если оно отлично приготовлено, оно не мое. И я не должен приводить примеры того, как его же приготовить как-то иначе, чтобы мне понравилось.

При этом есть миллионы людей, которые с удовольствием едят холодец и не понимают, почему оно кому-то может не нравится.

Аналогично и с апострофом в Rust-е для лайфтаймов. Мне не нравится такой символ. И у меня нет необходимости фантазировать на тему того, что можно было бы использовать вместо. Тем более, что чтобы я не придумал, это уже Rust не изменит (так что такое занятие еще и лишено практического смысла).

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

В чем невалидность?

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

Под объективной реальностью понимался конкретно кейс с кодогенерацией.

Которой, конечно, занимается каждый питонист, особенно начинающий? Или большинство? Чтобы на этом акцентировать внимание, нужно доказать, что это реальная проблема.

И у меня нет необходимости фантазировать

🤣 Я не предлагал фантазировать. Я предложил предъявить более удачное синтаксическое представление лайфтаймов в случае, если таковое известно. Потому что лайфтаймов может быть много в объявлении типа, поэтому кейворд не годится, нужна кракозябра/-ы. Апостроф как минимум создает минимальный визуальный шум, при этом остается заметным. Лично мне он не нравится и не не нравится – я осознаю его необходимость

Какой холодец, куда Вы вообще пошли с метафорами, в какой лес. Впрочем, если всё сводится ко «мне ни нравица и всё тутъ», то всё как бы логично становится, но тогда уж Вы крестик-то наденьте и не выдавайте личное субъективное ИМХО за недостатки языков программирования. Или по крайней мере, не делайте это так серьезно, а просто получайте удовольствие от процесса, как делают очень многие здесь 😊

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

В том что код на Питоне, вопиюще очевидно, не рабочий.

OK, прошу простить, с Python-ом имею дело крайне редко. Вот (вроде бы) работающий пример:

class Demo:
    def __init__(self):
        self.counter = 0
        self.condition = True

    def a(self):
        self.counter += 1
        self.condition
        if self.counter > 10:
            self.condition = False

    def b(self):
        print("condition is:", self.condition)

    def run(self):
        done = False
        while not done:
            if self.condition:
                self.a()
            else:
                self.b()
                done = True # (1)
        print("Completed:", self.counter)

d = Demo()
d.run()

Аналогичный питоньему код я привел.

Нет. Вы привели не тот пример. В моем примере в строке (1) можно сократить количество пробелов и получить разную логику работы метода run. При том, что все строки расположены в абсолютно правильном порядке.

В вашем примере на JavaScript это не так.

Которой, конечно, занимается каждый питонист, особенно начинающий? Или большинство?

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

Если миллионы мух любят синтаксис Python-а и не имеют с этим синтаксисом проблем (я, кстати говоря, так же не имею в те редкие моменты, когда с Python-ом приходится иметь дело) никак не меняет моей точки зрения.

Я не предлагал фантазировать. Я предложил предъявить более удачное синтаксическое представление лайфтаймов в случае, если таковое известно.

Шиза? Второе предложение противоречит первому.

Какой холодец, куда Вы вообще пошли с метафорами, в какой лес.

Чтобы смысл того, что я до вас пытаюсь донести, был лучше понятен.

Впрочем, если всё сводится ко «мне ни нравица и всё тутъ», то всё как бы логично становится, но тогда уж Вы крестик-то наденьте и не выдавайте личное субъективное ИМХО за недостатки языков программирования.

Тут остается попросить цитату из моих слов, где бы я говорил не о своих личных предпочтениях, а об объективных недостатках языков программирования. Ибо началось все вот с этого:

Для меня, например, синтаксис Ruby и Eiffel является, пожалуй, самым удобным и для чтения, и для написания. Си-подобный норм, да и привык уже, хотя в варианте Rust-а это страх и ужос-ужос :))). Тогда как основанный на отступах Python-овский – пожалуй, самый всратый.

И я вынужден подчеркнуть, что вся эта фраза начиналась с «для меня». Что должно было бы показать, что дальше излагаются субъективные ощущения.

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

Есть там женерики, всё как в лучших домах. И макросы есть. Другое дело, а нужно ли? Берешь тот же руби и не паришься. Тем более я не заметил, чтобы на кристале писали что-то сложное и большое, где пригодилась бы статическая типизация. Хотя может плохо смотрел.

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

Есть там женерики, всё как в лучших домах. И макросы есть. Другое дело, а нужно ли? Берешь тот же руби и не паришься. Тем более я не заметил, чтобы на кристале писали что-то сложное и большое, где пригодилась бы статическая типизация. Хотя может плохо смотрел.

Я видел/делал лишь простейшие микросервисы, которые может написать даже средней руки рубист за день, не запариваясь с портянками с if err на Go.

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

Вот (вроде бы) работающий пример

За исключением того, что в Пуфоне переменную, содержащую логическое значение True/False, считается хорошим тоном сравнивать именно с логическим значением – while done is False – код-то рабочий, в том смысле, что он не зависает в бесконечном цикле. А вот если там какая логическая ошибка, знает только его автор.
И как-то меня уже передергивает с while. На пайфоне «уайл», в отличие от for, это моветон, с тех пор, как Гвидо дал итераторы людям. Ограниченный и узкоспециализированный тип цикла, в котором всё нужно делать руками, как в каком-нибудь Си, буэ.

Я не предлагал фантазировать. Я предложил предъявить более удачное синтаксическое представление лайфтаймов в случае, если таковое известно.

Шиза? Второе предложение противоречит первому.

Объясняю по-русски: знаете хоть один ЯП, где а.) лайфтаймы есть; б.) они читаются хорошо ? Что тут противоречит чему? О чем тут фантазировать? Ваша способность к фантазии вызывает огромные сомнения, если уж об этом говорить, поэтому я говорил о голом знании. «Мне не нравятся, как выглядят лайфтаймы в Расте» – ну, ОК, понятно, что они просто не нравятся, потому что объективно их сравнить не с чем.

Тут остается попросить цитату из моих слов, где бы я говорил не о своих личных предпочтениях, а об объективных недостатках языков программирования.

Какие цитаты, если речь об общем впечатлении? А ссылаться на такие оговорки, как «для меня» и т.д. А чье еще мнение можно излагать и отстаивать, чужое, что ли? Эким надо быть идеалистом, должно быть, чтобы будучи взрослым защищать чужую позицию.

Не надо забывать и забываться, что никакое ЧСВ не отменяет того факта, что если ты вещаешь вкусовщину, то это вкусовщина.

А вообще я притомился, поэтому не обессудьте, на следующее сообщение ответа можете не ждать, но тем не менее не вздумайте халтурить.

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

За исключением того

Я показал, что в Python пробелы влияют на логику: количество отступов в строке меняет поведение программы. Это именно то, что и подразумевалось под «определение логики количеством пробелов».

Объясняю по-русски: знаете хоть один ЯП, где а.) лайфтаймы есть; б.) они читаются хорошо ? Что тут противоречит чему?

Вы сами сказали, что аналогов Rust-а нет. Так откуда брать примеры, кроме как из фантазии? Это во-первых.

Во-вторых. Вернемся к аналогии. Я говорю «мне не нравится холодец». Все, точка. Просьбы показать другое похожее блюдо из тех же ингредиентов, которое нравилось бы мне больше, идут в топку, поскольку мне не нравится холодец о чем (и только об этом) я и говорю. Но вы продолжаете настаивать на том, чтобы я вам что-то показал.

Какие цитаты, если речь об общем впечатлении?

Какой унылый слив. Тут же все ходы записаны:

Впрочем, если всё сводится ко «мне ни нравица и всё тутъ», то всё как бы логично становится, но тогда уж Вы крестик-то наденьте и не выдавайте личное субъективное ИМХО за недостатки языков программирования.

Вы в моих словах где-то увидели выдачу моего субъективного ИМХО за недостатки языка. На просьбу где начали мямлить и сливаться.

Мощно. Не настолько мощно как доколупываться к использованию while в примитивном примере кода на Python, но все равно мощно.

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

Типичный Евгений.

Не надо забывать и забываться, что никакое ЧСВ не отменяет того факта, что если ты вещаешь вкусовщину, то это вкусовщина.

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

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

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

Я с самого начала говорю о вкусовщине и о том, что это вкусовщина. Буквально: «Тут, к сожалению, все очень субъективно. Для меня, например,…»

Это вы умудряетесь и обвинить меня в том, что я свою вкусовщину пытаюсь выдать за недостатки языка: «не выдавайте личное субъективное ИМХО за недостатки языков программирования», и, при этом, еще и апеллировать к «если ты вещаешь вкусовщину, то это вкусовщина»

Но ярлык «бредите» нужно повесить на собеседника, да.

eao197 ★★★★★
()
Ответ на: комментарий от eao197
   def run(self):
        while self.condition:self.a()
        self.b()
        print("Completed:", self.counter)

судя по обмазыванию done в вашей реализации run у вас плохое знание python не есть самое первоочередное требующее профилактики

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

дело в стиле

Нет. Но нужно вдуматься в то, что пишет собеседник, чтобы это понять. А зачем вдумываться, если вы и так самый умный.

вообще что бы успокоится к отступам в питоне достаточно

facepalm.jpg

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

ну как же это всё транзитивно

вы берёте синтетический пример который что в алгол-языках что в python’е будет в лучшем случае машино-генерированным (иначе писание нуба который забил на pep8 и прочие руководства по стилю в других языках)

и всё таки в референсе языка python чётко показано как происходит отнесение физической строки к тому или иному блоку - что закрывает все обоснованные вопросы как делать отступы для программирование на python

если же просто не нравится что перевод строки(и следовательно ведущие пробелы ) в python более значим чем в большинстве остальных algol-потомках - ну вряд-ли вас неволят на питоне удавить

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

и что бы было конкретно

в языке чётко указано (ссылка на референс выше) значимость INDENT строки для формирования семантики блока кода

выже блин

делаете утверждение вида :

"хочу что-бы в сях булевское выражение было бы как в шелле статус программы - при успехе возврат 0 остальное вид ошибки " - и после этого возмущаетесь кривизной сишки

ps

это как вечная претензия к «брошенному» else в си-языках - когда наличие отсутствие ; по разному вяжет концевой else (насколько помню старые флеймы) - так и ваш отступ перед done - та же природа притензии - таков синтаксис данного языка

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

вы берёте синтетический пример который что в алгол-языках что в python’е будет в лучшем случае машино-генерированным (иначе писание нуба который забил на pep8 и прочие руководства по стилю в других языках)

Ох, ё, как же все запущено.

Я очень надеюсь, что стандартную библиотеку Python-а писали люди, которые знают Python гораздо лучше меня. Но вот если взять вот эту строку и подвигать ее вправо-влево на один-два отступа, то получим совершенно разную логику. Как раз то, о чем я и говорил и для чего привел синтетический пример.

Но вкурить смысл сложнее, чем продемонстрировать собственные способности к рефакторингу.

если же просто не нравится что перевод строки(и следовательно ведущие пробелы ) в python более значим чем в большинстве остальных algol-потомках - ну вряд-ли вас неволят на питоне удавить

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

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

то что в питоне есть некоторый трейдофф между отступы делают код в целом более читаемым(кста Парнас в 70ых согласно Кнуту был инициатором возврата в алгол-языки удобной практики из фортрана когда степень отступа в строке есть информативное ) и возникновением ошибки когда концевая строка блока окажется в объемлющем блоке - этой вот претензии буквально больше 30 лет - за пруффом - goto https://legacy.python.org/search/hypermail/

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

ну (блин) ну не нужно двигать туды сюды

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

Речь не про то, что эту конкретную строку нужно (или не нужно) двигать куда-то. Речь про то, что это одна из основных идей синтаксиса Python-а: количество отступов определяет логику. Сделали два отступа – получили одно поведение, сделали один – другое, сделали три – третье. И все это при том, что сама строка написана в правильном месте (т.е. после той строки, которая нужна).

Вот эта идея мне не нравится.

PS. Подчеркну для записных инвалидов умственного труда, забывающих принимать лекарства от шизофрении: это мое сугубо субъективное ИМХО, т.е. вкусовщина вкусовщины.

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

см выше - это как и остутствие выражение присвоения (которая теперь моржик уже как 5 лет в языке) - буквально одни из первых просьб о улучшении языка которые обсуждались в рассылке python в 93 году

да - использование отступов в семантике языка черевато

распространённой ошибкой: выносом концевой части блока в объемлющий блок - ну таков язык

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

дык в сяшке тож

Зачем здесь аргументы из категории «а у вас негров линчуют»?

Если для меня в Python-е есть фатальный недостаток, то от наличия фатальных недостатков в других языках этот недостаток Python-а для меня никуда не исчезнет.

Если говорить про Си-шку (и ее прямых наследников), то там есть до чего доколупываться. И ваши примеры, как по мне, просто ерунда по сравнению с тем, что в Си операторные скобки для if-else, while if for не обязательны. Из-за чего можно запросто написать:

while(!done) {
  if(condition)
    a();
  else
    b(); // Oops!
    done = false;
}

и поиметь проблемы, которые не так-то и просто будет найти.

Насколько я знаю, в Go и Rust-е эту проблему наконец-то устранили.

Даже в Eiffel, который я выше обозначал как пример удобного для меня синтаксиса, есть свои заморочки. Например, там не было аналога typedef/using-а :(

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

и не прошло и часа вы приводите в пример …

Для дебилов:

for(auto & i : values)
  modify(i);
  check_state(); // Oops!

Для абсолютных имбецилов лопата в том месте, что вызовы modify() и check_state() должны были выполняться внутри for-а.

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

как вы самокритичны:

указание на висящий else (и обязательное оскобачивание (в модула как и в луа end’ом - а в python - отсутами) и его неибязательность в си как причина вами так любимого выпадения задней строки из блока)

было несколько ранее вашего упоминания

вы это - не отказывайтесь от рекомендаций вас пользующих лиц

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

указание на висящий else (и обязательное оскобачивание (в модула как и в луа end’ом - а в python - отсутами) и его неибязательность в си как причина вами так любимого выпадения задней строки из блока)

Еще раз для тех, кто не вкуривает даже после стольких объяснений: дело вовсе не в конкретном примере, до которого вы доколупываетесь (ну так уж получилось, что примеры с dangling else приводить проще всего). С таким же успехом вы можете сдвинуть вот эти две строки вправо на один отступ и вновь столкнетесь с тем, что у вас количество пробелов определяет логику работы программы. Или вот эту строку на один отступ вправо.

Ну и да, если захотите продолжать тупить, то можете делать это самостоятельно, не отвечая мне?

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

всё таки - отчего вас так расстраивает сохранение синтаксической корректности при смене семантики путём выпадения задней части вложенного блока в объемлющий блок

???

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

всё таки - отчего вас так расстраивает сохранение синтаксической корректности при смене семантики путём выпадения задней части вложенного блока в объемлющий блок

Простите, моих мозгов не хватило, чтобы расшифровать это предложение.

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

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

PS. Вынужден повторить, что все вышесказанное – это сугубо субъективное ИМХО, которое я никому не навязываю. Если кто-то в восторге от синтаксиса Python, то я только рад.

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

Ну блин, ну ё же моё…

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

Но это не меняет того факта, что идея формирования логики за счет отступов (т.е. количество пробелов изменяет поведение программы) лично мне кажется плохой.

Вот что вы мне упорно пытаетесь донести? Что я не прав?

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

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

это(моржик и все последствия его появления в языке) реально причина ухода ванРоссума - ибо он как чел могущие в языкотворчество знал что появление присваивающего выражение делает не нужным отступы - ну да привет списки прог аля lisp из благословенных 60ых

в си ж тоже можно ограничится однострочными блоками что бы фигурные использовать только в функциях и декларациях - всё это вопрос стиля

повторюсь питон остаётся питоном и без оступов

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

повторюсь питон остаётся питоном и без оступов

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

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

Теорема(не Боема-Якопини конешн):

любой блок кода можно декопрозировать(отрефакторить) до одного составного оператора(выбор,while,for-итератор) и вызовов функций

всякий заголовок составного оператора можно записать как выражение

- вс> вот и телемаркет

а моржик позволяет все инициализации засунуть промеж выражений

в итоге получаем на верху либо сет либо дикт либо список - в нутри инициализация полей этого контейнера теми или иными вычислениями

результатом можно возвращать либо весь сей контейнер - либо поднабор полей этого контейнера

вот и всё = отступы не обязательны

qulinxao3 ★☆
()