2010-08-04 82 views
18

我正在考虑编写一个代码生成器来从google protobuf定义文件生成scala。我认为它有价值的原因是java绑定太Java-ish,而且在scala中可以做得更好。 例如,对于下面的定义Scala协议缓冲区编译器

message Foo { 
    required int F1 = 1; 
    repeated string F2 = 2; 
    message Inner (
    required int F3 = 1; 
) 
} 

我希望能够从斯卡拉构建原型对象是这样的:

val foo = Foo (
    F1(127), 
    F2("first", "second"), 
    Inner (
    F3(911) 
) 
) 

我的问题是,如果有人知道这些方针的东西已经存在,或如果不是你觉得值得开始一个新项目吗?

+2

我找过这样一个项目,但还没找到。请开始!你可以看看http://scalaxb.org/的灵感。并从头开始考虑案例类别的22元素限制:) – retronym 2010-08-04 10:39:19

+0

Intereseting。我无意在我的预测中使用案例类。您能否给我一个提示,告诉我们他们是如何在scalaxb中使用的(或者在其他类似的情况下)? – venechka 2010-08-04 12:07:41

+0

22个元素的限制意味着你不应该去考虑案例类。他们在这里没用。 – 2012-02-11 17:16:43

回答

1

有这个项目,使用简单,内建工具插件来达到这样的效果:http://github.com/codahale/protobuf-sbt?locale=sv

更新: 以上项目不再存在。 sbt-protobuf插件扩展了原始项目的功能。但是,请注意,sbt-protobuf生成Java类,而不是Scala。

+5

它不会生成java绑定吗? – venechka 2010-08-04 10:36:20

+0

链接已损坏。这可能吗? https://github.com/sbt/sbt-protobuf – 2013-09-17 05:51:50

0

也许有可能编写一个Scala编译器插件来读取和编译.proto文件?

+0

它可能是scala的proto编译器。开放源代码的Google代码具有各种编程语言的后端。 – venechka 2010-08-04 11:42:46

15

我目前工作的一个斯卡拉Protocol Buffers的编译器,我的导师维克多·巴生。这是我的Google Summer of Code项目,你可以在github上按照进度https://github.com/SandroGrzicic/ScalaBuff

[更新]主要部分完整;我仍然需要实现扩展,组和字段选项支持。这是可用的,我邀请所有人尝试并提供反馈意见;我愿意接受建议和功能要求。

+2

你的实施进展如何?它已经有用了吗? – aindl 2011-08-17 19:44:00

+2

它由多个部分组成:主要是解析器,它识别输入.proto文件并返回一个解析树,生成器接收该树并生成输出Scala类,当然还有处理解析器和生成器的主类(以及与protoc具有非常类似的CLI功能)。 ScalaBuff和Parser部分已经完成了一段时间了;解析器(应该)从任何有效的.proto文件中识别并构建一棵树。发生器当前支持消息和枚举的生成,但是我正在完成该部分。敬请关注,我经常更新它。 ;) – 2011-08-19 02:59:33

+1

@SandroGržičić - 可能更有趣,更新此答案。看起来这个项目最近有过提交。 – 2012-07-27 05:24:13

1

从.proto文件生成Scala和Java类的一个非常好的工具是ScalaPB。该工具扩展了sbt-protobuf插件的功能。