2010-08-04 13 views
18

Stavo pensando di scrivere un generatore di codice per generare scala dal file delle definizioni di google protobuf. Il motivo per cui lo vedo prezioso è che i java binding sono troppo Java-ish e si potrebbe fare molto meglio in scala. Ad esempio per la seguente definizioneCompilatore dei buffer del protocollo Scala

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

voglio essere in grado di costruire l'oggetto proto da Scala in questo modo:

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

La mia domanda è se qualcuno sa qualcosa in questo senso già esistente, oppure se non lo trovi degno di iniziare un nuovo progetto?

+2

Ho cercato un progetto del genere, ma non ne ho trovato uno. Per favore Inizia! Potresti dare un'occhiata a http://scalaxb.org/ per l'ispirazione. E pensa al limite di 22 elementi sulle classi di casi dall'inizio :) – retronym

+0

Intereseting. Non avevo intenzione di usare case classes nelle mie proiezioni. Potresti per favore darmi un suggerimento su come sono stati usati in scalaxb (o in qualche altra situazione simile)? – venechka

+0

Il limite di 22 elementi significa che hai ragione a non pensare alle classi di casi. Non sono utili qui. –

risposta

1

C'è questo progetto che utilizza Simple-build-Tool plugin per raggiungere questo effetto: http://github.com/codahale/protobuf-sbt?locale=sv

Aggiornamento: Il progetto di cui sopra non esiste più. Il plug-in sbt-protobuf ha esteso la funzionalità di quel progetto originale. Si noti, tuttavia, che sbt-protobuf genera classi Java, non Scala.

+5

Non genera collegamenti java? – venechka

+0

Il collegamento è interrotto. Questo forse? https://github.com/sbt/sbt-protobuf –

0

Forse sarebbe possibile scrivere un plugin per compilatore Scala che legga e compili i file .proto?

+0

Potrebbe essere un compilatore di proto per scala. Il codice Google open source ha backend per vari linguaggi di programmazione. – venechka

15

Attualmente sto lavorando su un compilatore Scala buffer protocollo con il mio mentore Viktor Klang. È il mio progetto Google Summer of Code e puoi seguire i progressi su github allo https://github.com/SandroGrzicic/ScalaBuff.

[Aggiorna] La parte principale è completa; Devo ancora implementare il supporto per le estensioni, i gruppi e le opzioni sul campo. È utilizzabile e invito tutti a provarlo e dare feedback; Sono aperto a suggerimenti e richieste di funzionalità.

+2

Qual è il progresso della tua implementazione? È già utile? – aindl

+2

Si compone di più parti: le principali sono Parser che riconosce i file di input .proto e restituisce un albero di analisi, Generator che prende quell'albero e genera classi di output Scala e, naturalmente, la classe principale che gestisce Parser e Generator (e ha funzionalità CLI molto simili a protoc). Le parti di ScalaBuff e Parser sono state completate da qualche tempo; il parser (dovrebbe) riconoscere e costruire un albero da qualsiasi file .proto valido.Attualmente il generatore supporta la generazione di messaggi ed enumerazioni, ma al momento sto completando quella parte. Resta sintonizzato, lo aggiorno spesso. ;) –

+1

@ SandroGržičić - potrebbe essere interessante aggiornare questa risposta. Sembra che ci siano stati dei recenti impegni nel progetto. –

1

Uno strumento davvero valido per generare classi Scala e Java da file .proto è ScalaPB. Lo strumento estende la funzionalità del plugin sbt-protobuf.

Problemi correlati