如何为多种语言生成类

本文关键字:语言生成 | 更新日期: 2023-09-27 17:58:35

我正在寻找一种方法,为多种语言(Java、C#、JavaScript)生成一些模型类,以保持这些语言之间的一致性。是否有一些工具可以帮助我在一个地方定义模型,并在所有三种语言的每次更改后生成它?我在看JetBrains MPS,但它似乎只适用于生成一种语言,甚至在文档中也写过,建议只使用一种语言生成器(如果有的话)。

到目前为止,我找到的唯一方法是XML文件和每种语言的XSL转换,但我正在寻找更方便的方法。

如何为多种语言生成类

如果你所说的"模型"是指只保存数据的类,并且你需要序列化/反序列化的一致性,那么你应该考虑谷歌协议缓冲区:https://developers.google.com/protocol-buffers/或类似的解决方案。

对于更复杂的用途,您可以考虑使用c编写并使用swig生成包装器:http://www.swig.org/,但is是极端的;)

从最严格的意义上讲,这是不可能的,因为这些语言的一些特性不会相互转换。

例如,将delegate Method();放在C#中,正如您在建模时可能会做的那样,它会立即中断到Java的直接转换,因为Java没有委托方法的概念。

当然,这两种语言都是图灵完备的,所以理论上他们翻译,但译者必须:

  1. 将输入语言编译成足够低级别的语言,使输入语言和输出语言以某种方式共享该语言作为源语言(可能是Assembler)
  2. 将该低级语言重新分解为输出语言中的许多等效形式之一

上面的第2步太复杂了