GitHub - wouterken/crystalruby: 在 Ruby 中直接嵌入 Crystal 代码

主要观点crystalruby是一个能在 Ruby 中嵌入 Crystal 代码的 gem,可显著提高某些代码的性能,支持多种功能如调用 Ruby 方法、异常处理、使用 shards 等,还具备实时重载、多库支持等特性。

关键信息和重要细节

  • 语法:用crystallize定义将编译为 Crystal 的方法,需提供参数和返回类型,Ruby 兼容的方法体可直接写 Ruby,Crystal 专属语法需用raw: true选项,从 0.2.x 版本开始类型签名语法有所变化。
  • 类型:支持大多数内置 Crystal 类型和类型短手,可通过命名类型实现按引用传递,还能定义共享实例。
  • 调用 Ruby 从 Crystal:通过expose_to_crystal注解暴露 Ruby 方法,可在 Kemal 中结合 Crystal 和 Ruby 的优势,与纯 Ruby 或纯 Crystal 实现相比有性能优势。
  • 协同程序(Yielding):支持 Crystal 方法向 Ruby yield 和 Ruby 块向 Crystal yield,需在方法签名中添加块参数并使用yield关键字。
  • 使用 shards:可在 Ruby 源文件中内联指定 shard 依赖,crystalruby会自动处理相关操作,若 shard 文件不同步可运行crystalruby clean
  • 释放构建(Release Builds):可通过配置控制构建模式为调试或发布,还可创建专门文件提前编译 Crystal 代码。
  • 并发:默认 Ruby 多线程环境中 Crystal 库不能安全并行调用,crystalruby实现了反应器来处理跨线程调用,可使用async: true选项实现并发,还可设置单线程模式避免反应器开销。
  • 实时重载(Live Reloading):支持实时重载 Crystal 代码,仅在检测到代码变化时重新编译。
  • 多库支持(Multi-library support):可将 Crystal 代码拆分为多个库,减少编译时间,不同库的 Crystal 方法需通过 Ruby 代码交互。
  • 安装和配置:在 Gemfile 中添加gem 'crystalruby',可通过bundle install安装,支持crystalruby init生成配置文件,也可编程设置配置选项。
  • 开发和贡献:克隆仓库后运行bin/setup安装依赖,运行rake test进行测试,bundle exec rake install可安装到本地机器,bundle exec rake release可发布新版本。欢迎提交 bug 报告和 pull 请求,需遵循代码规范。
  • 许可证和行为准则:基于 MIT 许可证开源,在项目的代码库、问题追踪器等场所需遵循代码行为准则
阅读 10
0 条评论