LINUX.ORG.RU

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

 , , , ,


0

4

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

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

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

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

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

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

★★★★

групповой терапии лисперов тред #1488

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

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

Если у тебя в коде резко торчит одна из букв (скобка), то значит, у тебя плохо подобраны буквы.

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

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

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

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

Код не должен читаться как книга.

кто сказал? не должен? договор составлен? документ есть?

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

аналогичный вопрос

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

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

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

Им самим и надо парсить.

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

Написать, например.

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

Откуда числа?

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

кто сказал? не должен? договор составлен? документ есть?

Сказали разработчики языков, компиляторов и интерпретаторов а им сказали ограничения алгоритмов, оптимизаций, целевых платформ и так далее.

аналогичный вопрос

А тут по определению.

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

ЛП про работу программиста, независимо пишет он парсер языка или формочки для 1С.

loz ★★★★★ ()

В реболе / реде кстати так:

>print either [1 > 2] ["more"] ["less"]
"less"
loz ★★★★★ ()
Ответ на: комментарий от loz

Сказали разработчики языков, компиляторов и интерпретаторов а им сказали ограничения алгоритмов, оптимизаций, целевых платформ и так далее.

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

ЛП

wat?

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

объ_
ъ

Ъ!!!
Зачем? И об- - это же приставка. А если танцевать от корня(что должно быть более логично) - яв, явить.

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

затем, что об - это «об забор». Правда, и объ мне тоже не нравится. Яв можно рассматривать, но это менее понятно. Объявление и явление это разное, да и объявление - это на самом деле def, т.е. определение.

На самом деле, все эти обсуждения страшно отвлекают. Я уже выкинул почти все сокращения, отложив их на неопределённый срок.

den73 ★★★★★ ()

а вот такой код:

как будто в сях так нельзя.

(expr ? expr1 : expr2)

и пиши скобочки сколько влезет.

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

ещё можно упомянуть про приоритет операций

Я лисп бы выучил только за то... (тм) %)

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

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

Какие примеры? Маккарти еще не открыл лисп в те времена.

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

Код не должен читаться как книга.

Ох, с этого места подробнее. А как что код должен читаться? Не говори только, что как скобчатая лапша )))

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 1)

Где учат так пустословить? Я срочно записываюсь на эти курсы!

rupert ★★★★ ()

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

Посчитай компиляторы Си и IDE. А затем посчитай количество программ на Си. И увидишь, что программ на Си на много порядков больше. Если упрощение парсинга усложняет восприятие человека, то мы имеем профит при написании нескольких программ, но имеем проигрыш при написании на порядок большего количества программ.

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

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

«Многабукф».

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

Все это изначально спроектировано отталкиваясь от элементарной логики:

  • {}/[]/SPACE/*CHAR_FRAMING* призваны выделять блок инструкций в основе императивщины.
  • По логике блок инструкций может состоять как из одной инструкции, так и из нескольких, сл-но одна инструкция - так же может называться блоком инструкций, а сл-но вы можете оборачивать свой блок в *CHAR_FRAMING*, или же нет, если инструкция одна. Это уже на ваше усмотрение (не применимо ко всем ЯП поддерживающим императивщину). К слову, некоторые ЯП и позволяют оборачивать вам эти блоки без всяких условий, что так же является элементом классической логики.
  • Инструкции зависящие от условий, по определению являются блоками. Но (п.2) блок может содержать одну инструкцию, а одна инструкция являющаяся блоком не обязательно должна быть обернута в *CHAR_FRAMING*, поэтому, используя условия, вы можете оборачивать одну инструкцию, а можете не оборачивать. В конечном счете, вы все равно определяете блок.

Это если углубляться в логику, а если простыми словами - в императивщине - если вы хотите выделить блок инструкций - вы их выделяете (неважно сколько их, от 1 до N, и не важно чем, [/{/SPACE/etc). Смотрите на это как на возможность агрегирования нескольких процессорных команд в одну логически завершенную, и тогда м.б. вы перестанете думать что {} в императивщине это замена кругляков в лиспе. Это не одно и то же.

Любой нормальный императивный язык должен позволить вам это сделать. Не потому что это «легко парсить», или как вы выразились

из-за прихоти ради удовлетворения.

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

следствием промывки мозгов основной массы кодеров авторитарными лидерами-программистами

Вы сравниваете то, что адекватный программист (знающий несколько парадигм, и не зацикленный на одной из них) никогда сравнивать не станет.

znenyegvkby ()

если не знал-скобочки это +одна операция для процессора(код со скобочками компилируется на действие больше чем без скобочек)

тожесамое почему ;(ирчку с запятой) лучше не ставить в местах где ее можно опустить

это про низкоуровневые языки

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

tem3 ()

Окей, сколько kloc ты написал на божественных «скобочках», а сколько на более других ЯП?

Лишп маргинален, а над маргиналами принято подшучивать и гнобить их.

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

Ох, с этого места подробнее. А как что код должен читаться?

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

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

Должен, и читается он так, как это удобно было сделать разработчику стандарта языка.

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

Вопрос же был в том, как код ДОЛЖЕН читаться. Пусть это будет идеально компетентный автор языка, идеальный язык, и пишет на нём идеальный программист. Как должен читаться его код?

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 3)

If для дебилов. Пацаны cond используют.

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

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

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

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

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

Их через друг друга и пишут, поэтому они суть одно.

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

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

Чуть меньше, чем к if (foo) bar(); else bzz();. Профит зависит от задач. Если охота написать, например, модуль для Линукса - то невелик.

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

Ну неравномерная каша, большая разница.

Gentooshnik ★★ ()

Предложи хотя бы замену синтаксиса паскаля через скобочки?

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

Deleted ()

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

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

Как говорится: плохому танцору...))

anonymous ()
10 if a = 10 then goto 40
20 print "kak vu zayo uzhe"
30 goto 50
40 print "idite naujh"
50 end
anonymous ()
Ответ на: комментарий от Deleted

Скобочки хороши, но не могу придумать, как прикрутить к этому типизацию.

Посмотри на Typed Racket.

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

Исключительно вопрос привычки.

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

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

Нет единства синтаксиса, на первый взгляд. Если уж такое - то Haskell куда лучше.

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

идеальном языке
Язык в лисп не завезли

так это же и есть идеал)

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

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

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

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

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

сразу понимаешь, что на вход и что на выход

скажи «превед» линзам

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

Там типизация строго перед началом функции.

В ракете можно точно так же:

add     :: Integer -> Integer -> Integer
add x y =  x + y
(: add (-> Integer Integer Integer))
(define (add x y)
  (+ x y))

; Хотя можно и так:
(define: (add [x : Integer] [y : Integer]) : Integer
  (+ x y))
Мне как раз больше нравится второй вариант. Проблем с его пониманием не вижу. Опять же, много ли смысла «не зная языка» понимать «что на вход и выход»?

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

В общем то нет, хотя вариант с Haskell'ем мне субъективно нравится больше.

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

Не бойся, вижу я хорошо.

Это сарказм с твоей стороны или правда не понял о каких линзах речь?

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

Понял только после твоего комментария.

Я не прогаю на Haskell'е, а только один раз прочитал книгу Мена, поэтому сопоставления в голове не произошло.

Надо попросить прощения у f1u77y: сагрился, как дурак, прости.

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

это типа смешная шутка али как? upd: всё, понял, вопрос снят

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

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

Чуть меньше, чем к if (foo) bar(); else bzz();

Это, конечно, не так.

Ну неравномерная каша, большая разница.

Качественная.

tailgunner ★★★★★ ()

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

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

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

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

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

Э-э-э, живу в своей квартире уже три года. ЧЯДНТ? Есть, конечно, ещё халтурка с недоязычками, но она составляет менее трети общего дохода.

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

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