2011-06-06 241 views
4

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

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

回答

1

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

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

当然,这两种语言在理论上图灵完整,因此他们翻译,但翻译还必须是:

  1. 编译输入语言转换成低级别足够的语言,无论是输入并且输出语言以某种方式将该语言作为原点(可能是汇编程序)。
  2. 将低级语言反编译为输出语言中许多等效形式之一。

上面的第2步太复杂了。 (这就是为什么你可以将任何C#编译成编译好的EXE,而不用担心有人盗取你的源代码。)

+0

我要强调单词“模式” - 通过我的意思类,只保留数据。我不想在一个地方编写一个完整的软件,并用N种语言编译它。 – bretik 2011-06-07 11:12:57

3

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

对于更复杂的应用,你可以考虑用C编写并产生痛饮包装:http://www.swig.org/,但极端;)

+0

是的,这正是我所说的“模型”。我会看看协议缓冲区。你知道一些其他“类似的解决方案” - 如果你这样做,请更新你的答案。 – bretik 2011-06-07 11:08:45

+0

请看这个列表:http://en.wikipedia.org/wiki/Protocol_Buffers#See_also – Piotr 2011-06-07 11:19:47