Почему интерпретируемые языки/языки сценариев редко имеют многострочные комментарии?

Из известных мне интерпретируемых языков (Python, Perl, R, bash) многострочные комментарии обычно связаны с неправильным использованием другой функции языка (например, многострочные строки).

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


person Xodarap    schedule 20.05.2011    source источник


Ответы (6)


Нет, у языков сценариев нет причин не поддерживать многострочные комментарии. JavaScript, Groovy, Lua, PHP, REXX, Smalltalk и Dart поддерживают многострочные комментарии.

person munificent    schedule 04.12.2013

По правде говоря, я уверен, что не имеет значения, когда речь идет о реализации любой формы многострочных комментариев (на основе методов, которые большинство анализаторов используют для чтения/выполнения скрипта). По моему личному мнению, скрипты больше всего нуждаются в многострочных комментариях из-за распределения и объяснения (большинство языков высокого уровня обычно компилируются, и в любом случае только часть из них имеет открытый исходный код). Я знаю, что Lua, язык сценариев, предоставляет многострочные комментарии:

--[==[
COMMENT
]==]--

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

//*****************************************\\
//**                                     **\\
//**            JOHN SMITH               **\\
//**        COPYRIGHT 2008-2011          **\\
//**                                     **\\
//*****************************************\\

Многие люди также будут использовать однострочные комментарии для создания классного изображения (ASCII ART), используя символ комментария для начала изображения (вроде того, что показано выше, где // — это символ(ы)/фраза комментария).

person Freesnöw    schedule 20.05.2011
comment
Да, но комментирование в таком стиле делает больше работы, чем что-либо еще. Я бы предпочел не платить разработчикам значительные деньги только за то, чтобы такие комментарии выглядели должным образом. Многострочные комментарии в стиле C гораздо предпочтительнее IMO - person DarinH; 23.05.2011
comment
@drventure Очень, очень верно! Но сколько еще работы? Как часто вам на самом деле нужно включать многострочный комментарий? Обычно один раз в начале фрагмента кода или пару в более крупном приложении. По правде говоря, это, вероятно, сэкономит вам лишь часть времени, а результат тот же. Неужели это так важно? Я полностью одобряю многострочные комментарии, но я бы не стал уговаривать разработчика добавить их. Надеюсь, это поможет :) - person Freesnöw; 23.05.2011

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

Зачем иметь два вида синтаксиса, когда достаточно одного?

person S.Lott    schedule 20.05.2011
comment
Возможно, это работает для Python, но Perl обычно придерживается философии, согласно которой два способа лучше, чем один. И даже Python обычно позволяет делать одно и то же двумя разными способами, если это повышает ясность. (По крайней мере, для меня не очевидно, что строка, которой ничего не присваивается, эквивалентна комментарию.) - person Xodarap; 20.05.2011
comment
@Xodarap: я не отвечал за другие языки. Я отвечал за Python. Возможно, ваш вопрос слишком широк, чтобы на него можно было ответить, поскольку ответ, скорее всего, будет разным для каждого языка. - person S.Lott; 20.05.2011

Не во всех интерпретируемых языках отсутствуют многострочные комментарии. У Руби, например, они есть.

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

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

person vocaro    schedule 20.05.2011
comment
Зачем усложнять, если вам это не нужно... Но в этом весь смысл многострочных комментариев, чтобы устранить сложность, связанную с необходимостью иметь дело с несколькими однострочными комментариями. лучше иметь дело с компилятором/интерпретатором, чем с разработчиком. - person DarinH; 20.05.2011
comment
Я не считаю многострочные комментарии более простыми для кого-либо. Языки сценариев часто имеют 1 символ, например. # означает начало комментария к строке. Это просто. Просто реализовать в синтаксическом анализаторе, просто запомнить программистам, просто запомнить непрограммистам. Просто grep в комментариях или опустить, если вы не делаете grep в комментариях). Нет необходимости добавлять сложности с небольшим усилением. - person nos; 20.05.2011
comment
@nos, @vocaro: языки с многострочными комментариями обычно не позволяют вкладывать их. Таким образом, многострочные комментарии являются обычными и, следовательно, эквивалентны однострочным комментариям (т. е. терминальным в CFG). Я не думаю, что это значительно усложнило бы синтаксический анализатор. - person Xodarap; 20.05.2011
comment
Если в парсере нет возможности делать многострочные комментарии, значит он написан плохо (для парсера). То, как работают синтаксические анализаторы (ну, во всяком случае, большинство), делает чрезвычайно простым (в разумных пределах) добавление многострочных комментариев. - person Freesnöw; 21.05.2011
comment
Если ваши многострочные комментарии не вложены друг в друга, синтаксический анализатор их даже не увидит, только лексер. Учитывая это, лексировать многострочные комментарии ничуть не сложнее, чем однострочные. - person munificent; 06.01.2012

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

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

person DarinH    schedule 20.05.2011
comment
Языки, отличные от C, также имеют многострочные комментарии: OCaml имеет (* .. *), Haskell имеет {- .. -}... - person Xodarap; 20.05.2011
comment
Совершенно верно, и я думаю, что кто-то упомянул, что Ruby тоже. Но я бы вряд ли назвал OCaml или Haskell мейнстримом, и я никогда не слышал, чтобы их встраивали в любом случае. Но вполне возможно, что я просто никогда не сталкивался с такими проектами. - person DarinH; 23.05.2011

В вашем вопросе два неверных предположения.

Первое неверное предположение состоит в том, что «интерпретируемые языки/языки сценариев редко имеют многострочные комментарии». Вы страдаете предвзятостью подтверждения. Существуют компилируемые языки с однострочными комментариями (например, Фортран, многие диалекты Лиспа) и интерпретируемые языки с многострочными комментариями (например, Perl, Python).

Второе неверное предположение заключается в том, что речь идет о «неправильном использовании другой функции». Языки лучше спроектированы в целом, нет необходимости вводить дополнительную функцию для многострочных комментариев, если какая-то функция, которая и так существует, сделает свое дело. Например, в Python существуют многострочные строки, а инструкция, состоящая только из строки, является невыполнимой, поэтому многострочные строки дают прекрасные комментарии. В Perl одним из способов создания многострочных комментариев является Pod, формат документации; комментарии являются своего рода документацией, поэтому вполне естественно использовать =pod … =cut для многострочных комментариев (многострочные строки через здесь документы <<'EOF'; … EOF, другой способ).

person Gilles 'SO- stop being evil'    schedule 21.05.2011
comment
О, да ладно. Ты собираешься сидеть и говорить мне, что Ларри Уолл исключил многострочные комментарии, потому что тогда Perl будет несколько способов сделать одно и то же? - person Xodarap; 21.05.2011
comment
@Xodarap: Абсолютно. Будучи поборником первой добродетели, Ларри Уолл не удосужился добавить дополнительную функция, если был какой-то другой способ получить ее. - person Gilles 'SO- stop being evil'; 21.05.2011