当前位置: 首页 > 面试题库 >

元编程到底是什么?

赵英范
2023-03-14
问题内容

我正在阅读有关Java平台上的ployglot编程的TheServerSide文章。本文中的一些评论将元编程称为生成代码的能力(也许是在运行中)。

元编程是在运行时即时生成代码的能力,还是在运行时将方法和属性注入到现有对象中的能力(例如某些动态语言(如Python,Ruby和Groovy所允许的))。


问题答案:

元编程是指程序具有自身知识或可以操纵自身的多种方式。

在像C#这样的语言中,反射是元编程的一种形式,因为该程序可以检查有关其自身的信息。例如,返回对象的所有属性的列表。

在ActionScript之类的语言中,您可以在运行时评估函数以创建新程序,例如eval(“ x” + i)。当我为1时,DoSomething()会影响名为x1的对象,而当我为2时,DoSomething()将影响名为x2的对象。

最后,元编程的另一种常见形式是程序可以以非平凡的方式更改自身。LISP以这一点而闻名,这是Paul Graham在十年前所倡导的。我将不得不查阅他的一些具体论文。但是想法是程序会根据其状态更改程序的另一部分。这提供了一定程度的灵活性,可以在运行时进行决策,这在当今大多数流行语言中都是非常困难的。

还值得注意的是,在进行直接汇编编程的好时光中,在运行时更改自身的程序是必需的,而且很普通。

保罗·格雷厄姆(Paul Graham)的文章“什么使Lisp与众不同”:

许多语言都有一个称为宏的东西。但是Lisp宏是唯一的。信不信由你,他们所做的事与括号有关。Lisp的设计人员并没有将所有括号都用在该语言中只是为了有所不同。对于Blub程序员来说,Lisp代码看起来很奇怪。但是那些括号在那里是有原因的。它们是Lisp和其他语言之间根本不同的外在证据。

Lisp代码由Lisp数据对象组成。从源文件包含字符的意义上讲,字符串并不是该语言支持的数据类型之一。解析器读取后,Lisp代码由您可以遍历的数据结构组成。

如果您了解编译器是如何工作的,那么实际发生的并不是Lisp具有奇怪的语法,而是Lisp没有语法。您在解析树中编写程序,这些树在解析其他语言时在编译器中生成。但是您的程序完全可以访问这些解析树。您可以编写操纵它们的程序。在Lisp中,这些程序称为宏。它们是编写程序的程序。

编写程序的程序?您什么时候想这样做?如果您认为在Cobol中,则不会经常出现。一直以来,如果您考虑使用Lisp。如果我可以举一个强大的宏示例并在此处说,那将很方便!那个怎么样?但是,如果我这样做了,那对不了解Lisp的人来说就像是胡言乱语。这里没有空间来解释您需要了解的所有内容以了解其含义。在Ansi Common Lisp中,我试图尽可能快地移动内容,即使如此,直到160页,我才进入宏。

但是我想我可以提出一种可能令人信服的论点。Viaweb编辑器的源代码大概是20-25%的宏。宏比普通的Lisp函数更难编写,并且在不需要它们时使用宏被认为是不好的样式。因此该代码中的每个宏都存在,因为必须存在。这意味着该程序中至少有20%至25%的代码正在执行您用其他任何语言都无法轻松完成的工作。无论对Blub程序员持怀疑态度,可能是关于我对Lisp神秘力量的主张,这应该使他感到好奇。我们并不是出于娱乐目的而编写此代码。我们是一家小型的初创公司,我们竭尽全力进行编程,以在我们和竞争对手之间设置技术壁垒。

可疑人员可能会开始怀疑这里是否存在某种关联。我们的代码很大一部分正在做其他语言很难做到的事情。最终的软件完成了竞争对手软件无法完成的工作。也许有某种联系。我鼓励您遵循该主题。那个old着拐杖走路的老人可能比目睹更多。



 类似资料:
  • 主要内容:JSP的由来,Servlet与JSP异同点,JSP相对于Servlet的优点JSP(Java Server Pages)是一种动态网页开发技术。JSP 文件就是在传统的 HTML 文件中插入 Java 代码和 JSP 标签,后缀名为 。 JSP 与 PHP、ASP、ASP.NET 等语言类似,都运行在服务端。通常返回给客户端的就是一个 HTML 文件,因此只要有浏览器就能查看 JSP 页面。 JSP 使用 JSP 标签在 HTML 网页中插入 Java 代码,标签通常以

  • 直到我在旧存储库中随机检查 ,我才听说过这个文件,它就是一个我自己没有编辑过也从未见过的文件。我不知道它是如何到达那里的。 似乎很常见 - 主要是如何删除它(例如这里和这里)。 这个文件是什么,是什么创建了它?

  • 基本上,为什么有这个术语? 还有,接口是什么意思?

  • 译者:lhc741 作者:Jeremy Howard,fast.ai。感谢Rachel Thomas和Francisco Ingham的帮助和支持。 我们推荐使用notebook来运行这个教程,而不是脚本,点击这里下载notebook(.ipynb)文件。 Pytorch提供了torch.nn、torch.optim、Dataset和DataLoader这些设计优雅的模块和类以帮助使用者创建和训练

  • 我试图理解Java源代码是如何执行的,我对JVM中的JIT编译器究竟是什么感到困惑。首先,让我告诉您我是如何理解从Java源代码到在计算机上执行机器代码的过程的。也许,我在这一过程中误解了一些导致混淆的东西。 步骤如下: 源代码被编译成字节码(.class文件) 现在,根据维基百科关于JVM的文章,更具体地说是“字节码解释器和实时编译器”部分,为了执行Java字节码,您需要一个解释器(但我们有一个

  • 问题内容: 我不明白exactly到底在做什么。 如果你能用101个字来介绍exactly: 到底是什么 它如何与用Java编写的应用程序交互? 它与服务器一起使用吗? 它是一个独立程序吗? 请解释一下骆驼是什么。 问题答案: 我说: Apache Camel是消息传递技术与路由的结合。它将消息传递的起点和终点连接在一起,从而允许将消息从不同的源传输到不同的目的地。例如:JMS-> JSON,HT