Natalie — это реализация Ruby, находящаяся в стадии разработки.
Он предоставляет современный компилятор, использующий C++ и gcc/clang в качестве серверной части. Кроме того, в языке имеется REPL, выполняющий инкрементальную компиляцию.
Еще предстоит много работы, прежде чем это станет полезным. Пожалуйста, дайте мне знать, если вы хотите помочь!
Вклады приветствуются! Вы можете узнать больше о том, как я работаю над Натали, из видеороликов о сеансах взлома на YouTube.
Самый простой способ начать прямо сейчас — найти метод для объекта, который еще не реализован, и создать его самостоятельно! Также обратите внимание на хорошие первые выпуски. (Некоторые полезные шаги см. в разделах «Создание» и «Выполнение тестов» ниже.)
У нас очень тихий сервер Discord — приходите и общайтесь!
Натали протестирована на macOS и Ubuntu Linux. Windows пока не поддерживается.
Натали на данный момент требуется система Ruby (MRI) для размещения компилятора.
Предпосылки:
3.1
с последним выпуском патча.ruby
и ruby-dev
из вашей системы.Установите вышеуказанные необходимые условия на свою платформу, затем запустите:
git clone https://github.com/natalie-lang/natalie
cd natalie
rake
sudo
! Если вы уже допустили эту ошибку, вам следует выполнить sudo rm -rf build
и повторить попытку./usr/lib/ruby
или по другому пути, требующему root, у вас есть несколько вариантов:rbenv version
чтобы увидеть, какая версия выбрана в данный момент. Запустите rbenv shell
а затем версию, чтобы выбрать эту версию. mkdir -p ~/gems
export GEM_HOME=~/gems
bundler
, возможно, ваша операционная система не установила его вместе с Ruby. Вы можете запустить gem install bundler
чтобы получить его. РЕПЛ:
bin/natalie
Запустите скрипт Ruby:
bin/natalie examples/hello.rb
Скомпилируйте файл в исполняемый файл:
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
Чтобы запустить тест (или спецификацию), вы можете запустить его как обычный скрипт Ruby:
bin/natalie spec/core/string/strip_spec.rb
Это запустит тесты и сообщит вам, есть ли какие-либо сбои.
Если вы хотите запустить все тесты, которые мы ожидаем пройти, вы можете запустить:
rake test
Наконец, если вам нужно запустить несколько тестов локально, вы можете использовать вспомогательный скрипт test/runner.rb
:
bin/natalie test/runner.rb test/natalie/if_test.rb test/natalie/loop_test.rb
Файлы в spec/
взяты из замечательного проекта Ruby/spec, который представляет собой репозиторий тестовых файлов, курируемый сообществом, который любая реализация Ruby может использовать для сравнения ее соответствия тому, что делает MRI (интерпретатор Ruby от Matz). Мы копируем спецификации по мере реализации той части языка, которую они охватывают.
Все, что находится в test/
— это то, что мы написали во время работы над Натали. Это тесты, которые помогли нам загрузить определенные части языка и/или не были охвачены в должной степени официальными спецификациями Ruby. Мы используем это для дополнения спецификаций в spec/
.
Авторские права Натали принадлежат Тиму Моргану и авторам, 2023 г. Натали имеет лицензию MIT; Полный текст см. в файле LICENSE
в этом каталоге.
Некоторые части этой программы скопированы из других источников, авторские права принадлежат соответствующему владельцу. Такие уведомления об авторских правах находятся либо в верхней части соответствующего файла, либо в том же каталоге с именем типа LICENSE
, либо в обоих случаях.
файл(ы) | авторское право | лицензия |
---|---|---|
benchmark.rb | Готокен | БСД |
bigint.{h,c} | 983 | Отменить лицензию |
cgi.rb / cgi/* | Вако Аояма | БСД |
crypt.{h,c} | Регенты Univ. из Кали. | БСД |
delegate.rb | Юкихиро Мацумото | БСД |
dtoa.c | Дэвид М. Гей, Lucent Technologies | пользовательское разрешение |
erb/util.rb | Масатоши СЭКИ | БСД |
ipaddr.rb | Хаджиму Умэмото и Акинори Муша | БСД |
find.rb | Кадзуки Цудзимото | БСД |
formatter.rb | Юкихиро Мацумото | БСД |
linenoise | С. Санфилиппо и П. Ноордхейс | БСД |
minicoro.h | Эдуардо Барт | Массачусетский технологический институт |
pp.rb | Юкихиро Мацумото | БСД |
prettyprint.rb | Юкихиро Мацумото | БСД |
shellwords.rb | Акинори МУША | БСД |
spec/* | Двигательный двор, ООО | Массачусетский технологический институт |
uri.rb / uri/* | Акира Ямада | БСД |
version.rb | Двигательный двор, ООО | Массачусетский технологический институт |
zlib | Жан-Лу Гайи и Марк Адлер | лицензия zlib |
Полный текст авторских прав и лицензий см. в каждом файле выше.