«Отсутствует или неверная версия зависимости» после перекомпиляции nqp - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь научиться самостоятельно отлаживать rakudo и nqp .Итак, это моя первая попытка:

cd $HOME/debug
git clone https://github.com/rakudo/rakudo.git
cd rakudo
perl Configure.pl --gen-moar --gen-nqp --backends=moar
make
make install # installs into ./install/bin
export PATH=${PWD}/install/bin:$PATH
export PATH=${PWD}/install/share/perl6/site/bin:$PATH
# Testing executable:
perl6 --version
# This is Rakudo version 2018.12-256-g9517c3779 built on MoarVM version 2018.12-36-g34fac5f4e
# implementing Perl 6.d.
# 
# Now modifying an nqp file:
cd nqp
# Change a file: E.g. : vim src/HLL/Compiler.nqp
# I added a line after line 293 in src/HLL/Compiler.nqp:
#   nqp::say("*** Debugging message: HLL::Compiler::command_eval() ***");
# and save it
make
make install
# Testing perl6 again..
perl6 --version

Последняя команда теперь дает следующее исключение:

Unhandled exception: Missing or wrong version of dependency 'gen/moar/stage2/NQPHLL.nqp' (from 'src/Perl6/Pod.nqp')
   at <unknown>:1  (/home/hakon/debug/rakudo/install/share/nqp/lib/Perl6/Pod.moarvm:<dependencies+deserialize>)
 from src/vm/moar/ModuleLoader.nqp:47  (/home/hakon/debug/rakudo/install/share/nqp/lib/ModuleLoader.moarvm:)
 from src/vm/moar/ModuleLoader.nqp:40  (/home/hakon/debug/rakudo/install/share/nqp/lib/ModuleLoader.moarvm:load_module)
 from <unknown>:1  (/home/hakon/debug/rakudo/install/share/nqp/lib/Perl6/Actions.moarvm:<dependencies+deserialize>)
 from src/vm/moar/ModuleLoader.nqp:47  (/home/hakon/debug/rakudo/install/share/nqp/lib/ModuleLoader.moarvm:)
 from src/vm/moar/ModuleLoader.nqp:40  (/home/hakon/debug/rakudo/install/share/nqp/lib/ModuleLoader.moarvm:load_module)
 from <unknown>:1  (/home/hakon/debug/rakudo/install/share/nqp/lib/Perl6/Grammar.moarvm:<dependencies+deserialize>)
 from src/vm/moar/ModuleLoader.nqp:47  (/home/hakon/debug/rakudo/install/share/nqp/lib/ModuleLoader.moarvm:)
 from src/vm/moar/ModuleLoader.nqp:40  (/home/hakon/debug/rakudo/install/share/nqp/lib/ModuleLoader.moarvm:load_module)
 from <unknown>:1  (/home/hakon/debug/rakudo/install/share/perl6/runtime/perl6.moarvm:<dependencies+deserialize>)
h

Итак, я подумал, может быть, мне нужно запустить make и на rakudo:

cd ..
make

но здесь make завершается с:

/home/hakon/perlbrew/perls/perl-5.29.3/bin/perl5.29.3 tools/build/check-nqp-version.pl /home/hakon/debug/rakudo/install/bin/nqp-m
/home/hakon/debug/rakudo/install/bin/nqp-m tools/build/gen-cat.nqp moar src/vm/moar/ModuleLoaderVMConfig.nqp src/Perl6/ModuleLoader.nqp > gen/moar/ModuleLoader.nqp
/home/hakon/debug/rakudo/install/bin/nqp-m --module-path=blib --target=mbc --output=blib/Perl6/ModuleLoader.moarvm \
    gen/moar/ModuleLoader.nqp
*** Debugging message: HLL::Compiler::command_eval() ***
Confused at line 2, near "*** Debugg"
   at gen/moar/stage2/NQPHLL.nqp:811  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:panic)
 from gen/moar/stage2/NQP.nqp:921  (/home/hakon/debug/rakudo/install/share/nqp/lib/nqp.moarvm:comp_unit)
 from gen/moar/stage2/NQP.nqp:782  (/home/hakon/debug/rakudo/install/share/nqp/lib/nqp.moarvm:TOP)
 from gen/moar/stage2/QRegex.nqp:2300  (/home/hakon/debug/rakudo/install/share/nqp/lib/QRegex.moarvm:parse)
 from gen/moar/stage2/NQPHLL.nqp:2031  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:parse)
 from gen/moar/stage2/NQPHLL.nqp:1951  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:execute_stage)
 from gen/moar/stage2/NQPHLL.nqp:1984  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:run)
 from gen/moar/stage2/NQPHLL.nqp:1976  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:)
 from gen/moar/stage2/NQPHLL.nqp:1971  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:compile)
 from gen/moar/stage2/NQPHLL.nqp:1666  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:eval)
 from gen/moar/stage2/NQPHLL.nqp:1889  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:evalfiles)
 from gen/moar/stage2/NQPHLL.nqp:1849  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:command_eval)
 from gen/moar/stage2/NQPHLL.nqp:1773  (/home/hakon/debug/rakudo/install/share/nqp/lib/NQPHLL.moarvm:command_line)
 from gen/moar/stage2/NQP.nqp:4135  (/home/hakon/debug/rakudo/install/share/nqp/lib/nqp.moarvm:MAIN)
 from gen/moar/stage2/NQP.nqp:1  (/home/hakon/debug/rakudo/install/share/nqp/lib/nqp.moarvm:<mainline>)
 from <unknown>:1  (/home/hakon/debug/rakudo/install/share/nqp/lib/nqp.moarvm:<main>)
 from <unknown>:1  (/home/hakon/debug/rakudo/install/share/nqp/lib/nqp.moarvm:<entry>)
make: *** [Makefile:457: blib/Perl6/ModuleLoader.moarvm] Error 1

1 Ответ

0 голосов
/ 26 января 2019

Сборка Rakudo статически «связана» с библиотеками в сборке NQP, использованной для ее создания, и поэтому Rakudo необходимо будет перестроить после изменения NQP. Хеширование используется, чтобы гарантировать, что неправильная версия зависимости никогда не используется; Если эта ситуация не была обнаружена, существует высокая вероятность очень странных режимов отказа.

Вторая ошибка связана с тем, что сборка Rakudo использует некоторые сценарии NQP для предварительной обработки некоторых исходных файлов, которые затем передаются в NQP компилятора Perl 6. Он использует > для перенаправления вывода в файл. Следовательно, ваш отладочный вывод будет перенаправлен в этот файл, а затем - поскольку он не является допустимым исходным кодом - вызовет ошибку сборки. Решение состоит в том, чтобы всегда производить отладочный вывод вместо stderr, например, используя note.

...