用Crystal包装器连接Elixir和Go后端

2025-06-19
用Crystal包装器连接Elixir和Go后端

Mozi团队需要将一个新的Elixir Phoenix LiveView应用连接到现有的Go后端。他们尝试了NIFs和Ports,但最终选择使用Erlang的C节点,并用Crystal编写了C包装器来简化维护。这个方案在编译时和运行时都解耦了代码库,通过在Elixir端使用`Node.list`来检测C节点连接,并使用S6进行容器内重启。虽然存在跨C/Go边界的性能损耗,但这对于他们的用例来说是可以接受的。最终实现了Elixir、Crystal和Go三种语言的混合应用,提高了代码的可维护性。

阅读更多
开发

利用 Tree-sitter 解析 Protobuf 定义

2024-08-04
利用 Tree-sitter 解析 Protobuf 定义

文章介绍了如何使用 Tree-sitter 解析 Protobuf 定义,提取所需信息,例如消息名称、枚举类型、字段及其类型等。作者详细讲解了如何使用 Tree-sitter 的 Go 绑定和查询表达式从 Protobuf 文件中提取数据,并提供了相应的代码示例。文章还介绍了如何使用 Neovim 的 Tree-sitter 插件可视化和查询解析树,以便更方便地构建查询表达式。

阅读更多
未分类