主要观点: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 许可证开源,在项目的代码库、问题追踪器等场所需遵循代码行为准则。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。