Natalie ist eine in Arbeit befindliche Ruby-Implementierung.
Es bietet einen zeitnahen Compiler, der C++ und gcc/clang als Backend verwendet. Außerdem verfügt die Sprache über eine REPL, die eine inkrementelle Kompilierung durchführt.
Es bleibt noch viel zu tun, bevor dies nützlich ist. Bitte lassen Sie mich wissen, wenn Sie helfen möchten!
Beiträge sind willkommen! In den Hacking-Session-Videos auf YouTube können Sie mehr darüber erfahren, wie ich an Natalie arbeite.
Der einfachste Weg, sofort loszulegen, wäre, eine Methode für ein Objekt zu finden, das noch nicht implementiert ist, und sie selbst zu erstellen! Schauen Sie sich auch gute Erstausgaben an. (Einige hilfreiche Schritte finden Sie weiter unten in den Abschnitten „Erstellen“ und „Tests ausführen“.)
Wir haben einen sehr ruhigen Discord-Server – kommen Sie vorbei und hängen Sie ab!
Natalie wird auf macOS und Ubuntu Linux getestet. Windows wird noch nicht unterstützt.
Natalie benötigt vorerst einen System-Ruby (MRI), um den Compiler zu hosten.
Voraussetzungen:
3.1
an die neueste Patch-Version anzupassen.ruby
und ruby-dev
von Ihrem System.Installieren Sie die oben genannten Voraussetzungen auf Ihrer Plattform und führen Sie dann Folgendes aus:
git clone https://github.com/natalie-lang/natalie
cd natalie
rake
sudo
! Wenn Sie diesen Fehler bereits gemacht haben, sollten Sie sudo rm -rf build
ausführen und es erneut versuchen./usr/lib/ruby
oder einen anderen Pfad, für den Root erforderlich wäre, nicht möglich ist, haben Sie mehrere Möglichkeiten:rbenv version
aus, um zu sehen, welche Version aktuell ausgewählt ist. Führen Sie rbenv shell
gefolgt von einer Version aus, um diese Version auszuwählen. mkdir -p ~/gems
export GEM_HOME=~/gems
bundler
fehlt, hat Ihr Betriebssystem ihn wahrscheinlich nicht zusammen mit Ruby installiert. Sie können gem install bundler
ausführen, um ihn zu erhalten. ERSATZ:
bin/natalie
Führen Sie ein Ruby-Skript aus:
bin/natalie examples/hello.rb
Kompilieren Sie eine Datei in eine ausführbare Datei:
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
Um einen Test (oder eine Spezifikation) auszuführen, können Sie ihn wie ein normales Ruby-Skript ausführen:
bin/natalie spec/core/string/strip_spec.rb
Dadurch werden die Tests ausgeführt und Sie werden darüber informiert, ob Fehler vorliegen.
Wenn Sie alle Tests ausführen möchten, die wir voraussichtlich bestehen werden, können Sie Folgendes ausführen:
rake test
Wenn Sie schließlich eine Handvoll Tests lokal ausführen müssen, können Sie das Hilfsskript test/runner.rb
verwenden:
bin/natalie test/runner.rb test/natalie/if_test.rb test/natalie/loop_test.rb
Die Dateien in spec/
stammen aus dem ausgezeichneten Ruby/Spec-Projekt, einem von der Community kuratierten Repo von Testdateien, mit denen jede Ruby-Implementierung ihre Konformität mit der Leistung von MRI (Ruby Interpreter von Matz) vergleichen kann. Wir kopieren Spezifikationen, während wir den Teil der Sprache implementieren, den sie abdecken.
Alles im test/
ist Zeug, das wir während der Arbeit an Natalie geschrieben haben. Hierbei handelt es sich um Tests, die uns dabei geholfen haben, bestimmte Teile der Sprache zu booten, und/oder die von den offiziellen Ruby-Spezifikationen nicht so umfassend abgedeckt wurden, wie wir es gerne hätten. Wir verwenden dies, um die Spezifikationen in spec/
zu ergänzen.
Natalie unterliegt dem Urheberrecht 2023, Tim Morgan und Mitwirkende. Natalie ist unter der MIT-Lizenz lizenziert; Den vollständigen Text finden Sie in der LICENSE
Datei in diesem Verzeichnis.
Einige Teile dieses Programms wurden aus anderen Quellen kopiert und das Urheberrecht liegt beim jeweiligen Eigentümer. Solche Copyright-Hinweise befinden sich entweder oben in der jeweiligen Datei, im selben Verzeichnis mit einem Namen wie LICENSE
oder in beiden.
Datei(en) | Copyright | Lizenz |
---|---|---|
benchmark.rb | Gotoken | BSD |
bigint.{h,c} | 983 | Ohne Lizenz |
cgi.rb / cgi/* | Wakou Aoyama | BSD |
crypt.{h,c} | Die Regenten der Univ. von Cali. | BSD |
delegate.rb | Yukihiro Matsumoto | BSD |
dtoa.c | David M. Gay, Lucent Technologies | Brauch freizügig |
erb/util.rb | Masatoshi SEKI | BSD |
ipaddr.rb | Hajimu Umemoto und Akinori Musha | BSD |
find.rb | Kazuki Tsujimoto | BSD |
formatter.rb | Yukihiro Matsumoto | BSD |
linenoise | S. Sanfilippo und P. Noordhuis | BSD |
minicoro.h | Eduardo Bart | MIT |
pp.rb | Yukihiro Matsumoto | BSD |
prettyprint.rb | Yukihiro Matsumoto | BSD |
shellwords.rb | Akinori MUSHA | BSD |
spec/* | Engine Yard, Inc. | MIT |
uri.rb / uri/* | Akira Yamada | BSD |
version.rb | Engine Yard, Inc. | MIT |
zlib | Jean-Loup Gailly und Mark Adler | zlib-Lizenz |
Den vollständigen Urheberrechts- und Lizenztext finden Sie in jeder Datei oben.