Ruby c 里面怎么嵌入 ruby 代码

tablecell · 2021年05月14日 · 最后由 kowalskidark 回复于 2021年05月18日 · 525 次阅读

用 c 做个壳子,里面具体功能用 Ruby 实现 这个方案可行吗?

不知道具体需求是什么。类似 PYQT 的绑定?

nine 回复

具体需求就是非技术的亲友,同学有些数据处理的需求,类似数据抓取,图片处理, 但是写好 ruby 脚本以后,发给他们不知道怎么运行, 如果具体功能完全用 c 来实现的,很麻烦 要花很长时间 ,最好的办法 c+ruby 拼一起,双击运行

tablecell 回复

用 mruby,把 Ruby 代码写成 mgem,然后和 mruby runtime 一起编译成一个单独的 executable

lynx C 部分的代码,用了 Ruby 的 minitest 做测试

mruby-lynx 纯 Ruby 的代码,包装成了 mgem

这个是我最近刚开始写的一个类似的项目,用 Ruby 实现一套 DSL 框架,然后和 mruby 一起编程成一个 statically linked ELF executable 分发给用户,还没有太多逻辑代码,但是构建过程可以参考一下。另外这里 hack 了一下用了 musl,如果没有需求的话用原本的 glibc 那套就可以,Windows 上 mruby 也提供了一些样例配置文件。

tablecell 回复

爬虫可以看看这个,另外让他们直接服务器上跑呗,或者树莓派,C 嵌入 ruby 其实并不是你的需求。

kowalskidark 回复

我推荐这个方法,而且很好实施

李阿玲老师的 https://github.com/clerkma/ptex-ng Tex 排版项目也是用 mruby 做 DSL 层,可以参考 mruby 对于各种平台包括 windows 支持很好,如果是 Ruby 的话,考虑调用外部 Ruby 的 bin 也可以

我感觉不行吧,主要是 gem 安装问题。

kowalskidark 回复

项目有点意思。

ericguo 回复

这个项目大概是想做一个给服务器按照规则校验、生成、删除配置文件以及重启 daemon 的 DSL,是朋友提的一个内部运维工具需求,具体 use case 我们还在讨论。现在比较明确的是这个东西要不依赖系统上的 glibc 运行,因为运维场景是有可能 glibc 挂掉的,还有一个是最好生成一个二进制方便干净地部署。最开始想用 go 来写,后来 @dsh0416 和我们讲可以用 mruby,@jasl 讲可以上 musl 跨平台,最后就出来这么个用 mruby 的方案。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号