Ruby Next:让所有Ruby版本齐声鸣叫
项目介绍
Ruby Next 是一个转译器和一组多填充库,旨在支持最新和即将推出的Ruby特性(API和语法)在旧版本和替代实现中的使用。例如,你可以在Ruby 2.5或[mruby][]中使用模式匹配和Kernel#then
。
Ruby Next 的主要目标用户包括:
- Ruby gem 维护者:希望使用最新Ruby版本编写代码,但仍支持旧版本。
- 应用程序开发者:希望在不等待最终发布(或更常见的是第一个补丁)的情况下尝试新特性。
- 非MRI实现的用户:如[mruby][]、[JRuby][]、[TruffleRuby][]、[Natalie][]、[Opal][]、[RubyMotion][]、[Artichoke][]、[Prism][]。
- Ruby语法爱好者:希望实验自定义语法扩展。
Ruby Next 还旨在帮助社区通过更容易地尝试新特性来评估实验性MRI特性。这就是为什么Ruby Next尽可能快地实现master
特性。
项目技术分析
Ruby Next 由两部分组成:核心和语言。
- 核心:提供Ruby核心类API的多填充库,通过Refinements(默认策略)或核心扩展(可选或在不支持Refinements的环境中)。
- 语言:负责将边缘Ruby语法转译为旧版本。可以通过编程方式或CLI完成,也可以在运行时完成。
目前,Ruby Next 支持Ruby 2.3+版本,包括JRuby 9.2.8+和TruffleRuby 20.1+(有一些限制)。对于2.0到2.3版本,可能支持但不再测试。
项目及技术应用场景
Ruby Next 适用于以下场景:
- Gem开发:希望在旧版本Ruby中使用最新语法和API。
- 应用程序开发:希望在不升级Ruby版本的情况下使用新特性。
- 非MRI实现:如mruby、JRuby等,希望在这些实现中使用最新Ruby特性。
- 语法实验:希望在不改变Ruby版本的情况下实验新语法。
项目特点
- 多填充库:支持最新Ruby API在旧版本中的使用。
- 转译器:支持将边缘Ruby语法转译为旧版本。
- 自定义语法重写器:允许用户实验自定义语法扩展。
- CLI工具:提供命令行工具
ruby-next
,方便用户快速开始实验。 - 社区支持:通过社区反馈不断改进和扩展支持的特性。
快速开始
安装Ruby Next并运行示例脚本:
# 全局安装Ruby Next
$ gem install ruby-next
# 使用-ruby-next标志调用ruby
$ ruby -ruby-next -e "
greet = proc do
case it
in hello: hello if hello =~ /human/i
'🙂'
in hello: 'martian'
'👽'
end
end
puts greet.call(hello: 'martian')
"
=> 👽
使用多填充库
首先,安装gem:
# Gemfile
gem "ruby-next-core"
# gemspec
spec.add_dependency "ruby-next-core", "~> 1.0"
然后,加载Ruby Next并激活Refinements:
require "ruby-next"
using RubyNext
转译器
Ruby Next 允许你将边缘Ruby语法转译为旧版本。安装方法如下:
# Gemfile
gem "ruby-next", "~> 1.0"
# gemspec
spec.add_dependency "ruby-next", "~> 1.0"
# 或全局安装
gem install ruby-next
CLI工具
Ruby Next 提供了命令行接口ruby-next
,支持以下功能:
ruby-next nextify
该命令允许你将文件或目录转译为旧版本Ruby:
$ ruby-next nextify
Usage: ruby-next nextify DIRECTORY_OR_FILE [options]
-o, --output=OUTPUT Specify output directory or file or stdout
--min-version=VERSION Specify the minimum Ruby version to support
--single-version Only create one version of a file (for the earliest Ruby version)
--overwrite Overwrites the original file with one version of --single-version (works only with --single-version or --rewrite)
--edge Enable edge (master) Ruby features
--proposed Enable proposed/experimental Ruby features
--[no-]refine Do not inject `using RubyNext`
--list-rewriters List available rewriters
--rewrite=REWRITERS... Specify particular Ruby features to rewrite
--import-rewriter=PATHS... Specify the paths to custom rewriters to load
-h, --help Print help
-V Turn on verbose mode
--dry-run Print verbose output without generating files
通过Ruby Next,你可以轻松地在旧版本Ruby中使用最新特性,无需等待官方发布。快来尝试吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考