你怎么称呼编程中经常使用的非代码“代码”,比如java中的注释,或注释块中的东西?

时间:2015-11-13 00:50:16

标签: annotations metadata metaprogramming dsl docblocks

我对这段非代码代码的当前用法(非代码,不是文件其余部分的语言)以及此类非代码代码的历史感到特别着迷。

在某些情况下,这可以称为元编程,但我不认为这涵盖了所有情况。

我已经看到它用于许多事情,回到(根据我的经验)到80年代,在C评论中使用“Autodocs”,用于生成文档,一直到解释语言中非常复杂的现代化身就像PHP,你在注释块中有注释,它们用于文档,在PHP语法不足的地方添加额外的含义,以及其他类型的“元”数据。

它似乎是一个大杂烩。而且我不确定我对它的感受。似乎有些不对劲。但是我看到了很好的效用。

我想知道你将使用什么通用术语来涵盖几乎所有代码中的所有非代码代码案例,如果有关于该主题及其历史,最佳实践的任何类型的权威性着作,如果没有,我感兴趣的是我想研究和写作的东西。

例如,在PHP领域,我们有这样的事情:

/**
 * This is a "docblock" and PHP can introspect on it
 *
 * The annotation below is common, and is used by processors to generate
 * documentation.  It can also be used by an IDE to provide hints while
 * coding. Its also kinda redundant because in this case PHP is already
 * providing the same information... it also has no effect on the code,
 * unless some code is written to introspect on it and then do something.
 *
 * @param Request $request
 *
 * Another handy one, describing what is returned.  PHP doesn't have
 * a way to do this in the code, so this one is more useful.
 *
 * @return Response
 *
 * Here's some more annotations. The syntax is different, because, well,
 * there's no restrictions...
 *
 * This is for generating Swagger API documentation. Cool huh? Again,
 * it has no effect on the code. Period. Notice how it also specifies the
 * type as a Response object (given that you understand this new syntax).
 * Note also that this duplicates the functionality of @return above, but
 * we need both because different tools are using them each.
 *
 * @SWG\Api(
 *  path="/gettax",
 *  description="Calculate tax",
 *  @SWG\Operation(
 *      method="POST",
 *      type="Response",
 *      @SWG\Parameter(paramType="body",required=true,type="GetTax")
 *   )
 * )
 */
public function calc(Request $request) ....

无论如何,我所看到的是那么多使用这些东西的工具,但是有很多重叠和碎片。至少在PHP土地上。我回想多年的编程,我认为这种东西并不是什么新鲜事。

我想搜索这个主题,但却找不到一个好的搜索词来获取我想要的内容,这是关于这些方法起源的一些历史文档,多年来运作良好与否,最佳实践等等这都被认为是元编程吗?

这些东西的演变是什么,它们在某些时候成为语言的适当部分,还是被纳入新语言?

该主题一般对我感兴趣,我想知道是否有其他人写过关于这个主题的明确文本?

我发现这些东西实际上是领域特定语言的一种形式。由于宿主语言无法表达某些内容,因此使用DSL并将其嵌入到代码中(在注释中或使用宿主语言支持的某些功能,如注释)来表达您希望与其关联的其他信息。代码,不一定对代码流有任何影响。

0 个答案:

没有答案