【问题标题】:Is there a program which can help understand another program?有没有一个程序可以帮助理解另一个程序?
【发布时间】:2011-06-08 09:45:04
【问题描述】:

我需要记录我目前正在开发的软件。该软件由几种编程语言和脚本组成,这让我思考。如果新开发人员出现并需要修复某些问题,他们可能会了解 Java,但可能不会编写 bash 脚本。如果有一个程序可以帮助理解什么,那就太好了

for f in "$@" ; do

的意思。我正在考虑创建一个带有代码和语法突出显示的静态 HTML 页面的东西,如果你将鼠标悬停在某个东西上(比如“for”),它会显示一个带有解释的弹出窗口:

for 启动一个循环,该循环遍历in 之后的所有值。在循环中,您可以通过变量$f 访问每个值。循环体在dodone之间

类似的东西已经存在了吗?

[编辑] 这只是一个例子。对于fin"$@";do,您将获得另一个帮助,即应该解释该行的每个元素。未知元素(如命令名称)应链接到 Google。因此,即使您遗漏了一些细节,您也可以理解它的作用。

[EDIT2] 我知道你不能编写一个理解另一个程序做什么的程序。我正在寻找的是一个简单的工具,它将执行“扩展语法突出显示”,因为它会为表达式着色并给出 short 解释它的含义(可能还有一个链接到一些-深度参考)。

这适用于知道如何编程但以前可能没有见过一些晦涩的结构的人。说

echo "Error" 1>&2

每个 bash 程序员都知道这意味着什么,但 Java 开发人员可能会对 1>&2 感到困惑,尽管他们可以猜到 echo == System.out.println。一个简单的“将标准输出重定向到标准错误”将清除一切并立即给出“啊哈!”这使他们能够保持当前的思路。

【问题讨论】:

  • 对于不懂 bash 的人来说,棘手的不是for,而是$@
  • 这只是一个例子。对于fin"$@";do,您将获得另一个帮助,即应该解释该行的每个元素。因此,即使您遗漏了一些细节,您也可以理解它的作用。
  • +1 好问题。 :D 有些程序可以理解其他程序。它们被称为解释器/编译器。但通常他们每个人都只懂一种语言。
  • @High-Performance Mark:哪个 IDE 告诉您“>>”在 bash 脚本中的含义?
  • @Mark:我同意 IDE,但我现在没心情写一个 :-) 我需要一些可以教 bash 到周五左右的东西。

标签: programming-languages


【解决方案1】:

可以使用ANTLR 构建这样的工具,即使用该语言的 ANTLR 语法将代码解析为抽象语法树,然后编写生成带注释代码的 HTML 生成器。

对于语言学习或探索您不维护的项目的源代码来说,这听起来像是一个有用的工具——但它适合用于文档吗?

为什么帮助其他语言的程序员理解这种实现细节级别的代码很重要?在这个级别维护实现的任何人显然都必须了解该语言,并且可能会有一个 IDE 来完成大部分工作。

也就是说,我肯定会考虑使用这样的工具作为学习辅助工具。

【讨论】:

  • 我不会使用这个工具来记录我的工作。我会将它用作维护工具,下一个开发人员可以通过它运行任何脚本来理解所有他不理解的小技巧:-)
  • 好的,是的,它对此非常有用。即使是命名词性的东西也有助于让您更有效地找到正确的文档,例如说 bash 中的“>&2”是重定向,因为“重定向”是在手册页或网络中搜索的好词。
【解决方案2】:

IMO 仅在 Wiki 页面上收集指向良好的特定语言参考和教程的链接会更简单、更有效。

对于所有主流语言,都存在此类资源并定期维护。如果您尝试创建自己的参考,您也需要维护它。公平地说,bash 语法不会经常改变,但其他语言确实发展得更快,所以这将是一个负担。

【讨论】:

  • 最好将这些链接收集到一个工具中,该工具可以将它们连接到特定语言参考的相关部分。您有多少次尝试阅读一些 perl,只是想知道文档中的什么地方开始寻找东西?
  • 我了解版本问题。我认为您必须使用脚本在机器上运行该工具,它将调用 bash --version 并将其添加到 HTML 页面(因此它知道哪种语法是正确的)。是的,这是一项努力,但不是不可克服的。
  • @Aaron Digulla 啊,现在我明白了。这听起来确实很有趣。我仍然会说,链接到特定结构的语法解释的工具只是表面上的帮助。为了正确使用语言元素,必须了解它的语义、副作用……通常有很多潜在的复杂性。因此,了解语法(并且仅了解语法)可能会给初级开发人员带来错误的控制感。
  • 如果他们不理解这个概念,他们至少知道用谷歌搜索什么。尝试谷歌搜索“>>”。
  • @Aaron Digulla 我同意这一点。明智地使用它肯定是一个有用的工具。事实上,如果还没有这样的工具,这对于开源项目来说听起来是一个令人兴奋的想法:-)
【解决方案3】:

如果您考虑一下,拥有一个解释语法的工具并不是那么有用。开发人员可以只用谷歌搜索关键字,而不是像http://www.codeweblog.com/source/ 那样浏览网站。

我相信好的 cmets 会更有用,而且还有一些工具可以使用 cmets 提取文档(例如,HappyDoc 为 Python 做的)。

【讨论】:

  • 优秀的cmets会解释高级细节。但对我来说,"$@" 的含义很明显,而另一个开发人员只会沮丧地盯着它。我了解此工具不允许创建自动文档;它只是一个可以回答细节问题的“智能镜头”。
  • 那为什么不添加关于“$@”的内联评论呢?您也可以为 cmets 添加标签,例如 #TODO: ... 或 #FIXME: ... 或 #SEEME: ... 或者,在这种情况下,#NOTICE: "$@" 会做这件小事... On旁注,除了了解高级细节之外,对于不了解 bash 但了解 Java 的人知道“$@”做什么有什么好处?你肯定不会指望他在不学习 bash 的情况下调试或修复?
  • 因为我不知道下一个开发者可能会知道什么,而且我当然不想解释我代码的每一行中的每个字符!
【解决方案4】:

这是一件非常棘手的事情。首先,根据定义,可以证明不存在能够“理解”任何程序的程序。但是,您仍然可以使用现有文档。也许使用像 Doxygen 这样的工具可以帮助你。您需要通过 cmets 记录您的代码,并且将从它们生成文档。

【讨论】:

  • 您可以在这里找到支持更多语言的工具:sourceforge.net/projects/naturaldocs
  • 我只想让新开发人员不遗余力地在书籍或 Google 中查找未知编程语言的每一个细节。我不是在寻找一种可以“理解”的工具,而是一种“有助于理解”的工具
  • 这会从源代码 cmets 生成漂亮的文档。我的目标是在较低级别上工作。
  • 嗯,所以您想要 Eclipse 中的 Javadoc 视图之类的东西,尽管信息甚至达到了语言级别...?似乎没那么有用...新开发人员必须熟悉该语言,因为他肯定会遇到库和框架的问题,并且在不同的抽象级别上查找内容也无济于事。恕我直言,首先要熟悉基本概念,然后再添加更多,不要一次尝试全部。
【解决方案5】:

一种语言不能仅通过其语法来解释。运行时环境与语言和库的基本理念一起发挥着重要作用。

此外,大多数常用语言的语法并不复杂(鉴于编写代码时考虑到了可维护性)。

继续 bash 示例,如果您对进程和作业控制、环境变量、一大堆 unix 命令(tr、sort、cut、paste、sed、awk、find、.. .) 以及许多其他未出现在语法中的功能。

【讨论】:

  • 我不是在寻求深刻的理解。我只想要一个可以告诉我“$@”可能意味着什么的工具。或者在您的示例中:“&”将创建一个弹出窗口:“在后台运行命令”。如果读者需要更多信息,他们需要查找。但是,如果他们以前从未见过“&”,那么这些小文字可能就足够了。
  • 我的意思是,读者可能不理解“在后台运行命令”的概念,最终会查找整个语言。什么是最好的?花时间在每个语法元素上实现弹出窗口,花时间向已经了解 java 的人教授 bash 或花时间雇用已经了解 bash 和 java 的人?我不会选择第一个解决方案。
  • 如果他们不理解这个概念,你至少知道用谷歌搜索什么。尝试谷歌搜索“>>”。
【解决方案6】:

如果工具产生了

for 开始一个循环 后面的所有值。在 循环,您可以通过以下方式访问每个值 变量 $f。循环体是 在做和做之间

这将毫无价值。这正是实习生(人类)程序员被告知要写的那种评论。

【讨论】:

  • @Aaron 这通常是提问者的错。
  • @Aaron:他确实理解了这个问题,但你没有问一个正确的问题:p。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2018-08-09
相关资源
最近更新 更多