【发布时间】:2023-03-27 08:09:01
【问题描述】:
我们都知道元编程是代码 == 数据(或编写程序的程序)的概念。
但是有没有使用它的应用程序以及使用它的优点是什么?
这个问题可以关闭,但我没有看到任何相关问题。
【问题讨论】:
标签: metaprogramming
我们都知道元编程是代码 == 数据(或编写程序的程序)的概念。
但是有没有使用它的应用程序以及使用它的优点是什么?
这个问题可以关闭,但我没有看到任何相关问题。
【问题讨论】:
标签: metaprogramming
IDE 充满了元编程:
元编程通常用于解决 Java 的局限性:
框架是另一个例子:
在 Ruby 中,如果没有元编程,您几乎什么都做不了。即使只是简单地定义一个方法,实际上也是在运行生成代码的代码。
即使您只有一个简单的 shell 脚本来设置您的基本项目结构,这也是元编程。
【讨论】:
由于作为数据的代码是 Lisp 的关键概念之一,最好的办法是看到用这些编写的项目的实际应用。
在this link 上,您可以看到一篇关于真实世界应用程序的文章,该应用程序部分使用 Clojure(一种 Lisp 方言)编写。
事情不是写程序来编写程序,只是因为你可以,而是在真正需要时为你的语言添加新功能。试想一下,如果您可以简单地将 new 关键字添加到 Java 或 C#...
【讨论】:
如果您以独立于语言的方式实现元编程,您将获得一个程序分析和转换系统。这正是将(任意)程序视为数据的工具。这些可用于对任意程序进行任意转换。
这也意味着您不受编译器人员碰巧放入您的语言中的特定元编程功能的限制。例如,虽然 C++ 有模板,但它没有“反射”。但是即使基础语言没有,程序转换系统也可以提供反射。特别是,拥有程序转换引擎意味着永远不必说“对不起,你的语言不支持元编程(很好),所以除了手动编写代码之外我无能为力”。
请参阅我们的DMS Software Reengineering Toolkit,了解此类程序转换系统。它已被用于构建测试覆盖率和分析工具、代码生成工具、重塑大型 C++ 应用程序架构的工具、将应用程序从一种语言迁移到另一种语言的工具……这一切都非常实用。使用 DMS 完成的大多数任务,手工完成是完全不切实际的。
【讨论】:
不是真实世界的应用程序,而是关于 ruby 元编程的讨论:
Google TechTalks 2006 年 8 月 3 日 Code Generation in Action(Manning,2003 年 7 月)一书的作者 Jack Herrington 将讨论使用 Ruby 的代码生成技术。他将在一次关于 Ruby 作为一种工具的位置以及它的发展方向的对话中介绍自己动手和现成的解决方案。
一个真实的例子是 Django 的模型元类。它是类的类,模型从该类继承并负责为模型实例配备所有属性和方法。
【讨论】:
动态语言中的任何 ORM 都是实际元编程的即时示例。例如。看看 SQLAlchemy 或 Django 的 ORM 如何在运行时动态地为它在数据库中发现的表创建类。
Java 世界中使用@annotations 来修改类行为的 ORM 和其他工具也会进行一些元编程。
【讨论】:
C++ 元编程允许您编写将在编译时转换的代码。
我知道一些很好的例子(谷歌):
【讨论】:
许多编译器和解释器在内部使用元编程技术实现 - 作为代码重写通道链。
已经提到了 ORM、项目模板、IDE 中的 GUI 代码生成。
领域特定语言被广泛使用,实现它们的最佳方式是使用元编程。
像 Autoconf 这样的东西显然是元编程的例子。
实际上,人们不太可能找到不会从一种或另一种形式的元编程中受益的软件开发领域。
【讨论】: