haxelib run не может начать новые темы?

Получение исключения при попытке использования haxelib run команда

Main.hx:5: starting                                                                                     
D:\HaxeToolkit\haxe\std/neko/vm/Thread.hx:54: characters 20-71 : Can't create thread from within a macro
D:\HaxeToolkit\haxe\lib\haxelib-test/0,0,1/src/Main.hx:6: characters 29-48 : Called from                
?:1: characters 1048575-8796094070782 : Called from                                                     
Aborted

Завернутый хак-код:

import neko.vm.Thread;

class Main {
    static function main() {
        trace("starting");
        var commandsThread = Thread.create(read);
        trace("ending");
    }

    static function read() {
        trace("new thread");
    }
}

Без функциональности потока все работает хорошо.

Отредактировано:

Я запускаю этот код с помощью команды запуска haxelib: https://lib.haxe.org/documentation/using-haxelib/

haxelib install haxelib-test.zip
haxelib run haxelib-test

Перед этим нужно создать haxelib.json и папка почтового индекса https://lib.haxe.org/documentation/creating-a-haxelib-package/ Mine haxelib.json

{
    "name": "haxelib-test",
    "license": "MIT",
    "tags": [],
    "description": "",
    "version": "0.0.1",
    "classPath": "src/",
    "main": "Main"
}

(Следите за свойствами classPath, мой основной класс /src/Main.hx)

1 ответ

Решение

Из документов Haxelib вы связали:

Библиотеки с любым run.n помощник или основной класс, определенный в haxelib.json, может быть выполнен с использованием haxelib run

Так как вы предоставляете main класс, Haxelib пытается запустить ваш код во встроенном интерпретаторе Haxe (с --interp аргумент командной строки). К сожалению, интерпретатор не поддерживает потоки. Он в основном используется для макросов, поэтому сообщение об ошибке может быть немного запутанным.

Вы можете просто обойти это, составив run.n файл и упаковка, которые вместе с вашей библиотекой, поэтому сценарий выполняется в Neko VM (которая входит в комплект Haxe):

haxe -main Main -neko run.n

Примечание: для разработки и тестирования может быть удобнее создать каталог разработки с haxelib dev, так что вам не нужно перепаковывать и устанавливать .zip каждый раз, когда вы что-то меняете.

В этом выпуске обсуждается поддержка потоков для нового макро-интерпретатора Haxe 4 под названием "eval".

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