Decouple Thrift IDL from generators
-----------------------------------

                 Key: THRIFT-1463
                 URL: https://issues.apache.org/jira/browse/THRIFT-1463
             Project: Thrift
          Issue Type: Wish
          Components: Compiler (General)
            Reporter: Diwaker Gupta
            Assignee: Jake Farrell


While Thrift's broad language support is fantastic, it does impose many 
constraints on day to day development.

* The current design of the compiler make it hard to improve and test the 
generator/library for a particular language. The codebase is monolithic and 
hard to navigate.
* Each language has it's own idiosyncrasies. For instance, the Java library 
required ant to build, the Ruby library has other dependencies. Running unit 
tests is slightly different for each language library. Currently, all of this 
is duck-taped together (barely) using 'make', which has its own flaws.
* Adding support for a new language is fairly easy, but rather than making the 
code more modular, it adds to the current complexity of the codebase. For 
example, setting up Jenkins jobs to test/verify builds for a new language take 
a while to come up to parity with other languages.

I think Google's Protocol Buffer approach is instructive here. They're trying 
to strip down the core compiler and decouple the IDL from language specific 
stubs. For a rich environment like Thrift, I think this decoupling is crucial 
to allow for a more maintainable and testable code base going forward. To 
refresh:

* the core compiler takes in a Thrift grammar file and generates an 
intermediate representation: think of an in-memory AST
* each supported language will be implemented via plugins, that can be loaded 
at runtime by the compiler
* the plugins take this AST and transform it into source code
* each plugin can be in its own repository (consuming the compiler via a git 
submodule, for instance). Plugins can freely choose their own build system, 
unit test frameworks etc
* a meta repository can contain the compiler, and the 'blessed' (officially 
supported) languages. This meta repository can include integration tests that 
will test language interoperability

I realize, of course, that this will be a big change. But we have to start 
somewhere.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to