如何为多种语言生成类

时间:2011-06-06 18:21:59

标签: c# java javascript code-generation

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

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

2 个答案:

答案 0 :(得分:3)

如果“model”表示只保留数据的类,并且需要序列化/反序列化的一致性,则应考虑使用google协议缓冲区:https://developers.google.com/protocol-buffers/或类似的解决方案。

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

答案 1 :(得分:1)

从最严格的意义上说,这是不可能的,因为这些语言的某些特征不会互相翻译。

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

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

  1. 将输入语言编译成一种低级语言,输入语言和输出语言都以某种方式将该语言作为原点共享(可能是汇编程序)。
  2. 将该低级语言重新编译为输出语言中许多等效形式之一。
  3. 上面的第2步太复杂了。 (这就是为什么你可以将任何C#作为编译的EXE分发而不用担心有人窃取你的源代码。)