gpt4 book ai didi

java - 为什么 Truffle DSL 添加 @Specialization 注解时会出错?

转载 作者:行者123 更新时间:2023-12-01 16:31:09 24 4
gpt4 key购买 nike

我正在尝试将 Truffle 框架实现为现有语言 ( INI ),并且我成功地运行了具有基本功能和 Truffle 的语言。但是,当我尝试向我的方法添加 @Specialization 注释时,编译器崩溃并输出以下消息:

src/main/java/ini/eval/function/PrintFunction.java:[17,17] 未找到足够的子节点声明。请使用附加的 @NodeChild 注释来注释节点类,或删除所有不提供所有评估值的执行方法。以下执行方法不提供预期签名大小 1 的所有评估值:[executeGeneric(VirtualFrame)、executeNumber(VirtualFrame)、executeBoolean(VirtualFrame)、executeChar(VirtualFrame)、executeString(VirtualFrame)]

但是,当我删除 @Specialization 注释时,它工作正常

这是我迄今为止唯一进行特化的类(class):

@NodeInfo(shortName = "print")
@GenerateNodeFactory()
public abstract class PrintFunction extends BuiltInExecutable {

public PrintFunction(IniParser parser, String name, String[] parameterNames) {
super();
}

private static final PrintStream out = System.out;

@Specialization
public Number print(Number value) {
doPrint(value);
return value;
}

@TruffleBoundary
private static void doPrint(Number value) {
out.print(value);
}

... More specializations for other types (boolean, and String)

@Specialization
public Object print(Object value) {
doPrint(value);
return value;
}

@TruffleBoundary
private static void doPrint(Object value) {
out.print(value);
}
}

所有节点的父类(super class) (AstElement) 具有方法executeGeneric(VirtaulFrame) 和executeNumber、executeBoolean、executeChar 和executeString。所以PrintFunction类也有这些方法

那么,您认为真正导致错误消息的原因是什么,或者至少,它是什么意思?

我从使用 Truffle 实现的 Mumbler Language 和 SimpleLanguage 中获取灵感。

最佳答案

我从 Graal Slack 上的一位伟人那里得到的答案

需要来自某个地方。 Truffle 希望您有一种表达式形式作为打印函数的子节点。标准方法是在类定义中添加类似 @NodeChild(value = "receiver", type = ExpressionNode.class) 的内容Stefan Marr 是 10 分钟如果 value 不应该来自子节点,即子节点,您可以定义一个抽象的 execute(Object value) 方法,DLS 将为其实现您使用特化

关于java - 为什么 Truffle DSL 添加 @Specialization 注解时会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62038918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com