有真实世界的应用程序使用元编程吗?

时间:2010-12-16 01:06:51

标签: metaprogramming

我们都知道MetaProgramming是一个代码概念==数据(或编写程序的程序)。

但有没有任何应用程序使用它&使用它有什么好处?

此问题可以结束,但我没有看到任何相关问题。

7 个答案:

答案 0 :(得分:7)

IDE已经完成了元编程:

  • 代码完成
  • 代码生成
  • 自动重构

元编程通常用于解决Java的局限性:

  • 代码生成以解决冗长问题(例如getter / setter)
  • 代码生成以解决复杂性(例如,从WYSIWIG编辑器生成Swing代码)
  • 编译时间/加载时间/运行时字节码重写以解决缺失的功能(AOP,Kilim)
  • 基于注释生成代码(Hibernate)

框架是另一个例子:

  • 在Ruby on Rails中生成模型,视图,控制器,助手,Testsuites
  • 在Ruby on Rails中生成生成器(metacircular metaprogramming FTW!)

在Ruby中,如果没有元编程,你几乎无法做任何事情。即使只是定义一个方法实际上也在运行生成代码的代码。

即使您只有一个简单的shell脚本来设置基本项目结构,也就是元编程。

答案 1 :(得分:4)

由于代码作为数据是Lisp的关键概念之一,最好的方法是查看用这些代码编写的项目的真实应用程序。

this link上你可以看到一篇关于真实世界应用程序的文章,该文章部分用Clojure编写,这是一种Lisp方言。

不仅仅是因为你可以编写编写程序的程序,而是为你的语言添加新功能当你真正需要它时。想想你是否可以简单地将新关键字添加到Java或C#...

答案 2 :(得分:2)

不是真实世界的应用程序,而是关于ruby中元编程的讨论:

  

Google TechTalks 2006年8月3日作为Code Generation in Action(Manning,2003年7月)的作者,Jack Herrington将讨论使用Ruby的代码生成技术。在谈论Ruby作为工具的位置以及它的发展方向时,他将涵盖自己动手和现成的解决方案。

一个真实世界的例子是Django的模型元类。它是类的类,模型从中继承并负责模型实例的所有属性和方法。

答案 3 :(得分:2)

如果以独立于语言的方式实现元编程,则可以获得程序分析和转换系统。这正是将(任意)程序视为数据的工具。这些可用于对任意程序进行任意转换。

这也意味着您不受编译器人员碰巧在您的语言中使用的特定元编程功能的限制。例如,虽然C ++有模板,但它没有“反射”。但是,即使基础语言没有,程序转换系统也可以提供反射。特别是,拥有一个程序转换引擎意味着永远不必说“我很抱歉,你的语言不支持元编程(足够好)所以除了手动编写代码之外我做不了多少”

有关此类程序转换系统,请参阅我们的DMS Software Reengineering Toolkit。它已被用于构建测试覆盖率和分析工具,代码生成工具,重塑大型C ++应用程序架构的工具,将应用程序从一个语言迁移到另一个语言的工具,......这都非常实用。使用DMS完成的大部分任务都是完全不切实际的。

答案 4 :(得分:1)

动态语言中的任何ORM都是实际元编程的一个简单例子。例如。了解SQLAlchemy或Django的ORM如何在运行时动态地为数据库中发现的表创建类。

使用@annotations修改类行为的Java世界中的ORM和其他工具也会进行一些元编程。

答案 5 :(得分:1)

C ++中的元编程允许您编写将在编译时转换的代码。

我知道一些很好的例子(谷歌为他们):

  • Blitz ++,一个编写用于操作数组的高效代码的库
  • 英特尔阵列构建模块
  • CGAL
  • Boost :: spirit,Boost :: graph

答案 6 :(得分:0)

许多编译器和解释器在内部使用元编程技术实现 - 作为代码重写传递链。

已经提到了ORM,项目模板,IDE中的GUI代码生成。

领域特定语言被广泛使用,实现它们的最佳方式是使用元编程。

像Autoconf这样的东西显然是元编程的例子。

实际上,人们不太可能找到一个不会从一种或另一种形式的元编程中受益的软件开发领域。