Natalie adalah implementasi Ruby yang sedang dalam proses.
Ini menyediakan kompiler terdepan yang menggunakan C++ dan gcc/clang sebagai backend. Selain itu, bahasa ini memiliki REPL yang melakukan kompilasi tambahan.
Masih banyak pekerjaan yang harus dilakukan sebelum ini berguna. Tolong beri tahu saya jika Anda ingin membantu!
Kontribusi dipersilakan! Anda dapat mempelajari lebih lanjut tentang cara saya bekerja di Natalie melalui video sesi peretasan di YouTube.
Cara termudah untuk memulai sekarang adalah dengan menemukan metode pada objek yang belum diimplementasikan dan membuatnya sendiri! Lihat juga terbitan pertama yang bagus. (Lihat bagian 'Membangun' dan 'Menjalankan Tes' di bawah untuk beberapa langkah bermanfaat.)
Kami memiliki server Discord yang sangat tenang -- datang dan jalan-jalan!
Natalie diuji pada macOS dan Ubuntu Linux. Windows belum didukung.
Natalie memerlukan sistem Ruby (MRI) untuk menghosting kompiler, untuk saat ini.
Prasyarat:
3.1
dengan rilis patch terbaru.ruby
dan ruby-dev
dari sistem Anda.Instal prasyarat di atas pada platform Anda, lalu jalankan:
git clone https://github.com/natalie-lang/natalie
cd natalie
rake
sudo
! Jika Anda sudah melakukan kesalahan itu, Anda harus sudo rm -rf build
dan coba lagi./usr/lib/ruby
, atau jalur lain yang memerlukan root, maka Anda memiliki beberapa opsi:rbenv version
untuk melihat versi mana yang sedang dipilih. Jalankan rbenv shell
diikuti dengan versi untuk memilih versi tersebut. mkdir -p ~/gems
export GEM_HOME=~/gems
bundler
, sistem operasi Anda mungkin tidak menginstalnya bersama Ruby. Anda dapat menjalankan gem install bundler
untuk mendapatkannya. REPL:
bin/natalie
Jalankan skrip Ruby:
bin/natalie examples/hello.rb
Kompilasi file ke file yang dapat dieksekusi:
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
Untuk menjalankan pengujian (atau spesifikasi), Anda dapat menjalankannya seperti skrip Ruby biasa:
bin/natalie spec/core/string/strip_spec.rb
Ini akan menjalankan pengujian dan memberi tahu Anda jika ada kegagalan.
Jika Anda ingin menjalankan semua pengujian yang kami harap dapat lulus, Anda dapat menjalankan:
rake test
Terakhir, jika Anda perlu menjalankan beberapa pengujian secara lokal, Anda dapat menggunakan skrip pembantu test/runner.rb
:
bin/natalie test/runner.rb test/natalie/if_test.rb test/natalie/loop_test.rb
File-file di spec/
berasal dari proyek ruby/spec yang luar biasa, yang merupakan repo file pengujian yang dikurasi komunitas yang dapat digunakan oleh implementasi Ruby mana pun untuk membandingkan kesesuaiannya dengan apa yang dilakukan MRI (Matz's Ruby Interpreter). Kami menyalin spesifikasi saat kami menerapkan bagian bahasa yang dicakupnya.
Semua yang ada di test/
adalah hal yang kami tulis saat mengerjakan Natalie. Ini adalah pengujian yang membantu kami mem-bootstrap bagian-bagian tertentu dari bahasa tersebut dan/atau tidak tercakup sebanyak yang kami inginkan dalam spesifikasi resmi Ruby. Kami menggunakan ini untuk melengkapi spesifikasi di spec/
.
Natalie adalah hak cipta 2023, Tim Morgan dan kontributor. Natalie dilisensikan di bawah Lisensi MIT; lihat file LICENSE
di direktori ini untuk teks lengkapnya.
Beberapa bagian dari program ini disalin dari sumber lain, dan hak cipta dimiliki oleh pemiliknya masing-masing. Pemberitahuan hak cipta tersebut ada di bagian atas masing-masing file, di direktori yang sama dengan nama seperti LICENSE
, atau keduanya.
berkas | hak cipta | lisensi |
---|---|---|
benchmark.rb | mendapat | BSD |
bigint.{h,c} | 983 | Tidak berlisensi |
cgi.rb / cgi/* | Wakou Aoyama | BSD |
crypt.{h,c} | Para Bupati Univ. dari Kali. | BSD |
delegate.rb | Yukihiro Matsumoto | BSD |
dtoa.c | David M.Gay, Lucent Technologies | permisif adat |
erb/util.rb | Masatoshi SEKI | BSD |
ipaddr.rb | Hajimu Umemoto dan Akinori Musha | BSD |
find.rb | Kazuki Tsujimoto | BSD |
formatter.rb | Yukihiro Matsumoto | BSD |
linenoise | S. Sanfilippo dan P. Noordhuis | BSD |
minicoro.h | Eduardo Bart | MIT |
pp.rb | Yukihiro Matsumoto | BSD |
prettyprint.rb | Yukihiro Matsumoto | BSD |
shellwords.rb | Akinori MUSHA | BSD |
spec/* | Mesin Yard, Inc. | MIT |
uri.rb / uri/* | Akira Yamada | BSD |
version.rb | Mesin Yard, Inc. | MIT |
zlib | Jean-loup Gailly dan Mark Adler | lisensi zlib |
Lihat setiap file di atas untuk mengetahui hak cipta lengkap dan teks lisensi.