Re[3]: Вложенные коменты в C++
От: vladimir.vladimirovich США  
Дата: 04.10.10 20:00
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Это очень удобно для того чтобы закомментировать кусок кода в котором уже есть комментарии.


Так делать — дурной тон. Читаемости коду оставленые тобой обгрызки непонятно чего не добавят. Не нужно — смело удаляем. То, бесценное творение, что ты хотел закомментировать можно забрать из системы контроля версий.
Re[4]: Вложенные коменты в C++
От: Шахтер Интернет  
Дата: 04.10.10 20:17
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, McSeem2, Вы писали:


MS>>Я верю тебе как родному, но скажи пожалуйста, чем принципиально отличается конструкция /* */ от { }? Только тем, что там два символа?

MS>>Ну и потом, современные языки, старше Си, принципиально не позволяют пользоваться потоковым конечным автоматом, хотя бы потому, что допускают ссылки вперед внутри классов.
WH>Я вроде все объяснил. Ну ладно попробую еще раз.

WH>Класические компиляторы работают грубо говоря в 4 этапа:

WH>1)Разбор текста на токены. На это этапе отбрасываются пробелы и коментарии.
WH>Тут все разбирается ужасно эффективными конечными автоматами.

Нет никакой проблемы изменить реализацию препроцессора и учесть вложенность комментариев. Задача плёвая.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Вложенные коменты в C++
От: Lorenzo_LAMAS  
Дата: 04.10.10 20:17
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Вот скажите мне, убогому, почему в C++ запрещены вложенные коменты вида /* */?


а в Питоне-то и многострочных нету в помине!!!

MS>Есть этому хоть какое-то разумное объяснение? На мой взгляд — ни малейшего.


наверняка, какие-нить кретинские заморочки компиляторов времен "Очакова и покоренья Крыма"
Of course, the code must be complete enough to compile and link.
Re[4]: Вложенные коменты в C++
От: WolfHound  
Дата: 04.10.10 20:21
Оценка: 1 (1) +1
Здравствуйте, vladimir.vladimirovich, Вы писали:

VV>Так делать — дурной тон. Читаемости коду оставленые тобой обгрызки непонятно чего не добавят. Не нужно — смело удаляем. То, бесценное творение, что ты хотел закомментировать можно забрать из системы контроля версий.

Ой, какие все умные...
Что, ни кто, ни разу не сталкивался с исследовательскими задачами, которые вообще не ясно как решать?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Вложенные коменты в C++
От: Lorenzo_LAMAS  
Дата: 04.10.10 20:39
Оценка:
MS>>Есть этому хоть какое-то разумное объяснение? На мой взгляд — ни малейшего.

L_L>наверняка, какие-нить кретинские заморочки компиляторов времен "Очакова и покоренья Крыма"


А впрочем, не кретинские, зря я так отцов Наверняка хотели попроще — вот начался коммент и все, скипать все, что внутри, пока не найдем */ и плеваааать на всякие там вложенности
Of course, the code must be complete enough to compile and link.
Re: Вложенные коменты в C++
От: Head Ache  
Дата: 04.10.10 23:50
Оценка: -1
Здравствуйте, McSeem2, Вы писали:

MS>Вот скажите мне, убогому, почему в C++ запрещены вложенные коменты вида /* */?

MS>Есть этому хоть какое-то разумное объяснение? На мой взгляд — ни малейшего. Чистый идиотизм. Я помню в Turbo-C было можно. Даже в PL/I было можно, хотя компилятор выдавал предупреждения. Кстати, в этих ваших C# и Java — можно?

Не нужны.
Этот аккаунт покинут.
Re[3]: Вложенные коменты в C++
От: Head Ache  
Дата: 04.10.10 23:55
Оценка: +1
Здравствуйте, McSeem2, Вы писали:

MS>Здравствуйте, Eugeny__, Вы писали:


E__>>А нахрена, собственно? Я и сами-то комментарии /* */ использую раз в пятилетку, и то, когда нужно временно закомментить что-то в одной строке — довольно редки use-case.


MS>Я очень много экспериментирую с кодом, соответственно часто приходится копи-пастить и коментить большие куски. Я согласен, что для продакшена эти вложенные коменты нафиг не уперлись, но для экпериментов — напрягает.


директивы могут быть вложенными
попробуй
#if 0/1 // condition 1
....
#if 0/1 // condition 2
....
#end if // condition 2
....
#endif // condition 1
Этот аккаунт покинут.
Re[5]: Вложенные коменты в C++
От: vladimir.vladimirovich США  
Дата: 05.10.10 00:19
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Что, ни кто, ни разу не сталкивался с исследовательскими задачами, которые вообще не ясно как решать?


Сталкивался. И сложность задачи ни разу не оправдание делать криво. С другой стороны сталкивался с теми, кому контроль версий кажется чем-то нереально сложным и лишним.
Re[4]: Вложенные коменты в C++
От: WolfHound  
Дата: 05.10.10 08:12
Оценка:
Здравствуйте, Head Ache, Вы писали:

HA>директивы могут быть вложенными

HA>попробуй
Это называется костыль. И нужно это исключительно из-за того что прямые методы не работают.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Вложенные коменты в C++
От: WolfHound  
Дата: 05.10.10 08:12
Оценка: +1
Здравствуйте, vladimir.vladimirovich, Вы писали:

VV>Сталкивался. И сложность задачи ни разу не оправдание делать криво. С другой стороны сталкивался с теми, кому контроль версий кажется чем-то нереально сложным и лишним.

Ты похоже выдумал себе кучу каких то страшилок и с ними споришь.
А что касается версионника то: в чем смысл комитов с кучей неработоспособного мусора?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Вложенные коменты в C++
От: WolfHound  
Дата: 05.10.10 08:12
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Нет никакой проблемы изменить реализацию препроцессора и учесть вложенность комментариев. Задача плёвая.

Такое впечатление что народ вообще не читает что я пишу. Я еще в первом сообщении показал как это сделать с использованием парвильных инструментов.
Меняем это
delimitedComment = "/*" (!"*/" any)* "*/";

на это
delimitedComment = "/*" (delimitedComment / any)* "*/";

и наслаждаемся вложенными комментариями.

И еще поймите наконец что двустадийный разбор текста (регулярный лексер + контекстно свободный парсер) вдалбливался во всех вузах на протяжении десятков лет. Народу просто в голову не приходило что можно иначе.
А когда накапливался опыт и приходило прозрение что что-то тут не так были уже мегатонны кода и обратная совместимость во всей красе.
Научный mainstream страшная штука.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Вложенные коменты в C++
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 05.10.10 08:29
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, McSeem2, Вы писали:


WH>1)Разбор текста на токены. На это этапе отбрасываются пробелы и коментарии.

WH>Тут все разбирается ужасно эффективными конечными автоматами.

Не все, для комментариев /* */, (* *) часто используют циклы. По крайней мере, это несложно сделать. Конечный автомат определяет только начало комментария.
Re[3]: Вложенные коменты в C++
От: mefrill Россия  
Дата: 05.10.10 08:51
Оценка: +1
Здравствуйте, McSeem2, Вы писали:

MS>Я верю тебе как родному, но скажи пожалуйста, чем принципиально отличается конструкция /* */ от { }? Только тем, что там два символа?


С синтаксической точки зрения -- ничем. Только вторая конструкция обычно разбирается синтаксическим анализатором, который работает на КС-грамматике, а первая -- это такой специальный токен, который лексер выделяет. Традиционно, языки токенов -- языки регулярныей, т.е. отношение иерархии не может быть реализовано. Вопрос в том, почему сложилась такая традиция -- лексический анализ проводить только над регулярными (читай автоматными) языками. Скажу честно -- не знаю. Скорее всего из простых соображений унификации. Лексический анализатор разделяет входной текст на слова, каждое из которых имеет совсем простой синтаксис (просто выражается в регулярности языка). Если считать словом то, что имеет синтаксис иерархии, то это не соответствует нашей интуиции. Ну слово -- это "acb", "3.123" или крайний случай "/* djdjdj */". Но назвать словом такую фигню:
/* dfsf
   /* dsfsdfsdf
          dfdsf
   */
*/

язык не поворачивается. Разметка уже наобходима, чтобы хорошо увидеть иерархию в слове -- это как раз и отражает сложность языка данного токена.
Re[3]: Вложенные коменты в C++
От: mefrill Россия  
Дата: 05.10.10 08:53
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Ты забыл, что речь идет о С++. Там прежде чем лексер с парсером запустить, должно препроцессирование выполниться. И в принципе во время препроцессирования убрать все комментарии вполне можно. Даже вложенные. Кстати, Borland C++ для DOS это умел. Так что ИМХО причины не в этом.


А кто сказал, что комментарии не нужны компилятору? Синтаксический анализ для проверки соответствия стилю -- вполне распространенная задача.
Re[7]: Вложенные коменты в C++
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 05.10.10 08:57
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>А что касается версионника то: в чем смысл комитов с кучей неработоспособного мусора?


Всё зависит от сложности — если проще накидать кода в комменты, чем в репозитарий, то надо накидывать. Если же с версионником проще, то зачем загромождать исходник?

Например, так — в мастер-ветке все коммиты рабочие, а исследования проводим в экспериментальных ветках. Т.е. ветки и rebase спасают в таких ситуациях.
Re: Вложенные коменты в C++
От: любой  
Дата: 05.10.10 08:59
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Вот скажите мне, убогому, почему в C++ запрещены вложенные коменты вида /* */?


А чего, IDE не позволяет выделить блок и закомментить/раскомментить с помощью //, а не /**/?
художников никогда не обижал
Re[4]: Вложенные коменты в C++
От: WolfHound  
Дата: 05.10.10 09:08
Оценка:
Здравствуйте, mefrill, Вы писали:

M>А кто сказал, что комментарии не нужны компилятору? Синтаксический анализ для проверки соответствия стилю -- вполне распространенная задача.

А еще есть IDE... и по хорошему парсить код в IDE и компиляторе должен один и тот же код.
Вообще у меня бродит мысль научить свой генератор парсеров генерировать несколько AST.
Основное АСТ программы.
АСТ препроцессора.
АСТ коментариев.
При компиляции мы просто игнорируем два последних АСТ. А в случае с IDE мы можем получить из них всю информацию для подсветки, аутлайнининга, навигации, автокомплита,...
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Вложенные коменты в C++
От: WolfHound  
Дата: 05.10.10 09:08
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Не все, для комментариев /* */, (* *) часто используют циклы. По крайней мере, это несложно сделать. Конечный автомат определяет только начало комментария.

Цикл это деталь раелизации конечного автомата.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Вложенные коменты в C++
От: WolfHound  
Дата: 05.10.10 09:08
Оценка:
Здравствуйте, Alexey931, Вы писали:

A>Каменты вида /* */ вообще оставлены только для совместимости с C. Они и там были сделаны не подумавши:

A> a = b/*c; // Смысл выражения неприятно зависит от наличия или отсутствия пробела между / и *
Кстати о пробелах...
http://blogs.msdn.com/b/ericlippert/archive/2010/10/04/no-backtracking-part-one.aspx
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Вложенные коменты в C++
От: mefrill Россия  
Дата: 05.10.10 09:11
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Вообще у меня бродит мысль научить свой генератор парсеров генерировать несколько AST.


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