【问题标题】:How to generate classes for multiple languages如何为多种语言生成类
【发布时间】:2011-09-09 12:34:30
【问题描述】:

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

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

【问题讨论】:

    标签: javascript java c# code-generation mps


    【解决方案1】:

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

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

    【讨论】:

    • 是的,这正是我所说的“模型”的意思。我将看一下协议缓冲区。您是否知道其他一些“类似的解决方案” - 如果您知道,请更新您的答案。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 我应该强调“模型”这个词——我的意思是只保留数据的类。我不想在一个地方编写一个完整的软件并用 N 种语言编译它。
    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多