Natalie 是一个正在进行中的 Ruby 实现。
它提供了一个使用 C++ 和 gcc/clang 作为后端的提前编译器。此外,该语言还有一个执行增量编译的 REPL。
在这变得有用之前,还有很多工作要做。如果您想提供帮助,请告诉我!
欢迎贡献!您可以通过 YouTube 上的黑客会议视频详细了解我如何处理 Natalie。
现在开始最简单的方法是在一个尚未实现的对象上找到一个方法并自己创建它!还要看看好的第一个问题。 (请参阅下面的“构建”和“运行测试”部分,了解一些有用的步骤。)
我们有一个非常安静的 Discord 服务器——快来玩吧!
Natalie 在 macOS 和 Ubuntu Linux 上进行了测试。尚不支持 Windows。
Natalie 目前需要系统 Ruby (MRI) 来托管编译器。
先决条件:
3.1
与最新的补丁版本相匹配。ruby
和ruby-dev
软件包。在您的平台上安装上述先决条件,然后运行:
git clone https://github.com/natalie-lang/natalie
cd natalie
rake
sudo
!如果您已经犯了这个错误,那么您应该sudo rm -rf build
并重试。/usr/lib/ruby
或其他需要 root 的路径,那么您有几个选择:rbenv version
以查看当前选择的版本。运行rbenv shell
然后运行版本以选择该版本。 mkdir -p ~/gems
export GEM_HOME=~/gems
bundler
错误,那么您的操作系统可能没有将其与Ruby一起安装。您可以运行gem install bundler
来获取它。 回复:
bin/natalie
运行 Ruby 脚本:
bin/natalie examples/hello.rb
将文件编译为可执行文件:
bin/natalie -c hello examples/hello.rb
./hello
docker build -t natalie . # build image
docker run -it --rm natalie # repl
docker run -it --rm natalie -e "p 2 * 3" # immediate
docker run -it --rm -v$(pwd)/myfile.rb:/myfile.rb natalie /myfile.rb # execute a local rb file
docker run -it --rm --entrypoint bash natalie # bash prompt
要运行测试(或规范),您可以像普通的 Ruby 脚本一样运行它:
bin/natalie spec/core/string/strip_spec.rb
这将运行测试并告诉您是否有任何失败。
如果您想运行我们期望通过的所有测试,您可以运行:
rake test
最后,如果您需要在本地运行一些测试,可以使用test/runner.rb
帮助程序脚本:
bin/natalie test/runner.rb test/natalie/if_test.rb test/natalie/loop_test.rb
spec/
中的文件来自优秀的 ruby/spec 项目,这是一个社区策划的测试文件存储库,任何 Ruby 实现都可以使用它来比较其与 MRI(Matz 的 Ruby 解释器)所做的一致性。当我们实现规范所涵盖的语言部分时,我们会复制规范。
test/
中的所有内容都是我们在开发 Natalie 时编写的。这些测试帮助我们引导了语言的某些部分,并且/或者官方 Ruby 规范没有涵盖我们想要的那么多内容。我们用它来补充spec/
中的规格。
Natalie 的版权为 2023,由 Tim Morgan 和贡献者所有。 Natalie 已根据 MIT 许可证获得许可;请参阅此目录中的LICENSE
文件以获取全文。
本程序的某些部分是从其他来源复制的,版权归各自所有者所有。此类版权声明要么位于相应文件的顶部,要么位于名称类似LICENSE
的同一目录中,或者两者都位于。
文件 | 版权 | 执照 |
---|---|---|
benchmark.rb | 后令牌 | BSD |
bigint.{h,c} | 第983章 | 无执照 |
cgi.rb / cgi/* | 青山和光 | BSD |
crypt.{h,c} | 大学董事会。卡利。 | BSD |
delegate.rb | 松本幸弘 | BSD |
dtoa.c | 大卫·盖伊 (David M. Gay),朗讯科技公司 | 自定义许可 |
erb/util.rb | 关正敏 | BSD |
ipaddr.rb | 梅本肇和武者昭则 | BSD |
find.rb | 辻本一树 | BSD |
formatter.rb | 松本幸弘 | BSD |
linenoise | S. Sanfilippo 和 P. Noordhuis | BSD |
minicoro.h | 爱德华多·巴特 | 麻省理工学院 |
pp.rb | 松本幸弘 | BSD |
prettyprint.rb | 松本幸弘 | BSD |
shellwords.rb | 武者秋教 | BSD |
spec/* | 发动机厂有限公司 | 麻省理工学院 |
uri.rb / uri/* | 山田晃 | BSD |
version.rb | 发动机厂有限公司 | 麻省理工学院 |
zlib | 让·卢·盖利和马克·阿德勒 | zlib许可证 |
请参阅上面的每个文件以获取完整的版权和许可文本。