2010-08-04 37 views
18

Tôi đã suy nghĩ về việc viết trình tạo mã để tạo scala từ tệp định nghĩa của google protobuf. Lý do tôi thấy nó có giá trị là các ràng buộc java là quá Java-ish và có thể làm tốt hơn nhiều trong scala. Ví dụ cho định nghĩa sau đâyBộ đệm giao thức Scala biên dịch

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

Tôi muốn để có thể xây dựng các đối tượng proto từ Scala như thế này:

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

Câu hỏi của tôi là nếu có ai biết một cái gì đó dọc theo những dòng đã tồn tại, hoặc nếu bạn không tìm thấy nó xứng đáng để bắt đầu một dự án mới?

+2

Tôi đã tìm kiếm một dự án như vậy, nhưng chưa tìm thấy. Hãy bắt đầu! Bạn có thể xem http://scalaxb.org/ để lấy cảm hứng. Và suy nghĩ về giới hạn phần tử 22 đối với các trường hợp từ đầu :) – retronym

+0

Intereseting. Tôi không có ý định sử dụng các lớp chữ trong các phép chiếu của mình. Bạn có thể xin vui lòng cho tôi một gợi ý làm thế nào họ đã được sử dụng trong scalaxb (hoặc trong một số tình huống tương tự khác)? – venechka

+0

Giới hạn phần tử 22 có nghĩa là bạn đã đúng khi không nghĩ về các trường hợp. Chúng không hữu ích ở đây. –

Trả lời

1

Có dự án này có sử dụng plugin Simple-Build-Công cụ để đạt được hiệu quả mà: http://github.com/codahale/protobuf-sbt?locale=sv

Cập nhật: Dự án nêu trên không còn tồn tại. Plugin sbt-protobuf đã mở rộng chức năng của dự án ban đầu đó. Tuy nhiên, lưu ý rằng sbt-protobuf tạo ra các lớp Java, chứ không phải Scala.

+5

Nó không tạo ra các ràng buộc java? – venechka

+0

Liên kết bị hỏng. Cái này có lẽ? https://github.com/sbt/sbt-protobuf –

0

Có thể viết một trình biên dịch Scala để đọc và biên dịch các tệp .proto?

+0

Nó có thể là một trình biên dịch proto cho scala. Mở mã Google có nguồn gốc có các chương trình phụ trợ cho các ngôn ngữ lập trình khác nhau. – venechka

15

Tôi hiện đang làm việc trên một trình biên dịch với người thầy của tôi Viktor Klang Scala Nghị định thư Buffers. Đó là dự án Google Summer of Code của tôi và bạn có thể thực hiện theo tiến trình trên github tại https://github.com/SandroGrzicic/ScalaBuff.

[Cập nhật] Phần chính đã hoàn tất; Tôi vẫn cần triển khai hỗ trợ Tiện ích mở rộng, Nhóm và trường. Nó có thể sử dụng được và tôi mời mọi người dùng thử và đưa ra phản hồi; Tôi đang mở các đề xuất và yêu cầu tính năng.

+2

Tiến độ triển khai của bạn là gì? Nó có hữu ích không? – aindl

+2

Nó bao gồm nhiều phần: phần chính là Parser nhận dạng tệp .proto đầu vào và trả về một cây phân tích cú pháp, Trình tạo ra cây đó và tạo các lớp Scala đầu ra, và tất nhiên lớp chính xử lý Parser và Trình tạo (và có chức năng CLI rất giống với protoc). Các bộ phận ScalaBuff và Parser đã được hoàn thành trong một thời gian; trình phân tích cú pháp (nên) nhận ra và xây dựng một cây từ bất kỳ tệp .proto hợp lệ nào.Máy phát điện hiện đang hỗ trợ thế hệ Tin nhắn và Enums, tuy nhiên tôi hiện đang hoàn thành phần đó. Hãy theo dõi, tôi thường xuyên cập nhật nó. ;) –

+1

@ SandroGržičić - có thể thú vị khi cập nhật câu trả lời này. Có vẻ như đã có cam kết gần đây với dự án. –

1

Một công cụ thực sự tốt để tạo cả hai lớp Scala và Java từ các tệp .proto là ScalaPB. Công cụ này mở rộng chức năng của plugin sbt-protobuf.

Các vấn đề liên quan