Про синтаксис
От: Воронков Василий Россия  
Дата: 06.06.12 14:17
Оценка:
Есть такая идеологическая проблема.

Есть язык, с хаскеле-подобным синтаксисом (т.е. layout-based), выражения можно писать прямо в топ-левеле. Выражениями является все, кроме директив открытия модулей и глобальных let-биндингов. Однако два выражения подряд по типу:

2+2

someFunc x y


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

Вернее, на самом деле не так.

Код, как выше, вообще работает совсем не так, можно подумать. Т.е. для выражений на топ-левеле layout свободный, поэтому можно писать так:

if cond then
expr1
else
expr2


И это абсолютно корректно. Или так:

[] 
|> regFuns BasicTests
|> regFuns FunTests
|> regFuns RangeTests
|> regFuns ListTests


Однако как в первом случае писать нельзя, ибо такое выражение будет в реальности интерпретировано как:

(+) 2 2 someFunc x y


И здесь-то и кроется проблема.

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

if cond then
  expr1
  else
  expr2


Какое из двух зол лучше?
Re: Про синтаксис
От: VoidEx  
Дата: 06.06.12 14:32
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Какое из двух зол лучше?


Вижу здесь только одно зло — отсутствие layout в top-level. Зачем это нужно?
Re: Про синтаксис
От: Temoto  
Дата: 06.06.12 14:32
Оценка:
ВВ>Есть такая идеологическая проблема.

ВВ>Есть язык, с хаскеле-подобным синтаксисом (т.е. layout-based), выражения можно писать прямо в топ-левеле. Выражениями является все, кроме директив открытия модулей и глобальных let-биндингов. Однако два выражения подряд по типу:


ВВ>
ВВ>2+2

ВВ>someFunc x y
ВВ>


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


А как же сайд-эффекты? print "Hello world" ?

ВВ>Какое из двух зол лучше?


Вот это:

ВВ>
ВВ>if cond then
ВВ>  expr1
ВВ>  else
ВВ>  expr2
ВВ>
Re: Про синтаксис
От: FR  
Дата: 06.06.12 14:34
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Есть такая идеологическая проблема.


Разделители не помогут, например как в OCaml ';;' ?
Re[2]: Про синтаксис
От: Воронков Василий Россия  
Дата: 06.06.12 14:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, Воронков Василий, Вы писали:

ВВ>>Есть такая идеологическая проблема.
FR>Разделители не помогут, например как в OCaml ';;' ?

Разделитель на самом деле есть — ($). Т.е. можно так:

2+2 $
myfun x y


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

Но проблема в том, что синтаксис все же построен на отступах — поэтому иногда возникают ситуации, когда два выражения идут подряд в топ-левеле, и чисто визуально они воспринмаются как два разных выражения. А в действительности это не так — и в итоге получаются весьма странные ошибки.
Re[2]: Про синтаксис
От: Воронков Василий Россия  
Дата: 06.06.12 14:49
Оценка:
Здравствуйте, Temoto, Вы писали:

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

T>А как же сайд-эффекты? print "Hello world" ?

В реальности сейчас такой print может быть только foreign функцией. И для нее таки будет сгенерирован ворнинг. Отчасти это правильно, т.к. если возникают побочные эффекты, то надо избавляться от санков, и явно декларировать порядок выполнения.
Если код прям именно такой, то можно просто написать так:

let _ = print "Hello, world!"


и ворнинга не будет.
Но с т.з. самого языка — все равно это обычная функция, которая должна возвращать какое-то полезное значение.
Re[3]: Про синтаксис
От: FR  
Дата: 06.06.12 16:36
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


Может тогда стоит сделать как в интерпретаторе питона, нажатие enter после ':' переводит в режим с отступами
(рисуются ... слева) при этом работает только ввод без интерпретации, ввод пустой строки снова запускает
интерпретатор.
Re[4]: Про синтаксис
От: Воронков Василий Россия  
Дата: 06.06.12 16:57
Оценка:
Здравствуйте, FR, Вы писали:

FR>Может тогда стоит сделать как в интерпретаторе питона, нажатие enter после ':' переводит в режим с отступами

FR>(рисуются ... слева) при этом работает только ввод без интерпретации, ввод пустой строки снова запускает
FR>интерпретатор.

Так я ж не про Репл. В Репле-то как раз ;; используется.
Re: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.06.12 22:59
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Есть такая идеологическая проблема.


Ответ на все проблемы:
  Скрытый текст
{ }
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Про синтаксис
От: VoidEx  
Дата: 07.06.12 02:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>Есть такая идеологическая проблема.


VD>Ответ на все проблемы:

VD>
  Скрытый текст
{ }


Болит голова? Ударь себя по яйцам! И боль в голове — уже не тревожит.
Re[2]: Про синтаксис
От: Воронков Василий Россия  
Дата: 07.06.12 07:12
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Есть такая идеологическая проблема.

VD>Ответ на все проблемы:
VD>
  Скрытый текст
{ }


Такой оператор уже есть. Он называется "сепукка". Объяснять, что он делает?

Кстати, мне казалось, что тебе вариант описания лямбды вида "(x,y)=>x+y" нравится больше, чем "fun(x,y) {x+y}". Или что-то поменялось с тех пор?
Re[3]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.06.12 16:22
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Кстати, мне казалось, что тебе вариант описания лямбды вида "(x,y)=>x+y" нравится больше, чем "fun(x,y) {x+y}". Или что-то поменялось с тех пор?


Да, больше. Но он не самодостаточен. Скажем нельзя описать тип возвращаемого значения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Про синтаксис
От: Воронков Василий Россия  
Дата: 07.06.12 19:59
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Кстати, мне казалось, что тебе вариант описания лямбды вида "(x,y)=>x+y" нравится больше, чем "fun(x,y) {x+y}". Или что-то поменялось с тех пор?

VD>Да, больше. Но он не самодостаточен. Скажем нельзя описать тип возвращаемого значения.

Ну то есть отсутствие скобочек тебе не мешает?

def sum = (x,y) => x+y      
-1;


Кстати, с т.з. синтаксиса никто не мешает тип приписать: "(x:int,y:int):int=>x+y"
Re[5]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.12 12:02
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну то есть отсутствие скобочек тебе не мешает?


ВВ>
ВВ>def sum = (x,y) => x+y      
ВВ>-1;
ВВ>


В выражениях — нет. Когде же речь идет о группировке стэйтментов/выражений — скобки очень способствуют восприятию и навигации.

Потом, лично моя логика очень простая. Большинство программистов воспитаны на сишных скобках. Можно сказать, что они впитали их с молоком матери. Зачем ссать против ветра?

Создав язык с удобным тебе синтаксисом не стоит ожидать, то он будет нравится массам. Нужно потакать привычкам окружающих. Пусть даже эти привычки кажутся тебе дурными.

ВВ>Кстати, с т.з. синтаксиса никто не мешает тип приписать: "(x:int,y:int):int=>x+y"


Для Немерла — да. Но в макросе он не реализован. В 99% это не нужно. А для оставшегося процента есть исходный (ML-й) синтаксис. Для Шарпа, скорее всего, будет проблемы, так как синтаксис описания типа возвращаемого значения не регулярный.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Про синтаксис
От: Воронков Василий Россия  
Дата: 08.06.12 14:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В выражениях — нет. Когде же речь идет о группировке стэйтментов/выражений — скобки очень способствуют восприятию и навигации.

VD>Потом, лично моя логика очень простая. Большинство программистов воспитаны на сишных скобках. Можно сказать, что они впитали их с молоком матери. Зачем ссать против ветра?

Что такое "группировка стэйтментов/выражений"? Два выражения подряд в Си без всяких скобочек пишутся. Обсуждаемое в разрезе Си-подобного синтаксиса аналогично следующему:

x+y
-z;


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

{x+y}
{-z}


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

VD>Создав язык с удобным тебе синтаксисом не стоит ожидать, то он будет нравится массам. Нужно потакать привычкам окружающих. Пусть даже эти привычки кажутся тебе дурными.


Что нравится массам — вопрос загадочный. Ты Луа знаешь? Там синтаксис — лютый коктейль из всего на свете. Однако массам нравится, и в своей нише первее всех.

ВВ>>Кстати, с т.з. синтаксиса никто не мешает тип приписать: "(x:int,y:int):int=>x+y"

VD>Для Немерла — да. Но в макросе он не реализован. В 99% это не нужно. А для оставшегося процента есть исходный (ML-й) синтаксис. Для Шарпа, скорее всего, будет проблемы, так как синтаксис описания типа возвращаемого значения не регулярный.

Главное отличие этого синтаксиса от fun, не считая дурацкого слова "fun" (весело, что ли, кому-то? ) — это отсутствие скобочек. Почему ты считаешь, что здесь скобочки не нужны? И куда предлагаешь их засунуть?
Re[7]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.12 16:11
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Что такое "группировка стэйтментов/выражений"? Два выражения подряд в Си без всяких скобочек пишутся. Обсуждаемое в разрезе Си-подобного синтаксиса аналогично следующему:


ВВ>
ВВ>x+y
ВВ>-z;
ВВ>


Не пишутся. Не выдумывай. Стэйтменты могут идти подряд только в рамках блока. Иначе:
if (c)
b;
c;

и приплыли.

ВВ>Точку с запятой забыли на первой строке — и получили одно выражение, а не два.


Это уже отдельный вопрос к теме не относящийся. Если забыли, то будет один стейтмент/выражение. Хочешь обсудить способы борьбы с этим?

ВВ> Выглядит как два, на самом деле — одно.


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

ВВ>Ты мне так что ли предлагаешь писать:


ВВ>
ВВ>{x+y}
ВВ>{-z}
ВВ>


Я не вижу смысла в данном коде. Потому как тут по фигу как писать.

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

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


Ага. Он в любом варианте для гражданского населения страх и ужас.

Ты же об отступах речь вел. Вот скобки и решают все проблемы с отступами.

ВВ>Что нравится массам — вопрос загадочный. Ты Луа знаешь? Там синтаксис — лютый коктейль из всего на свете. Однако массам нравится, и в своей нише первее всех.


Дык и популярность у Луа чуть выше Хаскеля, не смотря на серьезную поддержку. Отказались бы еще от скобок у вызовов функций и популярности было бы еще меньше.

ВВ>Главное отличие этого синтаксиса от fun, не считая дурацкого слова "fun"


А чё же его не считать то? Он самый дурацкий и есть. Занимает много места и практически ничего не дает. А вот разница с (x){ ... } была бы уже не такая значительная. В Котлине сделали: { x -> ... }, например.

ВВ>(весело, что ли, кому-то? ) — это отсутствие скобочек.


Сам же первым делом сказал про fun.

ВВ>Почему ты считаешь, что здесь скобочки не нужны? И куда предлагаешь их засунуть?


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

В прочем, я не отрицаю отступного синтаксиса. Но как видишь с ним бывают проблемы. Да и не привычен он для многих.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Про синтаксис
От: grosborn  
Дата: 08.06.12 17:19
Оценка:
Вот уже который раз наблюдаю твои споры по поводу синтаксиса. Пичаль. Ты ведь заправила по синтаксису. Почему нет царя в голове? Почему нет понимания каким целям он служит? Желательны-нежелательны, вкусовщина. Вот читаю я это всё и в Н не верю. Синтаксис основа, а нет ни логического его у тебя обоснования ни философского.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[8]: Про синтаксис
От: Воронков Василий Россия  
Дата: 09.06.12 09:19
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Точку с запятой забыли на первой строке — и получили одно выражение, а не два.

VD>Это уже отдельный вопрос к теме не относящийся. Если забыли, то будет один стейтмент/выражение. Хочешь обсудить способы борьбы с этим?

Это как раз вопрос, который и относится к теме — в отличие от скобочек. Речь именно об этом. Так как layout не включен для выражений на топ-левеле их необходимо разделяться через sequencing оператор. Если оператор забыть, то выражения на разных строках склеиваются.

ВВ>> Выглядит как два, на самом деле — одно.

VD>Как что выглядит мало кого интересует. В правильных языках тебя об этом предупредят.

В каких?

ВВ>>
ВВ>>{x+y}
ВВ>>{-z}
ВВ>>


VD>Я не вижу смысла в данном коде. Потому как тут по фигу как писать.


Смысла здесь не больше и не меньше, чем в:

func1 x y
func2 x


Две апликации. Или одна? Вот в чем вопрос

VD>В реальном коде первое выражение будет ошибкой. Об этом и должен сказать компилятор. Вычисленное значение не должно теряться.


Предупредит. Но речь не об этом. К тому же, если это выражение является последним в блоке, то предупреждения не будет — значение ведь не теряется. Поэтому на ворнинг тут расчитывать не приходится.
В приведенном примере кода "правильное" поведение такое:
+ дать ворнинг на аплкацию func1 (результат не используется)
+ вернуть результат апликации func2

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

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

VD>Ага. Он в любом варианте для гражданского населения страх и ужас.

Гражданское население пугается того, что тип-аннотации в Немерле пишутся не так, как в шарпе. И что?
Синтаксис Хаскелла довольно прост, в отличие от си-подобного, и проектировался под функциональные язык, в отличие от си-подобного.

VD>Ты же об отступах речь вел. Вот скобки и решают все проблемы с отступами.


Нет. Речь о многострочных выражениях. Включение отступов как раз *решает* эту проблему.

ВВ>>Что нравится массам — вопрос загадочный. Ты Луа знаешь? Там синтаксис — лютый коктейль из всего на свете. Однако массам нравится, и в своей нише первее всех.

VD>Дык и популярность у Луа чуть выше Хаскеля, не смотря на серьезную поддержку. Отказались бы еще от скобок у вызовов функций и популярности было бы еще меньше.

Луа — самый популярный язык для ембединга. Кстати, скобки при вызове функций там ряде случаев можно опускать.
Руководствуясь твоей логикой, Хаскелл был бы популярней, если бы имел Си-подобный синтаксис — я думаю, это не так.

ВВ>>Главное отличие этого синтаксиса от fun, не считая дурацкого слова "fun"

VD>А чё же его не считать то? Он самый дурацкий и есть. Занимает много места и практически ничего не дает. А вот разница с (x){ ... } была бы уже не такая значительная. В Котлине сделали: { x -> ... }, например.

fun — три символа. => два. Экономия небольшая.
Продаю идею синтаксиса для лямд:

\(x,y) x + y

и парсить проще, чем шарповый.

ВВ>>Почему ты считаешь, что здесь скобочки не нужны? И куда предлагаешь их засунуть?

VD>Я к этому вопросу подхожу так... В нутри выражения фигурные скобки не желательны. Их место на уровне блоков. А блоки относятся к стэйтментам, функциям и т.п. Другими словами к структуре программы. Вот там скобки на своем месте. По сему лямбды и операторы вроде if-а в скобках не нуждаются. А как только речь заходит о группировке нескольких выражений, то они становятся нужны.

Однако { что-то там } в Немерле в свою очередь так же является выражением. Если мне не изменяет память, даже код вида {x}+{y} является корректным.
Си-подобный синтаксис вообще неплохой, но он задумывался для императивного языка с четким разделением на выражения и стейтменты. Когда это разделение убирается, то получает чехарда с тем, что блок {} сам по себе становится выражением, а точка с запятой иногда обязательна, а иногда — нет.

VD>В прочем, я не отрицаю отступного синтаксиса. Но как видишь с ним бывают проблемы. Да и не привычен он для многих.


В си-подобным проблем больше.
Re[9]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.06.12 11:14
Оценка: -1
Здравствуйте, grosborn, Вы писали:

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


Обоснуй. А то заправилам меня пичаль от тваяго саабщения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Про синтаксис
От: grosborn  
Дата: 12.06.12 12:41
Оценка: +1
> G>Вот уже который раз наблюдаю твои споры по поводу синтаксиса. Пичаль. Ты ведь заправила по синтаксису. Почему нет царя в голове? Почему нет понимания каким целям он служит? Желательны-нежелательны, вкусовщина. Вот читаю я это всё и в Н не верю. Синтаксис основа, а нет ни логического его у тебя обоснования ни философского.
>
> Обоснуй. А то заправилам меня пичаль от тваяго саабщения.

Я ни разу не видел что бы ты как-то обосновывал свое мнение по синтаксису. Все обсуждения что я читал, синтаксис вы обсуждаете на уровне нравится/не нравится. И даже где-то открыто было — вкусовщина. И вэтой ветке так же.
Особенно меня задевает отступной синтаксис. Как можно не понимать, что это абсолютно неприемлемо для любого языка, который использует человек? Мы же не для дроидов языки создаем, <скипнуто сумбурное философское обоснование>
Нужно иметь четкие критерии позволяющие обоснованно подходить к формированию синтаксиса. Нужно понимать, что в процессе работы с этим синтаксисом, часть (текст программы -> программа) это мизерная часть. Основная задача синтаксиса, это не "оптимальное выражение инструкций препроцессору и компилятору". Основная задача синтаксиса, это документирование этих инструкций. Процесс работы с текстом программы, это многократное перечитывание и переписывание. Сокращая синтаксис, мы вроде бы как сокращаем затраты на переписывание, а поскольку это система, сокращая синтаксис и усложняя перечитывание (неинтуитивные соглашения) и понимание(не поддерживая структуру), мы увеличиваем объем переписывания.

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

Страуструп буде гореть в аду вечно.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[11]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.06.12 14:28
Оценка:
Здравствуйте, grosborn, Вы писали:

G>Я ни разу не видел что бы ты как-то обосновывал свое мнение по синтаксису. Все обсуждения что я читал, синтаксис вы обсуждаете на уровне нравится/не нравится. И даже где-то открыто было — вкусовщина. И вэтой ветке так же.

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

Что не приемлемо?

G>Мы же не для дроидов языки создаем, <скипнуто сумбурное философское обоснование>

G>Нужно иметь четкие критерии позволяющие обоснованно подходить к формированию синтаксиса. Нужно понимать, что в процессе работы с этим синтаксисом, часть (текст программы -> программа) это мизерная часть. Основная задача синтаксиса, это не "оптимальное выражение инструкций препроцессору и компилятору". Основная задача синтаксиса, это документирование этих инструкций. Процесс работы с текстом программы, это многократное перечитывание и переписывание. Сокращая синтаксис, мы вроде бы как сокращаем затраты на переписывание, а поскольку это система, сокращая синтаксис и усложняя перечитывание (неинтуитивные соглашения) и понимание(не поддерживая структуру), мы увеличиваем объем переписывания.

Я не знаю что там было поскипано, но вся эта сентенция выражает одну мысль сказанную дальше явно:

G>Синтаксис — для человека, не для компилятора.


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

Теперь, определившись с тем для кого нужен язык, можно сделать вывод является ли синтаксис вещью объективной или субъективной. Раз оценивают его люди (субъекты), значит оценка эта сугубо субъективная. Одному нравятся отступы, другом скобки, третьему begin/end и т.п.

G>Синтаксис должен отвечать целям документировани и понимания. Соглашения должны быть систематичны.


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

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

G>Страуструп буде гореть в аду вечно.


Может и будет. Пока он жив и здравствует. А его творение является одним из популярных языков.

Кстати, причем тут Страуструп? Не он же скобки придумал использовать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Про синтаксис
От: grosborn  
Дата: 12.06.12 15:28
Оценка:
> G>Особенно меня задевает отступной синтаксис. Как можно не понимать, что это абсолютно неприемлемо для любого языка, который использует человек?
>
> Что не приемлемо?

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

> Я не знаю что там было поскипано, но вся эта сентенция выражает одну мысль сказанную дальше явно:

>
> G>Синтаксис — для человека, не для компилятора.
>
> С чем я не могу не согласиться, за маленькой поправкой. В основном для человека, а не для компьютера. Компьютеру код тоже надо читать и кое какие требования это налагает. Но действительно язык в первую очередь должен быть понятен и удобен для человека.
>
> Теперь, определившись с тем для кого нужен язык, можно сделать вывод является ли синтаксис вещью объективной или субъективной. Раз оценивают его люди (субъекты), значит оценка эта сугубо субъективная. Одному нравятся отступы, другом скобки, третьему begin/end и т.п.

Не субъективная. Статистически объективная. Субъективные требования конечно учитывать нужно. Думаю комплексно нужно подходить.

> G>Синтаксис должен отвечать целям документировани и понимания. Соглашения должны быть систематичны.

>
> Давай ты нам объяснишь что же это за загадочные цели документирования и понимания. А?
>
> А то я, грешным делом, привык к тому, что основным свойством языка является выразительность. Ну, традиционность еще можно вспомнить.

Что объективно есть выразительность?
Ну с традиционностью сразу понятно, это форма систематичности. Повторяя устоявшиеся шаблоны мы придерживаемся определенной системы позволяющей облегчить переучивание, запоминать больше сходных вещей, мыслить по аналогии.
Более выразительная форма это более компактная форма записи или более понятная или нечто большее?
Как тут был пример самого выразительного языка — код программы "Hello, world!" это . (точка)
Это выразительность? Вот не думаю.
Давай объективно это попытаемся разобрать.

Кстати о Begin End. Со стороны может показаться, что паскалистам нравятся сами Begin End. Это не так. Сила языка паскакаля была не в этом и можно было бы заменить begin end на {} и это не встретило бы принципиальных возражений, не привело бы к каким-то изменениям. И где-то даже меняли. Паскаль на сколько я помню первый распространенный язык с четким подходом к структурированию кода, к его удобочитаемости. И был отличен практически только этим. В остальном это был язык с такими же как у фортрана и даже меньшими за счет малого количества библиотек возможностями. (С форматированием у него на первых порах тоже разногласия были.) И это основное отличие паскаля реализовано в C# только Begin End скобочками заменили.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[13]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.06.12 21:00
Оценка:
Здравствуйте, grosborn, Вы писали:

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


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

G>Не субъективная. Статистически объективная. Субъективные требования конечно учитывать нужно. Думаю комплексно нужно подходить.


А, гулять так гулять! Озвучь как нам объективные "требования" к синтаксису.

G>Что объективно есть выразительность?


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

G>Ну с традиционностью сразу понятно, это форма систематичности.


Что за система?

Традиционность — это хождение на поводу людских привычек. Вот привык народ к фигурным скбокам и к круглым скобкам при вызове функции и это стало традицией. Никакой системы в этом нет. Вместо фигурных скобок могли быть использованы квадратные или круглые. Да и их вообще могло не быть. Это все стечение обстоятельств. Не более того.

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


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

G>Более выразительная форма это более компактная форма записи или более понятная или нечто большее?


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

В прочем поднятие выразительности может приводить к плохой читаемости. Отличный пример — регулярные выражения. Они компакты и выразительны, но крайне трудно читаются из-за отсутствия декомпозиции и слияния грамматических символов и паттернов. PEG / EBNF менее компактны, но долее выразительны (поддерживают рекурсию и декомпозицию).

G>Как тут был пример самого выразительного языка — код программы "Hello, world!" это . (точка)


Ну, да. Для решения этой задачи — это очень выразительный язык. Жаль, что он бесполезен для других задач.

G>Это выразительность? Вот не думаю.


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

G>Давай объективно это попытаемся разобрать.


Объективно тут можно только выявлять алогичные рассуждения.

G>Кстати о Begin End. Со стороны может показаться, что паскалистам нравятся сами Begin End. Это не так. Сила языка паскакаля была не в этом и можно было бы заменить begin end на {} и это не встретило бы принципиальных возражений, не привело бы к каким-то изменениям.


Привело бы. Это предпочтения, а именно они является яблоком раздора. Другое дело, что это не единственное и не главное отличие Си и Паскаля и тем более Дельфи и С++.

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


Вообще-то он был наследником Алгола. А распространенным Паскаль стал сильно позже. Да и появился он не так давно — в 1970 (параллельно с С).

G> И был отличен практически только этим.


От чего? Все языки эволюционировали к структурным. А в начале 70-ых появилась целая куча очень структурированных языков (например, C и ML). А один из очень структурных языков — Лисп — появился на 12 лет раньше Паскаля.

Так что это просто стереотип засевший в твоем мозгу, видимо из-за того, что тебе в начале обучения давали именно Паскаль.

G> (С форматированием у него на первых порах тоже разногласия были.) И это основное отличие паскаля реализовано в C# только Begin End скобочками заменили.


В общем, ясно. Ты начал программировать с Дельфи, вот тебе весь мир его клонами и кажется. Собственно это и есть подтверждение моих слов — привычки и стереотипы — это то что управляет людьми. Все суждения о языках и их синтаксисе сугубо субъективны. А субъективные суждения не систематизируешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Про синтаксис
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 13.06.12 00:03
Оценка:
G>Синтаксис на отступах. Отступы, традиционно это форматирование. А тут предлагается для традиционной и широко используемой вещи другое использование. Случайно поставили лишний пробел и получили неожидаемое поведение. Это вам не непарную скобочку искать, это покруче.

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

зы
Если подводить научную базу, то восприятие человека можно представить в виде способности воспринять (прочитать, перенести в кратковременную память, обработать, воспроизвести) цепочку символов из алфавита A длины L. Понятие "символ" в данном случае рассматривается в широком смысле, например, взрослый человек отдельные слова или устойчивые обороты воспринимает как один символ.
L у реального человека ограничен десятком-парой десятков символов в зависимости от задачи. Размер алфавита ограничен десятками тысяч на восприятие, и в районе полусотни на вывод.
Размер передаваемой информации одной цепочкой символов составляет L * Log2 Len A.
Чтобы повысить скорость восприятия человеком информации, требуется понижать L и повышать A. Выкидывание скобок и замена их на отступы как раз этому способствует: длина программы уменьшается, а алфавит расширяется за счет использования формы отступов и цвета символов. При этом алфавит вывода (ввода в компьютер) остается тем же самым в размере стандартного набора символов.
Re[13]: Про синтаксис
От: AlexCab LinkedIn
Дата: 13.06.12 06:57
Оценка: +1
Здравствуйте, grosborn, Вы писали:
G>Синтаксис на отступах. Отступы, традиционно это форматирование. А тут предлагается для традиционной и широко используемой вещи другое использование. Случайно поставили лишний пробел и получили неожидаемое поведение. Это вам не непарную скобочку искать, это покруче.
Попробуй ради спортивного интереса добиться "неожиданного поведения" в Python'е, одним пробелом (используя традиционные отступы).
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[14]: Про синтаксис
От: grosborn  
Дата: 13.06.12 08:21
Оценка:
<с остальной частью согласен>

> Чтобы повысить скорость восприятия человеком информации, требуется понижать L и повышать A.

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

Неверно. Мерой информации конечно является не длина двоичного представления. И человек не компьютер у него не идеальный ввод. Не учтен реальный механизм восприятия. Требуется увеличивать скорость восприятия и понимания, а не скорость чтения текста.
Краткое не обязательно быстрее и лучше воспринимаемое, да и не обязательно скорочитаемое. Сравни формы:
9996666544443333890006766666633333221226666766777777
999 6666 5
4444 3333 8 9 000 6 7 666666 33333 22 1 22 6666 7 66 777777

Скобки это поддержка понимания структуры кода программы. Разницу отступа в 10 или 11 пробелов я не замечу, выделить взглядом многострочную структурную единицу без скобок я не смогу, а выделение цветом это то же самое — замена символического выделения структурной единицы цветовой. На небольших модулях это может показаться нормальным. Но для больших текстов это сверло в голову. Проведи эксперимент, попробуй поработать в большом проекте с цветовым выделением. Это быстро надоедает, цвета должно быть в меру, в основном фон должен быть равномерным, эргономичным.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[14]: Про синтаксис
От: grosborn  
Дата: 13.06.12 08:21
Оценка:
> G>Синтаксис на отступах. Отступы, традиционно это форматирование. А тут предлагается для традиционной и широко используемой вещи другое использование. Случайно поставили лишний пробел и получили неожидаемое поведение. Это вам не непарную скобочку искать, это покруче.
>
> Хотя твои аргументы — это не более чем домыслы, но хочется задать тебе вопрос. Что ты со мной тогда споришь то? Я как раз считаю, что скобки привычны и удобны.

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

> G>Не субъективная. Статистически объективная. Субъективные требования конечно учитывать нужно. Думаю комплексно нужно подходить.

>
> А, гулять так гулять! Озвучь как нам объективные "требования" к синтаксису.

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

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

Правда могу предварительно постулировать парочку-другую самых простых критериев.

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

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

Систематичность. (вообще этот критерий достаточно субъективен, по нему нужно спорить и его нужно формулировать)
Предпочтительны синтаксические конструкции построенные по известному, или по тому же принципу, что уже используется в языке. Например, следующие в какой-то системе, по какому-то известному алфавиту, фрактальные.
Пример: {} — фрактальный паттерн. Если сравнивать две конструкции, где скобочки используются для одних и тех же целей, то {{}} предпочтительна по отношению к {[]} или к { }
Конструкции вида add, remove — систематичны, поскольку используются конструкции английского языка. И если возникнет ситуация сравнения addi против add, по этому критерию add более предпочтительна.
Конструкции вида Абырвалг12 будет систематична, если уже существуют конструкции Абырвалг0-Абырвалг11 и если Абырвалг12 соответствует этой же системе. (Это я условно пишу, речь идет не только об идентификаторах, и о структурах, взаимосвязях других вещах)
if else систематична в системе с if


Критерий субъективного выбора
Предпочтительны синтаксические конструкции получившие больше голосов


> G>Что объективно есть выразительность?

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

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

Мышление человека это не вычисления, не логика. Логика это высшая форма, базовым механизмом (уши которого торчат от всюду) есть комбинаторика на основе ассоциативной памяти. Мозг это в основном память. Но память не точная, а ассоциативная, то есть человек запоминает что-то похожее, на уже запомненное. Ему прочитать и запомнить 1234567890 1234567890 1234567890 1234567890 — длинное сочетание паттернов и системы проще чем 937566934057673, но не в силу принципиальной их разницы, а в силу привычки к первому способу записи.


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


Не вся.

> Не обязательно компактная. Но, скажем, код распознавания с применением паттерн-матчинга более выразителен и более компактен чем тот же код написанный в ОО-манере.

> В прочем поднятие выразительности может приводить к плохой читаемости. Отличный пример — регулярные выражения. Они компакты и выразительны, но крайне трудно читаются из-за отсутствия декомпозиции и слияния грамматических символов и паттернов. PEG / EBNF менее компактны, но долее выразительны (поддерживают рекурсию и декомпозицию).

Я бы сказал это хороший пример. Они и компактны и выразительны. Но это пример плохого синтаксиса для языка. Сложные выражения не поддаются анализу, декомпозиции, рефакторингу. Я это не утверждаю. Посто наблюдал как народ месяцами обсуждал на форумах выражения для поиска url или им подобные и в итоге не приходил к какому-то разумному решению своей задачи, где-то что-то обязательно не учитывалось.
Хотя и этот язык имеет место быть, но оценка такому синтаксису должна быть низкой. Такие языки должны побеждать только если нет альтернативы.



> G>Кстати о Begin End. Со стороны может показаться, что паскалистам нравятся сами Begin End. Это не так. Сила языка паскакаля была не в этом и можно было бы заменить begin end на {} и это не встретило бы принципиальных возражений, не привело бы к каким-то изменениям.

>
> Привело бы. Это предпочтения, а именно они является яблоком раздора. Другое дело, что это не единственное и не главное отличие Си и Паскаля и тем более Дельфи и С++.

Вот здесь у нас спор.
Для подтверждения свего "домысла" как ты изволил выразиться, я открыл Голосование #3607. Посмотри.

> От чего? Все языки эволюционировали к структурным. А в начале 70-ых появилась целая куча очень структурированных языков (например, C и ML). А один из очень структурных языков — Лисп — появился на 12 лет раньше Паскаля.


От распространенных на тот момент языков. Лисп не был распространен, поскольку у него были довольно приличные требования к памяти, на слабом железе его не получалось завести. И он не был main-stream.

> Так что это просто стереотип засевший в твоем мозгу, видимо из-за того, что тебе в начале обучения давали именно Паскаль.


Предположение абсолютно не верное.

> В общем, ясно. Ты начал программировать с Дельфи, вот тебе весь мир его клонами и кажется. Собственно это и есть подтверждение моих слов — привычки и стереотипы — это то что управляет людьми. Все суждения о языках и их синтаксисе сугубо субъективны. А субъективные суждения не систематизируешь.


Предположения не верные.
Все языки клоны дельфи, это гхм... Влад, я тебя этим утверждением теперь могу шантажировать, ага, всем дифченкам расскажу Надо же было такое придумать.
Дельфи это же вообще-то продукт компиляции языка, библиотек и средства RAD. (Структурность там очень удачно легла.) Компиляция, а вот самостоятельным понятием оно стало потом при развитии.

Я вообще-то привел тебе пример, когда структурированность, читаемость и понимаемость кода давала преимущество в популяризации языка при прочих практически равных.
C# действительно в чем-то клон дельфи, но я такого не утверждал. На этом примере я всего-лишь пытался тебе показать, что конкретно это фундаментальное свойство языка — структурированность кода, настолько удачно, что даже перешло по наследству в C#. О родственных связях C# и дельфи ты же не можешь отрицать?
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[15]: Про синтаксис
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 13.06.12 09:57
Оценка:
G>Краткое не обязательно быстрее и лучше воспринимаемое, да и не обязательно скорочитаемое. Сравни формы:
G>9996666544443333890006766666633333221226666766777777
G>999 6666 5 4444 3333 8 9 000 6 7 666666 33333 22 1 22 6666 7 66 777777

в данном случае, наблюдается переход от последовательности длины 52 с алфавитом 0-9
к последовательности длины 19 с алфавитом вида (digit,len).


G>Скобки это поддержка понимания структуры кода программы. Разницу отступа в 10 или 11 пробелов я не замечу, выделить взглядом многострочную структурную единицу без скобок я не смогу,


Не требуется считать и замечать кол-во пробелов, необходимо лишь замечать пробелов в данной строке больше, чем в предыдущей или меньше, чем в предыдущей. Что приводит к решению задачи — какую форму образуют левый край строк (ровную, впуклую, выпуклую и т.д.), такую задачу человек решает хорошо, т.к. его зрительный аппарат заточен под выделение формы.

Возьмем следующий код (это стандартный c#-код, в котором лишь убраны символы, которые однозначно восстанавливаются из форматирования, также убрано new, как однозначно восстанавливаемое при условии, что функция и класс не могут иметь одинаковые названия; убрано явное указание enum-а, как востанавливаемое из контекста; оставлены внутристрочные разделители)
    public WindowMain() 
       InitializeComponent() 

       this.InputBindings.Add
         InputBinding 
           SaveAll 
           KeyGesture(S, Shift | Control) 

       var cb = CommandBinding(SaveAll) 
       cb.Executed += ExecutedRoutedEventHandler(HandlerThatSavesEverthing) 
       this.CommandBindings.Add(cb) 
 
    private void HandlerThatSavesEverthing (object obSender, ExecutedRoutedEventArgs e) 
      // Do the Save All thing here.


лишний пробел тут роли не играет и будет подсвечен IDE как ошибка, например, в случаях:
       this.InputBindings.Add
         InputBinding 
           SaveAll 
            KeyGesture(S, Shift | Control)

или
       this.InputBindings.Add
         InputBinding 
           SaveAll 
          KeyGesture(S, Shift | Control)


смотрится непривычно, но читабельно. при этом в поле зрения находится больше информации, чем при классическом синтаксисе
Re[15]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.06.12 20:56
Оценка:
Здравствуйте, grosborn, Вы писали:

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


Я? Где? Ты точно внимательно тему прочел? Я как раз автора темы подколов тем, что его проблема решается переходом на скобки. Это конечно был подкол, так как я точно знаю, что автор имеет ИМХО которое говорит ему, что отступы рулят. Но в том-то и заключалась ирония.

Неужели в наше время надо даже иронию до косточек расписывать?

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

У каждого своя правда, потому что она субъективна!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.06.12 21:11
Оценка:
Здравствуйте, grosborn, Вы писали:

G>Ну во первых, разделяем объективные требования (критериии) и объективное обоснование и использование этих критериев. Сами критерии могут быть объективными и субъективными. Формировать их и использовать желательно на объективной основе. Извини за это жонглирование словами.

G>Во вторых, у меня пока нет ни того, ни другого. Их нужно выработать. У меня есть только общие соображения, которые могли бы вам в чем-то помочь.

Проблема в том, что все (ну, большинство) объективные объективных критериев (при обсуждения синтаксиса) субъективны. Мы основываемся на опыте и привычках. А это очень субъективно. Вот
Автор: grosborn
Дата: 13.06.12
DarkGray очень хорошо об этом написал.

Аргументы могут быть за разные решения. Просто для кого-то этот аргумент логичен и ценен, а для кого-то "очередная отмазка".

За отступный синтаксис, кстати, есть не мало аргументов. Он компактнее, нельзя неправильно отформатировать код, лишние символы не зашумляют код. Можно наверно еще что-то придумать. Но лично для меня эти аргументы не столь значительны чтобы перевесить свою привычку. К тому же есть аргументы и против. Решение — нравится или не нравится тебе отсупный синтаксиса — принимается на основе весов дающихся этим аргументов. А веса — это чистый субъективизм. Может статься так, что некоторые из аргументов "за" ты будешь трактовать как аргументы "против" (т.е. дашь отрицательный вес).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.06.12 21:22
Оценка:
Здравствуйте, DarkGray, Вы писали:



DG>...Чтобы повысить скорость восприятия человеком информации, требуется понижать L и повышать A.


До этого момента согласен.

DG>Выкидывание скобок и замена их на отступы как раз этому способствует: длина программы уменьшается, а алфавит расширяется за счет использования формы отступов и цвета символов. При этом алфавит вывода (ввода в компьютер) остается тем же самым в размере стандартного набора символов.


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

Взрослый человек не рассматривает скобки за символы языка. Это знаки пунктуации позволяющие структурировать код и тем самым группировать реальные символы в сентенции.

Скобки и отступы одинаково (для привыкших к ним) группируют символы в сентенции и для на скорость усвоения информации не влияют.

Отступы делают текст того же объема записанным более компактно. Но это не всегда хорошо. Ведь для восприятия текста важно выделять отдельные его части. А это в отступных синтаксисах не всегда возможно (имеется ряд ограничений на пустые строки и перенос кода).

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

Короче, вкусовщина. Но теория алфавитов мне понравилась .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.06.12 21:39
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>Не требуется считать и замечать кол-во пробелов, необходимо лишь замечать пробелов в данной строке больше, чем в предыдущей или меньше, чем в предыдущей. Что приводит к решению задачи — какую форму образуют левый край строк (ровную, впуклую, выпуклую и т.д.), такую задачу человек решает хорошо, т.к. его зрительный аппарат заточен под выделение формы.


DG>Возьмем следующий код (это стандартный c#-код, в котором лишь убраны символы, ...


Предлагаю брать реальный пример, а не гипотетический. Вот реально написанный в индент-стиле (на Nemerle) фрагмент кода:
def pms_literal(numargs, byrefs)
  def pms_needed = need:
    foreach(byref in byrefs) when(byref)
      need(true)
    false
  if(pms_needed)
    def pms = Macros.NewSymbol()
    def init(byrefs, i = 0, r = [])
      match(byrefs)
        | true :: byrefs when (i < numargs) => init(byrefs, i + 1, <[ $(pms : name)[$(i : int)] = true ]> :: r)
        | _ => <[ { ..$(r.Rev()) } ]>
    <[ array[{ def $(pms : name) = PM($(numargs : int)); $(init(byrefs)); $(pms : name) }] ]>
  else
    <[ null ]>


А вот он же переписанный мною со скобками и форматированием которые привычны мне.
def pms_literal(numargs, byrefs)
{
  def pms_needed = need:
    {
      foreach(byref when(byref) in byrefs)
        need(true);

      false
    };

  if (pms_needed)
  {
    def pms = Macros.NewSymbol();

    def init(byrefs, i = 0, r = [])
    {
      match(byrefs)
      {
        | true :: byrefs when (i < numargs) => init(byrefs, i + 1, <[ $(pms : name)[$(i : int)] = true ]> :: r)
        | _ => <[ { ..$(r.Rev()) } ]>
      }

      <[ 
         def $(pms : name) = PM($(numargs : int));
         $(init(byrefs));
         array[$(pms : name)] 
      ]>
    }
  }
  else
    <[ null ]>
}


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

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

DG>смотрится непривычно, но читабельно. при этом в поле зрения находится больше информации, чем при классическом синтаксисе


Непривычно == нечитабельно. Если код тебя раздражает (а тем более бесит), то ты не сможешь прочесть его так же качественно как тот, что тебе нравится.

Это, блин, махровый субъективизм. И я это понимаю и принимаю. Но это так!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.06.12 21:54
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Это как раз вопрос, который и относится к теме — в отличие от скобочек. Речь именно об этом. Так как layout не включен для выражений на топ-левеле их необходимо разделяться через sequencing оператор. Если оператор забыть, то выражения на разных строках склеиваются.


Хреновое синтаксическое решение, на мой взгляд.

ВВ>>> Выглядит как два, на самом деле — одно.

VD>>Как что выглядит мало кого интересует. В правильных языках тебя об этом предупредят.

ВВ>В каких?


Nemerle ловит потерянные значения (вычисления). Шарп заставляет return использовать. Оба заставляют использовать ";".

Описанные тобой ошибки из разряда фантастики для любого сиподобного языка.

А учитывая наличие IDE форматирущих код при вводе — из разряда сказок, так как фантастика обычно бывает научной .

Код
x+y
-z

возможно будет корректным, но вот:
x+y
-z

уже не будет. Так что это чисто отступные тараканы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.06.12 21:59
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

VD>>Ты же об отступах речь вел. Вот скобки и решают все проблемы с отступами.


ВВ>Нет. Речь о многострочных выражениях. Включение отступов как раз *решает* эту проблему.


Дык если выражение оканчивается символом ";" (или точнее разделяются им) и отсупы не влияют на их вложенность, то и проблем таких не возникает.

Ну, хоть бы кто за 30 лет существования С обратил вниманиена эту гипер-проблему.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Про синтаксис
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 13.06.12 22:30
Оценка:
VD>Взрослый человек не рассматривает скобки за символы языка.

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

VD>И в этих условиях решающую роль начинает играть фактор привычек и предпочтений.


Привычки меняются тяжело, но все-таки это возможно. И дальше возникает основной вопрос: стоит ли потратить неделю-месяц на выработку новой привычки ради ускорения чтения текста на 3-10% в течении следующего десятка лет.
Re[16]: Про синтаксис
От: grosborn  
Дата: 14.06.12 07:47
Оценка:
Я понимаю, что тебе может быть технически трудно трудно принимать объективные подходы в такой сложной деятельности. Но все-равно нужно по меньшей мере это не отрицать, твое отрицание непродуктивно. В любой на первый взгляд субъективной и хаотичной системе есть элементы четкой логики. История знает таких примеров — та же статистика, теорвер.
Я тоже далек от мысли, что абсолютно все можно рассчитать и обосновать. Что-то можно, что-то нельзя, что-то не получается. Но пытаться необходимо. У вас с синтаксисом ужос-ужос-ужос.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[10]: Про синтаксис
От: Воронков Василий Россия  
Дата: 14.06.12 08:41
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Нет. Речь о многострочных выражениях. Включение отступов как раз *решает* эту проблему.

VD>Дык если выражение оканчивается символом ";" (или точнее разделяются им) и отсупы не влияют на их вложенность, то и проблем таких не возникает.
VD>Ну, хоть бы кто за 30 лет существования С обратил вниманиена эту гипер-проблему.

Ну да, никто прям не обратил. До сих пор как страшный сон помню высеры VC по поводу забытого ";"/
Re[10]: Про синтаксис
От: Воронков Василий Россия  
Дата: 14.06.12 08:47
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Это как раз вопрос, который и относится к теме — в отличие от скобочек. Речь именно об этом. Так как layout не включен для выражений на топ-левеле их необходимо разделяться через sequencing оператор. Если оператор забыть, то выражения на разных строках склеиваются.

VD>Хреновое синтаксическое решение, на мой взгляд.

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

VD>Nemerle ловит потерянные значения (вычисления). Шарп заставляет return использовать. Оба заставляют использовать ";".

VD>Описанные тобой ошибки из разряда фантастики для любого сиподобного языка.

Ну как из разряда фантастики — забыть ";" написать тоже ведь можно.

VD>А учитывая наличие IDE форматирущих код при вводе — из разряда сказок, так как фантастика обычно бывает научной .


Ну для хаскелл-стайл синтаксиса автоматическое форматирование по мере ввода — smart indent то есть — это как раз фантастика и есть.

VD>Код

VD>
VD>x+y
VD>-z
VD>

VD>возможно будет корректным, но вот:
VD>
VD>x+y
VD>-z
VD>

VD>уже не будет. Так что это чисто отступные тараканы.

Два твоих примера одинаковые. Отступные тараканы не в этом. Включая layout, выражения на разных строках как в этом примере воспринимаются как разные выражения. Таракан в том, что, если ты хочешь, чтобы это было одно многострочное выражение, то надо писать так:

x+y
  -z


Или:

if cond then
   expr1
   else
   expr2
Re: Про синтаксис
От: Temoto  
Дата: 14.06.12 10:28
Оценка:
ВВ>Какое из двух зол лучше?

Василий, пожалуйста, напишите потом какое решение вы приняли и по каким причинам.
Re[11]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.06.12 11:39
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Судя по всему, так и есть. Мне это казалось "оптимизацией" синтаксиса в виду того, что два выражения подряд на топ левеле — это достаточно бессмысленная штука.


Мне кажется, что два выражения подряд — это хреновая идея на любом уровне, если конечно, выражение не вызов функции с побочным эффектом.

Если говорить серьезно, то я бы на твоем месте запретил перенос строк без отсутпа. Хотите переносить? Покажите это отступом на любом уровне. И все сразу встанет на свои места.

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

ВВ>Ну как из разряда фантастики — забыть ";" написать тоже ведь можно.


Ты очень теоретически рассуждаешь. Префиксных операторов раз два и обчелся. Все остальные (в том числе и вызов функции) приводят двум выражениям без разделителя, что явно является ошибкой. А выражение -чтото — столь редки в коде, что ими можно пренебречь.

ВВ>Ну для хаскелл-стайл синтаксиса автоматическое форматирование по мере ввода — smart indent то есть — это как раз фантастика и есть.


Создатели Хаскеля хотели создать язык не похожий на другие. И им это удалось. Вот только плюс ли это?

ВВ>Два твоих примера одинаковые.


Сори. Точку с запятой забыл.

ВВ>Отступные тараканы не в этом. Включая layout, выражения на разных строках как в этом примере воспринимаются как разные выражения. Таракан в том, что, если ты хочешь, чтобы это было одно многострочное выражение, то надо писать так:


ВВ>
ВВ>x+y
ВВ>  -z
ВВ>


Ну, и в чем тогда проблема?

Все что тебе остается сделать — это выдавать предупреждения о потере вычисленного значения в первой строке (если отступа во второй нет).

Ну, еще нужно ввести синтаксис позволяющий явно игнорировать вычисленное значение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.06.12 11:41
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну да, никто прям не обратил. До сих пор как страшный сон помню высеры VC по поводу забытого ";"/


Да ладно. В 99% случаев указывал на следующую строчку, что стандартно для рекурсивных парсеров.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.06.12 11:55
Оценка:
Здравствуйте, grosborn, Вы писали:

G>Я понимаю, что тебе может быть технически трудно трудно принимать объективные подходы в такой сложной деятельности. Но все-равно нужно по меньшей мере это не отрицать, твое отрицание непродуктивно.


Есть такой оборот — не учи отца ...

Ты вот тут попытался доказать всем, что отступы масдай, но как-то никто с твоими доводами не согласился.

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

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

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


Да, несомненно! Только от этого знания нет толка, если аргументами в этой четкой логике выступает разный опыт и привычки кучи людей.

ВВ>История знает таких примеров — та же статистика, теорвер.


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

G>Я тоже далек от мысли, что абсолютно все можно рассчитать и обосновать. Что-то можно, что-то нельзя, что-то не получается. Но пытаться необходимо. У вас с синтаксисом ужос-ужос-ужос.


Дык, пытайся! Кто же тебе запрещает. Но пока у тебя не появились мало-мальски пригодные для использования результаты не надо менять на других. Ладно?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Про синтаксис
От: grosborn  
Дата: 14.06.12 12:02
Оценка:
> Есть такой оборот — не учи отца ...

Да я уже понял. Забудь.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[16]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.06.12 12:09
Оценка:
Здравствуйте, DarkGray, Вы писали:

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


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

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

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

VD>>И в этих условиях решающую роль начинает играть фактор привычек и предпочтений.


DG>Привычки меняются тяжело, но все-таки это возможно.


Конечно, возможно. Причем кто-то делает это относительно просто. Они без труда изучают Хаскели, ФШарпы, Агды, Лиспы и прочую "ересь". Но в целом массы инертны, ленивы и консервативны. Так что для изменения привычек масс нужны серьезные предпосылки. Оными могут стать мегабабло брошенное на популяризацию непривычных решений или какие-то невероятные бенефиты.

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

DG>И дальше возникает основной вопрос: стоит ли потратить неделю-месяц на выработку новой привычки ради ускорения чтения текста на 3-10% в течении следующего десятка лет.


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

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

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

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

Так что привычки остаются определяющим фактором. И их роль будет только нарастать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Про синтаксис
От: Воронков Василий Россия  
Дата: 14.06.12 14:02
Оценка:
Здравствуйте, Temoto, Вы писали:

ВВ>>Какое из двух зол лучше?

T>Василий, пожалуйста, напишите потом какое решение вы приняли и по каким причинам.

То, которые ты советовал. Собственно, я и так склонялся к нему, хотелось утвердиться в своем мнении. Основная причина в общем-то простая — унифицированность синтаксиса. И неочевидность ошибок в старом варианте.
Re[12]: Про синтаксис
От: Воронков Василий Россия  
Дата: 14.06.12 14:24
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Судя по всему, так и есть. Мне это казалось "оптимизацией" синтаксиса в виду того, что два выражения подряд на топ левеле — это достаточно бессмысленная штука.

VD>Мне кажется, что два выражения подряд — это хреновая идея на любом уровне, если конечно, выражение не вызов функции с побочным эффектом.
VD>Если говорить серьезно, то я бы на твоем месте запретил перенос строк без отсутпа. Хотите переносить? Покажите это отступом на любом уровне. И все сразу встанет на свои места.

В общем так и сделано в итоге.

VD>Ты очень теоретически рассуждаешь. Префиксных операторов раз два и обчелся. Все остальные (в том числе и вызов функции) приводят двум выражениям без разделителя, что явно является ошибкой. А выражение -чтото — столь редки в коде, что ими можно пренебречь.


В Ela это не совсем так. Оператор от функции отличается только нотацией при вызове по умолчанию. А так, любую функцию можно вызвать в префиксной, инфиксной или постфиксной форме. Код вида "-x" и
"x-" создает левую и правую секцию, соответственно. На Немерле аналогом будет "_ — x" и "x — _". Однако вызов может быть и сатурирован, если функция не возвращает другую функцию. Ну т.е., например:

let f! = f()
let _ !! g = g() //Эквивалентно: let (!!) = \_ -> \g -> g()

let foo _ = "foo!" //бессмысленная функция :)

foo! //сатурация
!foo //сатурация
(!) foo //сатурация
foo!! //правая секция
!!foo //левая секция
foo !! foo //сатурация


ВВ>>Ну для хаскелл-стайл синтаксиса автоматическое форматирование по мере ввода — smart indent то есть — это как раз фантастика и есть.

VD>Создатели Хаскеля хотели создать язык не похожий на другие. И им это удалось. Вот только плюс ли это?

У тебя какое-то странное представление о Хаскелле. Здесь скорее прослеживается генеалогическая цепочка Hope -> Miranda -> Haskell. В Hope еще не было вывода типов, Миранда же (база) вообще очень сильно похожа на Хаскелл. Я думаю, они скорее пытались взять лучшее, что было в существующих языках. Делать же что-то непохожее, просто чтобы быть непохожим — довольно глупо.

VD>Ну, и в чем тогда проблема?


Видимо, проблемы действительно нет

VD>Все что тебе остается сделать — это выдавать предупреждения о потере вычисленного значения в первой строке (если отступа во второй нет).

VD>Ну, еще нужно ввести синтаксис позволяющий явно игнорировать вычисленное значение.

Это уже есть.
Re[2]: Про синтаксис
От: Воронков Василий Россия  
Дата: 14.06.12 14:26
Оценка:
Здравствуйте, Temoto, Вы писали:

ВВ>>Какое из двух зол лучше?

T>Василий, пожалуйста, напишите потом какое решение вы приняли и по каким причинам.

Сейчас я, кстати, тайп-классы пытаюсь прикрутить : https://groups.google.com/forum/?fromgroups#!topic/elalang/13jRHNw0lnI

На лямбде есть обсуждение:
http://lambda-the-ultimate.org/node/4542
Re[13]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.06.12 14:48
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>В Ela это не совсем так. Оператор от функции отличается только нотацией при вызове по умолчанию.


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

Так что сишный синтаксис не так глуп и убог как это может показаться на первый взгяд. В комплексе он решает множество проблем. Вот тот же вызов функции четко отделяется от применения операторов, например. Для каринга может и не здорово, но вот таких проблем как у тебя не возникает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Про синтаксис
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 14.06.12 16:26
Оценка: 6 (1)
VD>Так что привычки остаются определяющим фактором. И их роль будет только нарастать.

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

Соответственно, при разработке долгоиграющего языка, среды, инструментария и т.д. — сначала необходимо исходить из того, что предопределенный словарь нулевой и оценить какой вариант более эффективный, а дальше трезво проанализировать — что выгоднее: идти на поводу масс и получить менее эффективный инструмент, или тащить массы за собой и получить более эффективный инструмент.
Re[18]: Про синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.06.12 17:14
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>дальше трезво проанализировать — что выгоднее: идти на поводу масс и получить менее эффективный инструмент, или тащить массы за собой и получить более эффективный инструмент.


Тащить массы за собой — это не малые расходы (бабла и сил). А "получить менее эффективный инструмент" — это домыслы. Традиции не обязательно не эффективно.

Скажем разница между скобками и отступами по факту на производительность программиста никак не влияет. А уж финты ушами вроде вызовов функций без скобок — это просто ничем не обоснованное наплевательское отношение к потенциальным пользователям. От части именно по этому Хаскель имеет меньшую популярность чем Питон, а питон меньшую чем Ява. Хотя влияние бабла и маркетинга тут сильно влияет на результаты.

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