2009-02-04 7 views
2

Фон: Недавно, глядя на «структурированный текстовый редактор», я заметил, что они использовали трюк для изменения python/perl/C++/java и др. в «структурированный» контур, прокрадывая XML в комментарии соответствующих языков.Вложение одного вида синтаксиса внутри другого: это kludge или умный?

Я вспомнил, что видел этот трюк внутри файла bat bat одновременно. Операции REM файла bat были использованы для «скрытия» некоторого Perl-кода.

Вопрос: Вы когда-нибудь видели экземпляр, в котором кто-то использовал комментарии языка программирования или разметки, чтобы вставить синтаксис совершенно другого языка? Если да, можете ли вы дать ссылку на пример или объяснить, что это было?

Если у вас нет, вот пример:

Вопрос: Является ли это своего рода "трюк" умной и полезной идеей? Если да, можете ли вы перечислить специальный экземпляр, в котором вы использовали этот трюк? Если нет, можете ли вы описать, почему вы думаете, что это плохая идея?

ответ

3

Вы говорите об polyglots, абсолютно увлекательном аспекте компьютерного программирования и замечательном упражнении в двусмысленном характере некоторых языков программирования/программирования. Хотя наиболее определенно интригующее понятие, они редко встречаются вне арены новизны. Говоря с точки зрения кодера, однако, это определенно было бы подвигом, чтобы заставить вашу работу функционировать в нескольких, совершенно разных средах; однако, поскольку полиглоты обычно полагаются на всевозможные хаки и обходы через комментарии, это почти всегда выходит за рамки выполнимости. Конечно, стоит посмотреть, если вы еще не видели, что они могут сделать; Я рекомендую this one.

Верьте или нет, что один файл будет правильно составить (в некотором роде, форму, или форму) в пятнадцати отдельных языках:

  1. HTML
  2. Баш
  3. ЗШ
  4. C89
  5. C99
  6. C++
  7. Makefile
  8. Рубин
  9. Tcl
  10. Perl
  11. Haskell
  12. Python
  13. JavaScript
  14. Brainfuck
  15. Пробелы
2

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

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

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

1

Этот ужас вставит действительный XHTML, HTML и предварительно HTML3.2 tagoup 'hiding' markup с комментариями CSS:

<style type="text/css"><!--/*--><![CDATA[/*><!--*/ 
    ... 
/*]]>*/--></style> 

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

1

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

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

1

Visual Studio имеет форму этого называется T4. К сожалению, документация является отрывочной.

1

Одна из любимых разметки, используемая в документации для Python, - Restructured Text. Это общий упрощенный язык разметки, такой как Markdown или Textile, но он обеспечивает хорошую структуру документации и может быть легко использован для создания документации HTML или PDF.

1

WEB и CWEB Дональда Кнута вставляют Pascal (WEB) и C (CWEB) внутри TeX. Ниже приведен пример из исходного кода METAFONT:

@ The following system-independent code makes the |xord| array contain a 
suitable inverse to the information in |xchr|. Note that if |xchr[i]=xchr[j]| 
where |i<j<@'177|, the value of |xord[xchr[i]]| will turn out to be 
|j| or more; hence, standard ASCII code numbers will be used instead of 
codes below @'40 in case there is a coincidence. 

@<Set [email protected]>= 
for i:=first_text_char to last_text_char do xord[chr(i)]:[email protected]'177; 
for i:[email protected]'200 to @'377 do xord[xchr[i]]:=i; 
for i:=0 to @'176 do xord[xchr[i]]:=i;