5

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

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

4

2 回答 2

3

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

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

于 2011-06-07T10:39:53.290 回答
1

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

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

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

  1. 将输入语言编译为足够低级的语言,以使输入和输出语言都以某种方式共享该语言作为起源(可能是汇编程序)。
  2. 将该低级语言反编译为输出语言中的许多等效形式之一。

上面的步骤 2 太复杂了。(这就是为什么您可以将任何 C# 分发为已编译的 EXE 而不必担心有人窃取您的源代码。)

于 2011-06-07T10:01:35.393 回答