Natalie é uma implementação Ruby em andamento.
Ele fornece um compilador avançado usando C++ e gcc/clang como back-end. Além disso, a linguagem possui um REPL que realiza compilação incremental.
Ainda há muito trabalho a fazer antes que isso seja útil. Por favor, deixe-me saber se você quiser ajudar!
Contribuições são bem-vindas! Você pode aprender mais sobre como trabalho com Natalie nos vídeos da sessão de hacking no YouTube.
A maneira mais fácil de começar agora seria encontrar um método em um objeto que ainda não esteja implementado e fazer você mesmo! Também dê uma olhada nas boas primeiras questões. (Consulte as seções 'Construindo' e 'Executando Testes' abaixo para obter algumas etapas úteis.)
Temos um servidor Discord muito silencioso – venha e divirta-se!
Natalie foi testada em macOS e Ubuntu Linux. O Windows ainda não é compatível.
Natalie requer um sistema Ruby (MRI) para hospedar o compilador, por enquanto.
Pré-requisitos:
3.1
com a versão de patch mais recente.ruby
e ruby-dev
do seu sistema.Instale os pré-requisitos acima em sua plataforma e execute:
git clone https://github.com/natalie-lang/natalie
cd natalie
rake
sudo
! Se você já cometeu esse erro, sudo rm -rf build
e tente novamente./usr/lib/ruby
ou outro caminho que exija root, então você tem algumas opções:rbenv version
para ver qual versão está selecionada no momento. Execute rbenv shell
seguido por uma versão para selecionar essa versão. mkdir -p ~/gems
export GEM_HOME=~/gems
bundler
, então seu sistema operacional provavelmente não o instalou junto com o Ruby. Você pode executar gem install bundler
para obtê-lo. REPL:
bin/natalie
Execute um script Ruby:
bin/natalie examples/hello.rb
Compile um arquivo em um executável:
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
Para executar um teste (ou especificação), você pode executá-lo como um script Ruby normal:
bin/natalie spec/core/string/strip_spec.rb
Isso executará os testes e informará se houver alguma falha.
Se quiser executar todos os testes que esperamos passar, você pode executar:
rake test
Por último, se precisar executar alguns testes localmente, você pode usar o script auxiliar test/runner.rb
:
bin/natalie test/runner.rb test/natalie/if_test.rb test/natalie/loop_test.rb
Os arquivos em spec/
vêm do excelente projeto Ruby/spec, que é um repositório de arquivos de teste com curadoria da comunidade que qualquer implementação de Ruby pode usar para comparar sua conformidade com o que o MRI (Matz's Ruby Interpreter) faz. Copiamos as especificações à medida que implementamos a parte da linguagem que elas cobrem.
Tudo em test/
são coisas que escrevemos enquanto trabalhávamos em Natalie. Esses são testes que nos ajudaram a inicializar certas partes da linguagem e/ou não foram cobertos tanto quanto gostaríamos pelas especificações oficiais do Ruby. Usamos isso para complementar as especificações em spec/
.
Natalie tem copyright 2023, Tim Morgan e colaboradores. Natalie é licenciada sob a licença MIT; consulte o arquivo LICENSE
neste diretório para obter o texto completo.
Algumas partes deste programa são copiadas de outras fontes e os direitos autorais pertencem ao respectivo proprietário. Esses avisos de direitos autorais estão no topo do respectivo arquivo, no mesmo diretório com um nome como LICENSE
ou ambos.
arquivo(s) | direitos autorais | licença |
---|---|---|
benchmark.rb | Gotoken | BSD |
bigint.{h,c} | 983 | Não licenciar |
cgi.rb / cgi/* | Wakou Aoyama | BSD |
crypt.{h,c} | Os Regentes da Univ. de Cáli. | BSD |
delegate.rb | Yukihiro Matsumoto | BSD |
dtoa.c | David M. Gay, Lucent Technologies | permissivo personalizado |
erb/util.rb | Masatoshi SEKI | BSD |
ipaddr.rb | Hajimu Umemoto e Akinori Musha | BSD |
find.rb | Kazuki Tsujimoto | BSD |
formatter.rb | Yukihiro Matsumoto | BSD |
linenoise | S. Sanfilippo e P. Noordhuis | BSD |
minicoro.h | Eduardo Bart | MIT |
pp.rb | Yukihiro Matsumoto | BSD |
prettyprint.rb | Yukihiro Matsumoto | BSD |
shellwords.rb | Akinori MUSHA | BSD |
spec/* | Motor Yard, Inc. | MIT |
uri.rb / uri/* | Akira Yamada | BSD |
version.rb | Motor Yard, Inc. | MIT |
zlib | Jean-loup Gailly e Mark Adler | licença zlib |
Veja cada arquivo acima para obter o texto completo dos direitos autorais e da licença.