Есть ли программа, которая может помочь понять другую программу? - PullRequest
16 голосов
/ 10 марта 2010

Мне нужно документировать программное обеспечение, над которым я сейчас работаю. Программное обеспечение состоит из нескольких языков программирования и скриптов, которые заставили меня задуматься. Если приходят новые разработчики и им нужно что-то исправлять, они могут знать Java, но, возможно, не bash-скриптинг. Было бы неплохо, если бы была программа, которая помогла бы понять, что

for f in "$@" ; do

означает. Я думал о чем-то, что создает статическую HTML-страницу с подсветкой кода и синтаксиса, и если вы наводите курсор мыши на что-то (например, «для»), это отобразит всплывающее окно с объяснением:

for запускает цикл, который перебирает все значения, следующие за in. В цикле вы можете получить доступ к каждому значению через переменную $f. Тело цикла находится между do и done

Что-то подобное уже существует?

[РЕДАКТИРОВАТЬ] Это всего лишь пример. Вы получите другую помощь для f, in, "$@", ; и do, то есть каждый элемент строки должен быть объяснен. Неизвестные элементы (например, имена команд) должны ссылаться на Google. Таким образом, вы можете понять, что он делает, даже если вам не хватает какой-то детали.

[EDIT2] Я знаю, что вы не можете написать программу, которая понимает, что делает другая программа. То, что я ищу, - это простой инструмент, который будет выполнять «расширенную подсветку синтаксиса» в том смысле, что он раскрасит выражение и даст краткое объяснение того, что оно означает (плюс, возможно, ссылку на некоторый эталон глубины).

Это предназначено для тех, кто знает, как программировать, но, возможно, раньше не видел какой-то неясной конструкции. Say

echo "Error" 1>&2

Каждый программист bash знает, что это значит, но 1>&2 может озадачить разработчика Java, несмотря на тот факт, что он может догадаться, что echo == System.out.println. Простое «Перенаправить стандартный вывод на стандартный поток ошибок» прояснит ситуацию и даст мгновенное «АГА!» что позволяет им оставаться в их нынешнем ходу мыслей.

Ответы [ 6 ]

3 голосов
/ 10 марта 2010

Инструмент, подобный этому, может быть построен с использованием ANTLR , т. Е. Разобрать код в абстрактное синтаксическое дерево с использованием грамматики ANTLR для этого языка и написать генератор HTML, который выдает аннотированный код.

Звучит как полезный инструмент для изучения языка или изучения исходного кода проектов, которые вы не поддерживаете - но подходит ли он для документации?

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

Тем не менее, я определенно рассмотрю такой инструмент в качестве учебного пособия.

1 голос
/ 10 марта 2010

IMO было бы проще и эффективнее просто собирать ссылки на хорошие языковые ссылки и учебные пособия на вики-странице.

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

0 голосов
/ 10 марта 2010

Если инструмент изготовлен

для запускает цикл, который повторяется все значения, которые следуют. В цикл, вы можете получить доступ к каждому значению через переменная $ f. Тело цикла между делом и выполнением

это было бы довольно бесполезно. Это именно тот комментарий, который программистам-стажерам (ням) предлагается написать.

0 голосов
/ 10 марта 2010

Язык не может быть объяснен только через его синтаксис. Среда выполнения играет большую роль вместе с основной философией языка и библиотек.

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

Продолжая пример с bash, вы не сможете глубоко понять bash, если ничего не знаете о процессах и управлении заданиями, переменных среды, большом списке команд unix (tr, sort, cut, paste, sed, awk, find, .. .) и многие другие функции, которые не отображаются в синтаксисе.

0 голосов
/ 10 марта 2010

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

0 голосов
/ 10 марта 2010

Если подумать, не очень полезно иметь инструмент, объясняющий синтаксис. Разработчики могут просто искать ключевые слова в Google вместо просмотра веб-сайта аналогично http://www.codeweblog.com/source/.

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

...