多平台的代码生成

时间:2016-04-24 03:09:21

标签: python code-generation jinja2 template-engine software-design

我正在设计一个编排引擎,可以在多个环境中自动执行任务:JavaScript Web UI,Python Web服务器和c运行时。一种可能的方法是用每种语言编写业务流程核心。这看起来很脆弱,因为每个新的引擎功能都需要添加到每种支持的语言中(并且必须多次解决错误,同时处理每种语言中的不同习语)。另一种方法是将核心编写为最小公分母语言(可能是c),然后将其包装在其他语言中。但是,我认为将编译库部署到浏览器即使不是不可能也是一场噩梦。所以,我正在考虑的另一个选择是模板和代码生成。然后可以将引擎编写一次(可能在Python中),并使用jinja模板将工作流编译到每个目标。

这最后一种方法听起来可行吗?如果我走那条路,我应该注意哪些陷阱?我应该把它吸干并写三次发动机吗?

1 个答案:

答案 0 :(得分:1)

使用哪种技术并不重要,您将面临三个潜在问题:

  1. 使用"相同的(编排驱动程序)数据"跨越所有N个目标。 每个目标都有一种首选方式来表示该数据。 您可以选择最低的公分母(例如文本或XML),但目标引擎更难以编写
  2. 在N个目标中找到相同的效果。想象一下,你需要" eval" (我希望不是)每个目标;即使他们出现有类似的实现,一些细节也会出错,你必须解决这个问题
  3. 一个或多个目标的表现很差。
  4. 如果您编写自己的实现代码,则可以更轻松地克服2)和3)。

    如果生成代码,则可以更灵活地更改特定目标的运行方式。如果您使用简单的基于文本的"模板"要生成目标语言代码,您将无法生成非常高效的代码;你不能优化你生成的东西。如果您使用更复杂的代码生成器,您可能能够生成/优化结果。

    很难说你将会遇到多少麻烦,部分原因是你还没有告诉我们这个引擎会做什么或目标语言是什么。即使有这些数据,也很难说出来;直到你有一个正在运行的系统,你无法确定没有一个粗鲁的意外。

    人们在面对未知时使用复杂的代码生成技术,因为这样可以最大限度地提高灵活性,从而更容易克服并发症。

    当人们没有精力学习如何使用复杂的发电机时,他们会使用更简单的代码生成。如果幸运的话,没有问题出现,他们就赢了。如果这个实验没有很多工作,那么你应该尝试一下并希望最好。