Natalie est une implémentation Ruby en cours de réalisation.
Il fournit un compilateur avancé utilisant C++ et gcc/clang comme backend. De plus, le langage dispose d'un REPL qui effectue une compilation incrémentielle.
Il reste beaucoup de travail à faire avant que cela soit utile. S'il vous plaît laissez-moi savoir si vous voulez aider!
Les contributions sont les bienvenues ! Vous pouvez en savoir plus sur la façon dont je travaille sur Natalie via les vidéos des sessions de hacking sur YouTube.
Le plus simple pour commencer dès maintenant serait de trouver une méthode sur un objet qui n’est pas encore implémenté et de la réaliser vous-même ! Jetez également un œil aux bons premiers numéros. (Voir les sections « Création » et « Exécution de tests » ci-dessous pour quelques étapes utiles.)
Nous avons un serveur Discord très silencieux – venez passer du temps !
Natalie est testée sur macOS et Ubuntu Linux. Windows n'est pas encore pris en charge.
Natalie a besoin d'un système Ruby (MRI) pour héberger le compilateur, pour l'instant.
Prérequis :
3.1
à la dernière version du correctif.ruby
et ruby-dev
de votre système.Installez les prérequis ci-dessus sur votre plateforme, puis exécutez :
git clone https://github.com/natalie-lang/natalie
cd natalie
rake
sudo
! Si vous avez déjà commis cette erreur, vous devez sudo rm -rf build
et réessayer./usr/lib/ruby
, ou un autre chemin qui nécessiterait root, alors vous avez plusieurs options :rbenv version
pour voir quelle version est actuellement sélectionnée. Exécutez rbenv shell
suivi d'une version pour sélectionner cette version. mkdir -p ~/gems
export GEM_HOME=~/gems
bundler
manquant, votre système d'exploitation ne l'a probablement pas installé avec Ruby. Vous pouvez exécuter gem install bundler
pour l'obtenir. REPL :
bin/natalie
Exécutez un script Ruby :
bin/natalie examples/hello.rb
Compilez un fichier en exécutable :
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
Pour exécuter un test (ou une spécification), vous pouvez l'exécuter comme un script Ruby normal :
bin/natalie spec/core/string/strip_spec.rb
Cela exécutera les tests et vous indiquera s'il y a des échecs.
Si vous souhaitez exécuter tous les tests que nous espérons réussir, vous pouvez exécuter :
rake test
Enfin, si vous devez exécuter une poignée de tests localement, vous pouvez utiliser le script d'assistance test/runner.rb
:
bin/natalie test/runner.rb test/natalie/if_test.rb test/natalie/loop_test.rb
Les fichiers dans spec/
proviennent de l'excellent projet ruby/spec, qui est un dépôt de fichiers de test organisé par la communauté que toute implémentation de Ruby peut utiliser pour comparer sa conformité à ce que fait MRI (Matz's Ruby Interpreter). Nous copions les spécifications au fur et à mesure que nous implémentons la partie du langage qu'elles couvrent.
Tout ce qui est en test/
est ce que nous avons écrit en travaillant sur Natalie. Il s'agit de tests qui nous ont aidé à amorcer certaines parties du langage et/ou qui n'ont pas été couverts autant que nous le souhaiterions par les spécifications officielles de Ruby. Nous l'utilisons pour compléter les spécifications dans spec/
.
Natalie est protégée par copyright 2023, Tim Morgan et ses contributeurs. Natalie est titulaire d'une licence MIT ; voir le fichier LICENSE
dans ce répertoire pour le texte intégral.
Certaines parties de ce programme sont copiées à partir d'autres sources et les droits d'auteur appartiennent au propriétaire respectif. Ces avis de droit d'auteur se trouvent soit en haut du fichier respectif, dans le même répertoire avec un nom comme LICENSE
, ou les deux.
fichier(s) | droit d'auteur | licence |
---|---|---|
benchmark.rb | Jeton | BSD |
bigint.{h,c} | 983 | Annuler la licence |
cgi.rb / cgi/* | Wakou Aoyama | BSD |
crypt.{h,c} | Les Régents de l'Univ. de Cali. | BSD |
delegate.rb | Yukihiro Matsumoto | BSD |
dtoa.c | David M. Gay, Lucent Technologies | permissif personnalisé |
erb/util.rb | Masatoshi SEKI | BSD |
ipaddr.rb | Hajimu Umemoto et Akinori Musha | BSD |
find.rb | Kazuki Tsujimoto | BSD |
formatter.rb | Yukihiro Matsumoto | BSD |
linenoise | S. Sanfilippo et P. Noordhuis | BSD |
minicoro.h | Eduardo Bart | MIT |
pp.rb | Yukihiro Matsumoto | BSD |
prettyprint.rb | Yukihiro Matsumoto | BSD |
shellwords.rb | Akinori MUSHA | BSD |
spec/* | Moteur Yard, Inc. | MIT |
uri.rb / uri/* | Akira Yamada | BSD |
version.rb | Moteur Yard, Inc. | MIT |
zlib | Jean-loup Gailly et Mark Adler | licence zlib |
Consultez chaque fichier ci-dessus pour connaître le texte complet des droits d’auteur et de la licence.