LINUX.ORG.RU

и всё-таки о закрывающих скобках

 


0

2

Ну никак не могу решить:

если а == 3 то
  ура();
кн
или
если а == 3 то
  ура();
кн_если
или
если а == 3 то
  ура();
кн//если а == 3
Ситуация троякоострая - у каждого варианта есть существенные достоинства и существенные недостатки. В третьем случае здесь не простой комментарий, а «говорящий», который является частью синтаксиса. При несоответствии между началом и концом компилятор обругается.

Если везде писать только кн, то код будет лёгким, но легко будет и запутаться при глубокой вложенности. Самое плохое - будет затруднена диагностика компилятором ошибок структуры. Будет легко испортить структуру, поместив else не туда и внеся логическую ошибку.

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

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

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

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

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

Полиглоты, ваши мнения?

Может быть, наложить ограничения на сложность? Типа при определённом расстоянии в строках между элементами конструкции и при определённой вложенности делать рекомендованным полный вариант и выдавать предупреждение?

★★★★★

Предлагаю использовать в качестве конструкций ненормативную лексику! Это сразу поднимет популярность языка;-)

Особенно феерично будет смотреться выикдывание исключений;-)

ЗЫ ну или что то старорусское

ежели а==1 соблаговолите
...

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

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

Однако твоя язык обречён не из-за этого, а из-за использования букв национального алфавита. Ты вот просто так взял и уменьшил свою потенциальную аудиторию в 50 раз.

KivApple ★★★★★
()

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

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

Заодно можно будет делать
((если (= а 3) ура неура))

unikoid ★★★
()

Глубокой вложенности не должно быть в коде.

Deleted
()

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

И не только в наше.

Но в реальности от неё не всегда можно избавиться.

Но в подавляющем большинстве случаев — можно. И не нужно упрощать её «использование». А кому уж совсем нужно и никак не отрефакторить, пусть сами об этом заботятся обычными комментариями а ля вариант №3 (только без проверки со стороны компилятора), только там, где нужно. Это их личные проблемы.

и неверное угадывание может решить судьбу всего языка

Не нужно ничего гадать. В подавляющем большинстве современных (и не очень) языков используется вариант №1 и никого это не парит. Сделаешь «как все» — по крайней мере будешь не хуже, и это никак не повлияет на судьбу языка (да и вообще ты о мелочи запарился); отойдёшь от нормы — не поймут и запишут в разряд эзотерики, например. Такие финты могут позволить себе только языки с уже существующим устойчивым и достаточно большим сообществом, которое, может, поначалу поплюётся на такое нововведение (если не примет положительно), а потом привыкнет.

Недавно смотрел выступление Джошуа Блоха по поводу того, что он считает «Good, Bad and Ugly» в Java, и он в числе причин успеха называет Сишный синтаксис, т.к. плюсовый кодер мог, посмотрев код на Java, достаточно легко и точно понять этот код. В общем, не выпендривайся сильно. =)

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

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

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

ключевые слова в парсере

в лексере!

invy ★★★★★
()

Делай наподобие паттерн матчинга в OCaml'е :)

match v with
 | expr1 -> action
 | expr2 -> action
 | _ -> action
Скобки вокруг expr - опционально. Вокруг action - если больше чем в одну строку. Либо можно:
match v with
 | expr1 -> action1 ; action2
            action3
            ...
            actionN ;;
 | expr2 -> action
 | _ -> action
Двойное точка с запятой завершает блок, начатый '->'.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 4)
Ответ на: комментарий от AIv

Предлагаю использовать в качестве конструкций ненормативную лексику!

если а=5
{
...
}
иначе 3.14здец

Примерно так? :D

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

Не можешь решить? Не решай. Сделай оба варианта, как в Dylan.

если а == 3
то
    ура();
кн
если а == 3
то
    ура();
кн если
anonymous
()
если а == 3 {
  ура();
}

Прикинь как просто. И любой блокнот тебе подсветит парные скобки. Наверно авторы С-подобных (тысячи их) не такие уж дураки, как полагаешь?

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

у него проблемы с переключением раскладок

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

Мне за ночь вот что надумалось:

если ... то
иначеесли ... то
иначеесли ... то
иначе//?
Нечего написать вместо вопросительного знака. Вариант 3 не решает ничего. Можно попробовать именованные или псевдоименованные варианты, например,
если.А а == 3 то 
иначе.А ...
кн//А

еСли ... то
 есЛи ...
 инАче
иНачееСли
иНаче
как-то так

Не можешь решить? Не решай. Сделай оба варианта, как в Dylan.

Два варианта не хочется. Это иллюзорное улучшение, вспоминаем, чем кончил Perl со своей множественностью вариантов.

den73 ★★★★★
() автор топика

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

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

Ага. В некоторых языках так нельзя, правда.

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

отойдёшь от нормы — не поймут и запишут в разряд эзотерики, например.

Резонно.

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

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

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

потому что это не представляет непосредственной опасности для ТС-а и окружающих

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

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

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

Бывает ещё, что исходник печатается на бумаге.

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

Мне XML не нравится, однако это не помешало его популярности. Значит, не так и страшно повторять.

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

Сишный синтаксис

В данном случае нельзя. Как и ML-ные. Ибо русская раскладка прячет за"лишними" буквами кучу полезных символов ( в «стандарте» недоступны ;[]{}|<>`'@#$) а переключение между языками на каждом слове почти везде неудобно до нецензурия. Из оставшихся символов «привычный» синтаксис не соорудить. Приходится рассчитывать, в основном, на буквы и отступы.

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

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

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73
еСли ... то
 есЛи ...
 инАче
иНачееСли
иНаче

Все-таки ты наркоман.

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

переключение между языками на каждом слове почти везде неудобно до нецензурия

Так и не надо переключаться. ЯП на основе великомогучего это такой бред. Примерно как русификация математики или медицины.

anonymous
()

Итак, решение почти готово:

если/*тег*/ а == 3 то // обычный комментарий
иначеесли/*тег*/ а < 5 то //другой комментарий
кн/*тег*/
Кто не в курсе, обычный комментарий в Яре (он теперь так называется) пишется после пробела, т.е.
если /*тег*/ то 
уже просто комментарий. А комментарий не после пробела является спец.конструкцией. Такой тег будет проверяться компилятором (во всяком случае, в светлом будущем).

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

Для именованных объектов (функция, тип, библиотека) тег - это имя объекта. Но остаются всё же варианты:

кн/*осень*/
или
кн/*фун осень*/
Наверное, пусть повторяется?

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

И что? Мне не нравится окамль. Возможно, я неправ.

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

Не, ты не наркоман, просто сумасшедший. Слишком долго писал на лиспе. Следущая остановка - кащенко.

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

патч, позволяющий игнорить анонимусов

В голосину! Читать не умеешь, пользоваться софтом не умеешь. Шнурки еще не разучился завязывать?

anonymous
()

Скобки. Нормальные ide и редакторы сами ищут парные скобки и позволяют переходить по ним

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

Кто не в курсе, обычный комментарий в Яре (он теперь так называется) пишется после пробела,
А комментарий не после пробела является спец.конструкцией.

Больше похоже на недостаток парсера, нежели на необходимую спецификацию языка.

Для именованных объектов (функция, тип, библиотека) тег - это имя объекта.

У вас все эти сущности являются объектами?
Вообще любые начинания это всегда зачет. Не слушайте никого, может с политикой Путина скоро страна снова окажется под железным занавесом, и тогда, кто знает? :)

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

Спасибо мил человек, где ж ты раньше был :)

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

Точка с запятой, вообще, необязательна и даже вредна в окамле.

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

Скобки. Нормальные ide и редакторы сами ищут парные скобки и позволяют переходить по ним

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

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

Больше похоже на недостаток парсера,

Это не бага, это фича :)

Вообще любые начинания это всегда зачет. Не слушайте никого

Спасибо!

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

У вас все эти сущности являются объектами?

Неправильно написал, для именованных «сущностей». Но вообще в какой-то степени они являются объектами, да. Тип и функцию я наследую из лиспа. Функция - это объект. Тип - вроде не совсем объект, но приближается. Библиотек в лиспе нет, пока неясно, для чего делать их объектами, но может быть, будут объектами.

den73 ★★★★★
() автор топика

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

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

а переключение между языками на каждом слове почти везде неудобно до нецензурия

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

Ты часто используешь CapsLock по назначению? Я - никогда. А переключение по капсу в разы удобнее, чем по стандартным двухкнопочным комбинациям. А если какс всё-таки понадобится, по-прежнему можно использовать Shift-CapsLock

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

router ★★★★★
()
Последнее исправление: router (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.