LINUX.ORG.RU

Кто сказал что оборачивание в скобочки это фи?

 , , , ,


0

4

Нука объясните ка мне, с чего вдруг массами стало считаться, что такой код

if (expr) {
  expr
} else {
  expr
}
это круто стильно молодёжно,
а вот такой код:
(if expr ;then
   expr ; else
  expr)
это — «фууу скобочки»?

Не является ли это просто следствием промывки мозгов основной массы кодеров авторитарными лидерами-программистами, такими как Страуструп? (Не знаю что там на счёт Ритчи, но сдаётся мне он не был на столько упорот и не заводил толпы программистов своими проповедями(но может просто у него не было возможности).)

В общем хрен его знает от куда пошло такое мнение, наверное из глубины веков, когда программисты всерьёз считали что за 2 месяца интенсивной работы смогут научить компьютер понимать человеческую речь.
Не важно откуда это взялось, на дворе 21 век, люди во всю меняют пол, так что и к вопросу выбора способа расстановки скобочек нам нужно подойти с рациональной точки зрения, а не руководствуясь предвзятостью, мнением престарелых «авторитетов», синдромами утёнка и другими багами человеческой психики.

И так, какие же плюсы несёт оборачивания в скобочки:
1) Унификация. Все выражения начинаются и заканчиваются скобочками.
2) Легко парсить.
3) Видно где начало/конец.
4) Легко рефакторить — надо перенести блок кода? Встал на открывающую/закрывающую скобку(на самом деле для умного редактора даже это не надо можно прямо изнутри выражения), нажал на кнопку — выделилось всё выражение, вырезал, перенёс куда надо.
5) Для автоматических манипуляций ака макросов это тоже удобно.
6) В будущем возможно создание умных инструментов, например умный структурный дифф, который не линии будет диффить, а понимать структуру, а потом умный просмотрщик таких дифоф сможет показать как от куда и куда перенесли это выражение и что там конкретно поменяли.
И т.д.

В общем как не размышляй о идеальном языке, всё равно получается лисп. Воистину Б-г писал на лиспе.

★★★★

Поздравляю с переходом на новый левел.

Debasher ★★★★★ ()

о идеальном языке

об

а еще, как выразился один человек, которого я не помню, «не языка, а AST. Язык в лисп не завезли

f1u77y ★★★ ()

Причем здесь тег «haskell»?

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

В хаскеле принято избавляться от скобочек. Синтаксис хаскеля как раз ближе к первому «сишному» варианту.

Bad_ptr ★★★★ ()

(if expr expr expr)

Говно, потому что нужно мысленно считать выражения.

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

Во-первых считать не нужно, само считается если привыкнуть.
Во-вторых на сях тоже можно писать обфусцированный код в одну строчку.
В-третьих есть разные отступы.
В-четвертых никто не мешает на самом деле вставить там слова :then :else, но это не нужно.

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

Во-первых считать не нужно, само считается

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

если привыкнуть.

Сколько лет нужно привыкать и каков профит от этого?

Во-вторых на сях тоже можно писать обфусцированный код в одну строчку.

В сях будет не равномерная каша, а if (foo) bar(); else bzz();

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

Семантика другая: в хаскеле if then else — выражение, которое обязано возвращать значение одного и того же типа. И сбалансированность выражений гораздо выше оных в лиспе, поскольку имеется в виду сбалансированность на типах. Открывающая/закрывающая скобки, хоть и сбалансированы, смысла несут мало. Вот потому и не молодежно.

iVS ★★★★★ ()

Наврал сразу. Лишних скобок в сях написал. А ну-ка для начала переделай, чтобы было честно.

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

Сколько лет нужно привыкать

ну вот как к «сям» привыкают со школы, так же и к лиспу бы привыкли.

каков профит от этого?

Смотря что считать профитом и как его измерять.

В сях будет не равномерная каша, а if (foo) bar(); else bzz();

И всё же не соглашусь. Не так страшна лисповая каша, как её малюют. А то вот в сях не всегда понятен порядок операций и смысл деклараций.

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

каков профит от этого?

Смотря что считать профитом и как его измерять.

Производительность труда.

Не так страшна лисповая каша, как её малюют

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

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

в хаскеле if then else — выражение, которое обязано возвращать значение одного и того же типа

А причём тут это? Насколько я знаю для хаскеля так и не сделали нормального раставления отступов в емакс, например(да и в других редакторах).(не в 90% случаев всё работает, но если применить что-то не стандартное автораставление отступов ломается, со скобками понятное дело всё было бы проще)

Bad_ptr ★★★★ ()

Вот что читается куда лучше, чем эта ересь:

case Expr of
   True: Expr
   False: Expr
end;
anonymous ()
Ответ на: комментарий от Bad_ptr

Отступы в хаскеле — г@#$о по дизайну, вот и не сделают никак. По мне, можно и без скобочек обходиться, если отступы хоть немного обдуманы, хотя бы на уровне питона.

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

Производительность труда.

Ну, думаю, если бы у сей был лиспоподобный синтаксис, легче было бы сделать ИДЕ, со средствами рефакторинга и прочие инструменты автоматической трансформации кода.

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

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

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

Лорчую! Ещё немного, и он, возможно, наконец-то научится класть болта на чужое мнение.

Deleted ()

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

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

Manhunt ★★★★★ ()
EXPR? IF EXPR ELSE EXPR THEN;
anonymous ()
Ответ на: комментарий от Bad_ptr

Нужно проводить исследования на школьниках.

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

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

если бы у сей был лиспоподобный синтаксис

никто бы не стал на них писать.

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

Гвидо доказал это на деле

Что без скобочек хрен напишешь нормальную лямбду.

no-such-file ★★★★★ ()

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

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

так и чем это лучше? Хотя бы 1 аргумент объективный будет или просто «мне так нраица, потому что меня так научили»

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

Нужно проводить исследования на школьниках.

Ты чё, издеваешься? Яйцеголовые промывали мозги студентоте схемкой фиг знает сколько лет, и все равно лисп не взлетел.

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

У вас скобочное отрицание, вам показан курс 2х месячных оборачиваний мокрыми скобками.

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

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

1) Студенты уже со школы индоктринированы си-бейсик-поскалями.
2) Студентов учат многому хорошему, но они идут работать в уже сложившуюся индустрию с уже сложившимися культурными стереотипами.

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

Только 1 вопрос. Зачем писать так, если можно обернуть скобками. Плюсы скобок я попытался изложить(ещё можно упомянуть про приоритет операций), каковы плюсы вашего безскобочного подхода?

Bad_ptr ★★★★ ()

Я уже объяснял и могу ещё раз объяснить, хотя лучше б я делом занялся :(

1. Ты наврал. В С неявным образом присутствует составной оператор. Если там одно expr, то фигурные скобки можно убрать и будет

if (expr) 
  expr; 
else 
  expr; 
Если же не убирать фигурные скобки, то твой пример для лиспа запишется так:
(if expr 
   (progn
     expr) 
  (progn 
    expr))
Уже выглядит не так элегантно.

2. И второй раз ты наврал, потому что в С expr может вычисляться только ради эффекта, а в лиспе будет возврат значения. Это не хорошо и не плохо, это просто разное.

3. Из соображений «количества информации» часто используемые слова должны быть короткими, редко используемые - длинными. Если у тебя в коде резко торчит одна из букв (скобка), то значит, у тебя плохо подобраны буквы. Тем самым снижается конкурентоспособность твоя, поскольку ты медленнее передаёшь мысли.

Когда ты передаешь структуру только круглыми скобками и пробелами (в лиспе), это подобно общению в двоичном коде.

Когда у тебя есть 4 вида разделителей ({}, () запятая, точка с запятой), то это ты перешёл к 4-ричному коду. Текст становится гораздо более приятен на вид.

4. С тоже не образец хорошего синтаксиса - он не читается слева направо и в нём слишком сложная таблица приоритетов операций. Поэтому их сравнение непонятно зачем нужно. Из серии, «ты за белых или за красных», при том, что в реальности выбор всегда богаче.

den73 ★★★★★ ()
Ответ на: комментарий от no-such-file

Предложение про «Гвидо», который что-то доказал про «лямбды» немного странно видеть.

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

anonymous ()

Унификация. Все выражения начинаются и заканчиваются скобочками.

Неочевидно, что это преимущество

Легко парсить.

Зато трудно читать. Один раз сэкономили силы на парсере и всю остальную жизнь тяжело трудимся при чтении. На самом деле CL невозможно распарсить, потому что таблицы чтения и #.

Видно где начало/конец.

Видеть можно или по отступам, или когда среда подсвечивает. Если в лиспе написать в одну строку и без среды, то ничего не увидишь.

Легко рефакторить

Ты описал не рефакторинг, а просто перенос выражения. Как быть с тем фактом, что для Явы 100 лет назад уже написали рефакторинг, а для лиспа его до сих пор не существует?

Для автоматических манипуляций ака макросов это тоже удобно.

Ради удобства написания примерно 5% всего кода создаём трудности при чтении остальных 95% кода. Прекрасно!

den73 ★★★★★ ()

В любом случае спасибо за ссылку под словом «нам». Поржал. Определил себя как шизоида, хотя у меня не всё так плохо с пластикой и с речью.

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

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

Всё, больше я в эту тему ни ногой. Я занят - пишу парсер объявлений библиотек.

Переводом префикса «def» на мой язык будет префикс «объ_». Можно начинать негодовать.

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

В С неявным образом присутствует составной оператор. Если там одно expr, то фигурные скобки можно убрать

Только лучше не убирать. Вообще не понятно, для кого сделаны такие «хаки» в языке и зачем, для удовлетворения тяги к красоте что ли?

твой пример для лиспа запишется так

один из прогнов можно и убрать, но это будет лишним. А вдруг мы захотим вернуть не значение последнего выражения в ветке, а первого? Для это достаточно будет заменить progn на prog-1.

Когда у тебя есть 4 вида разделителей ({}, () запятая, точка с запятой)

в лиспе тоже можно их задействовать, при желании.

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

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

статическая типизация ну и мегакорпы за спиной

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

Вот эта дрянь с begin end – самое мразотное, даже сишный синтаксис не такая каша. Даже json, даже небо и даже... Этот самый.

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

Говно, потому что нужно мысленно считать выражения.

Помнится, ты когда-то давал ссылку на то почему s-expr - это плохо. Забыл аргументацию, не напомнишь?

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

Это же надо, сколько боли. Тебя сношали этим бегинэндом, что-ли?

Только неуравновешенные подростки ставят синтаксис на первое место.

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

Только неуравновешенные подростки ставят синтаксис на первое место.

С этим согласен полностью.

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

Только неуравновешенные подростки ставят синтаксис на первое место.

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

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

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

Скобочки явно не способствуют компактности, если на лиспе писать как на процедурной сишечке. Так же и лямбды с хвостовой рекурсией выглядят убого в с++.

Ну так а кто же тут доктор тому, кто тащит в язык всякую гадость с пола.

anonymous ()

do_something() if something() else die();

так еще проще, не? читаешь прям как книгу

reprimand ★★★★★ ()

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

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

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

Только лучше не убирать. Вообще не понятно, для кого сделаны такие «хаки» в языке и зачем, для удовлетворения тяги к красоте что ли?

если ты выражение не пишешь не следующей строке, то это более понятно, красиво, + не приводит к странным результатам из-за комментирования кода

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

Гвидо пока доказал лишь полную некомпетентность.

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