2010-08-04 6 views
18

Я думал о написании генератора кода для генерации scala из файла определений goob protobuf. Причина, по которой я считаю это ценной, - это привязки Java, слишком Java-иш, и в scala можно сделать гораздо лучше. Например, для следующего определенияScala protocol buffers компилятор

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

Я хочу, чтобы иметь возможность построить объект прото от Scala, как это:

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

Мой вопрос, если кто-нибудь знает что-то вдоль этих линий уже существующих или если нет, то стоит ли начинать новый проект?

+2

Я искал такой проект, но не нашел его. Пожалуйста начните! Вы можете посмотреть на http://scalaxb.org/ для вдохновения. И подумайте о 22-элементном пределе для классов case с самого начала :) – retronym

+0

Взаимодействие. Я не собирался использовать классы case в своих прогнозах. Не могли бы вы дать мне подсказку, как они использовались в scalaxb (или в какой-то другой подобной ситуации)? – venechka

+0

Ограничение в 22 элемента означает, что вы были правы, чтобы не думать о классах случаев. Они здесь не полезны. –

ответ

1

Там в этот проект, который использует Simple-Build-Tool плагинов для достижения этого эффекта: http://github.com/codahale/protobuf-sbt?locale=sv

Update: выше проект больше не существует. Плагин sbt-protobuf расширил функциональность этого оригинального проекта. Обратите внимание, однако, что sbt-protobuf генерирует классы Java, а не Scala.

+5

Не генерирует ли он привязки java? – venechka

+0

Ссылка не работает. Может, это? https://github.com/sbt/sbt-protobuf –

0

Возможно, можно было бы написать плагин-компилятор Scala, который читал и компилировал .proto-файлы?

+0

Это может быть прото-компилятор для scala. Открытый код Google содержит серверы для различных языков программирования. – venechka

1

Я только что наткнулся на них, но не могу ручаться за них, поскольку я их никогда не использовал.

http://code.google.com/p/protobuf-scala/

https://github.com/jeffplaisance/scala-protobuf

+0

** февраль 20016 ** Все приведенные выше ссылки являются неактивным проектом (смотрите ниже для более свежих версий). – marios

15

Я сейчас работаю над компилятором Scala протокола Буферы с моим наставником Виктором Кланг. Это мой проект Google Summer of Code, и вы можете следить за ходом работы на github по адресу https://github.com/SandroGrzicic/ScalaBuff.

[Обновить] Основная часть завершена; Мне все еще нужно реализовать расширения, группы и параметры полей. Это полезно, и я приглашаю всех попробовать и дать отзывы; Я открыт для предложений и запросов функций.

+2

Каков прогресс вашей реализации? Это уже полезно? – aindl

+2

Он состоит из нескольких частей: основными являются Parser, который распознает входные файлы .proto и возвращает дерево синтаксического анализа, генератор, который принимает это дерево и генерирует выходные классы Scala, и, конечно же, основной класс, который обрабатывает Parser и Generator (и имеет очень похожую функциональность CLI для protoc). Части ScalaBuff и Parser уже давно завершены; Parser (должен) распознать и построить дерево из любого действительного файла .proto.Генератор в настоящее время поддерживает генерацию сообщений и Enums, однако в настоящее время я заканчиваю эту часть. Оставайтесь с нами, я часто его обновляю. ;) –

+1

@ SandroGržičić - может быть интересно обновить этот ответ. Похоже, что были недавние коммиты проекта. –

1

Действительно хороший инструмент для создания как Scala, так и Java-классов из .proto-файлов - ScalaPB. Инструмент расширяет функциональность плагина sbt-protobuf.

Смежные вопросы