Thriftpy / thriftpy

Thriftpy has been deprecated, please migrate to https://github.com/Thriftpy/thriftpy2
MIT License
1.15k stars 286 forks source link

基于什么样的考虑不采用生成代码的方式呢?或者说为什么thrift官方需要采用生成代码的方式呢? #335

Open robertding opened 6 years ago

robertding commented 6 years ago

在我看来,生成代码最大的缺点是在需要改动idl的时候生成代码需要同步更改, 但是如果生成代码被认为改动了的话,很难再做merge,这就导致了idl几乎没办法再做修改。 所以我认为直接读取idl是一个比较好的实现。 还有其他考虑让thriftpy不采用生成代码的方式么? 或者说thrift为什么要采用生成代码的方式呢?

或者有没有说的比较明白的文章呢?

DavidMorre commented 6 years ago

建议看下腾讯开源的blade(https://github.com/chen3feng/typhoon-blade) 对thrift编译的支持,运行时生成代码的缺点在于:

  1. thrift官方是自带解析器的,不同版本的thrift可能有不同的保留词和语法,自行撸一个解析器来生成容易有不兼容问题,个人觉得这个是硬伤。
  2. IDL生成的大部分代码在编译期就可以完成,在运行期再生成一方面增加了运行时间(当然大部分是初始化时间),另一方面使得一些错误在运行时才会触发,不如编译期生成安全。

python是个解释性语言,所以thriftpy生成代码副作用并不明显,但是如果某个thrift文件需要和其他类型语言的模块一起配合使用的话,感觉还是把生成thrift代码的工作交给构建部分来执行比较好,thriftpy毕竟重在封装和优化thrift,而不是再生成一套thrift代码。