Natalie es una implementación de Ruby en proceso.
Proporciona un compilador anticipado que utiliza C++ y gcc/clang como backend. Además, el lenguaje tiene un REPL que realiza compilación incremental.
Queda mucho trabajo por hacer antes de que esto sea útil. ¡Avísame si quieres ayudar!
¡Las contribuciones son bienvenidas! Puede obtener más información sobre cómo trabajo con Natalie a través de los videos de las sesiones de piratería en YouTube.
¡La forma más fácil de comenzar ahora mismo sería encontrar un método en un objeto que aún no esté implementado y crearlo usted mismo! Eche también un vistazo a los buenos primeros números. (Consulte las secciones "Construcción" y "Ejecución de pruebas" a continuación para conocer algunos pasos útiles).
Tenemos un servidor de Discord muy silencioso: ¡ven y pasa el rato!
Natalie está probada en macOS y Ubuntu Linux. Windows aún no es compatible.
Natalie necesita un sistema Ruby (MRI) para alojar el compilador, por ahora.
Requisitos previos:
3.1
con la última versión del parche.ruby
y ruby-dev
de su sistema.Instale los requisitos previos anteriores en su plataforma, luego ejecute:
git clone https://github.com/natalie-lang/natalie
cd natalie
rake
sudo
! Si ya cometiste ese error, entonces deberías sudo rm -rf build
e intentarlo nuevamente./usr/lib/ruby
u otra ruta que requiera root, entonces tiene un par de opciones:rbenv version
para ver qué versión está seleccionada actualmente. Ejecute rbenv shell
seguido de una versión para seleccionar esa versión. mkdir -p ~/gems
export GEM_HOME=~/gems
bundler
, entonces su sistema operativo probablemente no lo instaló junto con Ruby. Puede ejecutar gem install bundler
para obtenerlo. REPLACEAR:
bin/natalie
Ejecute un script Ruby:
bin/natalie examples/hello.rb
Compile un archivo en un ejecutable:
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 ejecutar una prueba (o especificación), puede ejecutarla como un script Ruby normal:
bin/natalie spec/core/string/strip_spec.rb
Esto ejecutará las pruebas y le indicará si hay alguna falla.
Si desea ejecutar todas las pruebas que esperamos pasar, puede ejecutar:
rake test
Por último, si necesita ejecutar algunas pruebas localmente, puede usar el script auxiliar test/runner.rb
:
bin/natalie test/runner.rb test/natalie/if_test.rb test/natalie/loop_test.rb
Los archivos en spec/
provienen del excelente proyecto ruby/spec, que es un repositorio de archivos de prueba curado por la comunidad que cualquier implementación de Ruby puede usar para comparar su conformidad con lo que hace MRI (Ruby Interpreter de Matz). Copiamos las especificaciones a medida que implementamos la parte del lenguaje que cubren.
Todo lo que hay en test/
son cosas que escribimos mientras trabajábamos en Natalie. Estas son pruebas que nos ayudaron a arrancar ciertas partes del lenguaje y/o no estaban cubiertas tanto como nos gustaría por las especificaciones oficiales de Ruby. Usamos esto para complementar las especificaciones en spec/
.
Natalie tiene derechos de autor 2023, Tim Morgan y colaboradores. Natalie tiene licencia MIT; consulte el archivo LICENSE
en este directorio para obtener el texto completo.
Algunas partes de este programa están copiadas de otras fuentes y los derechos de autor pertenecen a sus respectivos propietarios. Dichos avisos de derechos de autor se encuentran en la parte superior del archivo respectivo, en el mismo directorio con un nombre como LICENSE
, o ambos.
archivo(s) | derechos de autor | licencia |
---|---|---|
benchmark.rb | token | BSD |
bigint.{h,c} | 983 | Sin licencia |
cgi.rb / cgi/* | Wako Aoyama | BSD |
crypt.{h,c} | Los Regentes de la Univ. de Cali. | BSD |
delegate.rb | Yukihiro Matsumoto | BSD |
dtoa.c | David M. Gay, Tecnologías Lucent | permisivo personalizado |
erb/util.rb | Masatoshi SEKI | BSD |
ipaddr.rb | Hajimu Umemoto y Akinori Musha | BSD |
find.rb | Kazuki Tsujimoto | BSD |
formatter.rb | Yukihiro Matsumoto | BSD |
linenoise | S. Sanfilippo y P. Noordhuis | BSD |
minicoro.h | Eduardo Bart | MIT |
pp.rb | Yukihiro Matsumoto | BSD |
prettyprint.rb | Yukihiro Matsumoto | BSD |
shellwords.rb | Akinori MUSHA | BSD |
spec/* | Patio de motores, Inc. | MIT |
uri.rb / uri/* | Akira Yamada | BSD |
version.rb | Patio de motores, Inc. | MIT |
zlib | Jean-loup Gailly y Mark Adler | licencia zlib |
Consulte cada archivo anterior para obtener el texto completo de derechos de autor y licencia.