Skip to content
This repository has been archived by the owner on Dec 10, 2018. It is now read-only.

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

Open
robertding opened this issue Jul 16, 2018 · 1 comment

Comments

@robertding
Copy link

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

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

@DavidMorre
Copy link

DavidMorre commented Jul 23, 2018

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

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

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants