1

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

这最后一种方法听起来可行吗?如果我走这条路,我应该知道哪些陷阱?我应该把它吸起来并且写下引擎三次?

+0

你是说你正在重新实现厨师或Ansible? –

+0

@JohnZwinck嘿,好问题!我不这么认为,因为我没有处理服务器配置和应用程序部署。即使我是这样,人们也觉得有足够的空间存在,但是没有,这更多的是关于多次运行时的数据处理。 – matthewatabet

回答

1

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

  1. 跨所有N目标使用“相同的(业务流程驱动器)的数据”。 每个目标都有一个首选方式来表示这些数据。 您可以选择一个最低公分母(例如,文本或XML),以使目标引擎笨拙的价格编写
  2. 在N个目标中找到等价效果。想象一下你在每个目标中都需要“eval”(我不希望);即使他们似乎有类似的实现,一些细节将是错误的,你将不得不围绕该工作
  3. 一个或多个目标的性能很差。

如果你编码你自己的实现,你可以更容易地克服2)和3)。

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

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

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

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

+0

感谢您的答案!正如我在问题中提到的,目标语言包括JavaScript,python和c。希望有所帮助! – matthewatabet

+0

当你提到“复杂的代码生成”时,你有什么想法? – matthewatabet