【问题标题】:Code generation for multiple platforms多平台代码生成
【发布时间】:2016-08-17 13:30:04
【问题描述】:

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

最后一种方法听起来可行吗?如果我走那条路,我应该注意哪些陷阱?我是不是应该把它吸干,把引擎写三遍?

【问题讨论】:

  • 您的意思是重新实现 Chef 或 Ansible?
  • @JohnZwinck 嘿,好问题!我不这么认为,因为我不处理服务器配置和应用程序部署。即使我是,人们也觉得 ansible 和 salt 有空间;)但不,这更多是关于多个运行时中的数据处理。

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


【解决方案1】:

不管你使用哪种技术,你都会面临三个潜在的问题:

  1. 在所有 N 个目标中使用“相同的(编排驱动程序)数据”。 每个目标都将有一种首选方式来表示该数据。 您可以选择一个最小的公分母(例如,文本或 XML),代价是使目标引擎编写起来更笨拙
  2. 在每个 N 个目标中找到等效效果。想象一下,每个目标都需要“eval”(我希望不是);即使它们看起来具有相似的实现,某些细节也会出错,您必须解决这个问题
  3. 一个或多个目标的性能很差。

如果您编写自己的实现代码,则可以更轻松地克服 2) 和 3)。

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

很难说你会遇到多少麻烦,部分原因是你没有告诉我们这个引擎会做什么或者目标语言是什么。即使有这些数据也很难分辨;在您拥有一个正在运行的系统之前,您无法确定没有意外的惊喜。

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

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

【讨论】:

  • 感谢您的回答!正如我在问题中提到的,目标语言包括 JavaScript、python 和 c。希望有帮助!
  • 当您提到“复杂的代码生成”时,您会想到什么?
猜你喜欢
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 2010-10-11
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多