如何在 thrift-compiler 中为自定义语言创建自己的 thrift 语言模板?

Posted

技术标签:

【中文标题】如何在 thrift-compiler 中为自定义语言创建自己的 thrift 语言模板?【英文标题】:How to create own thrift language-templates for custom language in thrift-compiler? 【发布时间】:2014-10-31 11:07:30 【问题描述】:

我想使用 Thrift 作为 RPC-Protocol 从自定义的专有闭源语言调用 Java-Server RPC-Endpoints。 (一些类似 c 的供应商特定的脚本语言)

不存在对此的绑定。

如何创建我自己的生成特定语言代码的 thrift-compiler-plugins? 没有在文档上找到任何内容。 有没有类似模板语言的东西?

谢谢

【问题讨论】:

【参考方案1】:

如果所需目标语言不存在绑定,路线图(大致)如下:

搜索JIRA,如果您没有发现类似的情况,请创建一个新工单,简要说明您的计划。

在 GitHub 上创建 Apache Thrift code base 的分支。虽然我们接受补丁文件,但特别是对于较大的更改集,GitHub 分支更容易处理。

实现code generator,通常是从现有池中选择一个与您需要的最接近的池。已经支持很多语言,您会发现 oop、过程和函数样式。如果不确定,从您找到的两三个候选人中选择哪一个,请前往下一点

为该特定语言实现 Thrift 库,再次选择 existing libraries 之一作为起点。由于这些库在实现的“深度”方面存在很大差异,因此建议仔细查看哪些已实现,哪些未实现。

实施标准化的Thrift cross platform test 并确保在针对至少一种其他语言运行时所有测试都能成功。这确保了互操作性,并确保代码不仅在与自己交谈时(= 相同的语言)有效。

实现Tutorial code 并针对其他语言对其进行测试。如果一切都做得很好,那么最后一步就比较容易了。

大功告成,现在打开拉取请求!

请注意,这 4 个实现步骤并不是真正的线性过程,它更像是一种迭代。即使生成器生成的代码最终是可编译的并且不会发出任何警告并且似乎可以运行,但当您继续实施库和测试时,您仍然会遇到问题。这是完全正常的,也是意料之中的。

除此之外,最好将您的工作发布到邮件列表并尽早创建 JIRA 票证(这就是我将其放在列表顶部的原因)。这不仅是为了宣布您将要做的工作,对于可能只是在寻找那些东西的其他人来说,这也是一个很好的起点。运气好的话,您不仅能够获得早期反馈(这总是一件好事),而且还能在实施和/或测试方面获得一些支持。

备注

如果您想实现现有语言的新风格,首选方法是将其添加到现有的代码生成器、库等中。要获得良好的模型,请查看 nodejs 实现,或已经存在的各种选项存在于 Python 中。 thrift --help 是一个很好的开始。

【讨论】:

很好地写了你的文档。感谢您的回答。我所针对的语言是一种专有语言。但是,当我意识到这一点时,我肯定会做出贡献。 @JensG 每种语言都必须实现 Thrift-Protocol 的最低功能集吗?例如我的语言不支持结构。我可以把它们排除在外吗?我猜不是 ;) 例如,我是否必须使用访问器函数来实现它们? 服务调用需要结构体。 args 和 retvals 在技术上都是作为结构通过网络传输的。

以上是关于如何在 thrift-compiler 中为自定义语言创建自己的 thrift 语言模板?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WooCommerce 中为自定义产品数据选项卡定义图标

如何在 JavaScript 中为自定义对象创建方法?

如何在 iOS 中为自定义属性设置动画

如何在 Angular 中为自定义组件实现伪事件?

如何在 .NET 中为自定义配置部分启用 configSource 属性?

如何在 WooCommerce 中为自定义产品类型启用价格和库存