Ruby Next:让所有Ruby版本齐声鸣叫

Ruby Next:让所有Ruby版本齐声鸣叫

ruby-nextRuby Next makes modern Ruby code run in older versions and alternative implementations项目地址:https://gitcode.com/gh_mirrors/ru/ruby-next

项目介绍

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中使用最新特性,无需等待官方发布。快来尝试吧!

ruby-nextRuby Next makes modern Ruby code run in older versions and alternative implementations项目地址:https://gitcode.com/gh_mirrors/ru/ruby-next

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董灵辛Dennis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值