我正在设计一个编排引擎,可以在多个环境中自动执行任务:JavaScript Web UI,Python Web服务器和c运行时。一种可能的方法是用每种语言编写业务流程核心。这看起来很脆弱,因为每个新的引擎功能都需要添加到每种支持的语言中(并且必须多次解决错误,同时处理每种语言中的不同习语)。另一种方法是将核心编写为最小公分母语言(可能是c),然后将其包装在其他语言中。但是,我认为将编译库部署到浏览器即使不是不可能也是一场噩梦。所以,我正在考虑的另一个选择是模板和代码生成。然后可以将引擎编写一次(可能在Python中),并使用jinja模板将工作流编译到每个目标。
这最后一种方法听起来可行吗?如果我走那条路,我应该注意哪些陷阱?我应该把它吸干并写三次发动机吗?
答案 0 :(得分:1)
使用哪种技术并不重要,您将面临三个潜在问题:
如果您编写自己的实现代码,则可以更轻松地克服2)和3)。
如果生成代码,则可以更灵活地更改特定目标的运行方式。如果您使用简单的基于文本的"模板"要生成目标语言代码,您将无法生成非常高效的代码;你不能优化你生成的东西。如果您使用更复杂的代码生成器,您可能能够生成/优化结果。
很难说你将会遇到多少麻烦,部分原因是你还没有告诉我们这个引擎会做什么或目标语言是什么。即使有这些数据,也很难说出来;直到你有一个正在运行的系统,你无法确定没有一个粗鲁的意外。
人们在面对未知时使用复杂的代码生成技术,因为这样可以最大限度地提高灵活性,从而更容易克服并发症。
当人们没有精力学习如何使用复杂的发电机时,他们会使用更简单的代码生成。如果幸运的话,没有问题出现,他们就赢了。如果这个实验没有很多工作,那么你应该尝试一下并希望最好。