2010-08-04 145 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插件的功能。