haxelib run не может запустить новые потоки?


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

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

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

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 run: https://lib.haxe.org/documentation/using-haxelib/#run

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

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

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

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

1 4

1 ответ:

Из haxelib docs, которые вы связали :

Библиотеки

С помощником 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 называется "ивала" в это выпуск .