Попытка запустить код в оболочке IOKE приводит к ошибке?

Когда я пытаюсь выполнить код в оболочке IOKE, происходит сбой.

 >ioke
 iik> "Hello World" println
Exception in thread "main" java.lang.NullPointerException
            at ioke.lang.IokeIO$2.activate(IokeIO.java:129)
            at ioke.lang.TypeCheckingNativeMethod.activate(TypeCheckingNativeMethod.java:50)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Message.sendTo(Message.java:999)
            at ioke.lang.Message.evaluateCompleteWithoutExplicitReceiver(Message.java:1145)
            at ioke.lang.Message.getEvaluatedArgument(Message.java:979)
            at ioke.lang.Message.getEvaluatedArgument(Message.java:983)
            at ioke.lang.FlowControlBehavior$9.activate(FlowControlBehavior.java:379)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Locals$1.activate(Locals.java:63)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Message.sendTo(Message.java:999)
            at ioke.lang.Message.evaluateCompleteWith(Message.java:1093)
            at ioke.lang.LexicalBlock.activate(LexicalBlock.java:198)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.LexicalBlock$2.activate(LexicalBlock.java:86)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Message.sendTo(Message.java:1011)
            at ioke.lang.FileSystem$7.activate(FileSystem.java:308)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Message.sendTo(Message.java:999)
            at ioke.lang.Message.evaluateCompleteWithoutExplicitReceiver(Message.java:1145)
            at ioke.lang.ConditionsBehavior$4.activate(ConditionsBehavior.java:342)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Locals$1.activate(Locals.java:63)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Message.sendTo(Message.java:999)
            at ioke.lang.Message.evaluateCompleteWithoutExplicitReceiver(Message.java:1145)
            at ioke.lang.Message.getEvaluatedArgument(Message.java:979)
            at ioke.lang.Message.getEvaluatedArgument(Message.java:983)
            at ioke.lang.FlowControlBehavior$7.activate(FlowControlBehavior.java:298)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Locals$1.activate(Locals.java:63)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Message.sendTo(Message.java:999)
            at ioke.lang.Message.evaluateCompleteWithoutExplicitReceiver(Message.java:1145)
            at ioke.lang.ConditionsBehavior$4.activate(ConditionsBehavior.java:342)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Locals$1.activate(Locals.java:63)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Message.sendTo(Message.java:999)
            at ioke.lang.Message.evaluateCompleteWith(Message.java:1093)
            at ioke.lang.DefaultMethod.activate(DefaultMethod.java:283)
            at ioke.lang.IokeObject.activate(IokeObject.java:1053)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
            at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
            at ioke.lang.IokeObject.perform(IokeObject.java:659)
            at ioke.lang.IokeObject.perform(IokeObject.java:592)
            at ioke.lang.IokeObject.perform(IokeObject.java:522)
            at ioke.lang.Message.sendTo(Message.java:999)
            at ioke.lang.Message.evaluateComplete(Message.java:1066)
            at ioke.lang.Runtime.evaluateString(Runtime.java:525)
            at ioke.lang.Main.main(M

ain.java:149)

Что вызывает это к ошибке? Я использую Windows 10, мои переменные env IOKE_HOME и JAVA_HOME установлены (в противном случае REPL не будет вызываться в первую очередь). Любая помощь будет оценена.

0 ответов

Я подозреваю, что это связано с тем, что Иоке пытается использовать какой-то Java API для получения домашнего каталога пользователя. Я обнаружил, что проблема воспроизводится в Linux при запуске Ioke от имени любого пользователя, у которого нет домашнего каталога, несмотря наHOMEустанавливается переменная окружения. Мне удалось обойти проблему, установивJAVA_OPTS переменная окружения:

$ JAVA_OPTS="-Duser.home=$PWD" ioke

Обратите внимание, что аналогичные проблемы возникают с другими языками программирования на основе Java, такими как Kotlin, и иногда можно применить тот же обходной путь. Очевидно, что кто-то принял очень плохое дизайнерское решение глубоко в API Java.

Обратите внимание, что Ioke полностью заброшен с 2011 года и вряд ли получит какие-либо обновления или поддержку в будущем.

Другие вопросы по тегам