gpt4 book ai didi

functional-programming - 用 OCaml 等函数式语言实现直接线程解释器

转载 作者:行者123 更新时间:2023-12-04 06:49:00 24 4
gpt4 key购买 nike

在 C/C++ 中,您可以使用函数指针数组实现直接线程解释器。该数组代表您的程序 - 一组操作。每个操作函数都必须以调用数组中的下一个函数结束,例如:

void op_plus(size_t pc, uint8_t* data) {
*data += 1;
BytecodeArray[pc+1](pc+1, data); //call the next operation in the array
}

BytecodeArray 是一个函数指针数组。如果我们有一个包含这些 op_plus 操作的数组,那么数组的长度将决定我们增加数据内容的频率。 (当然,您需要添加某种终止操作作为数组中的最后一个操作)。

如何在 OCaml 中实现这样的东西?我可能试图从字面上翻译这段代码:我正在使用 C++ 中的 OCaml 函数数组。问题在于我一直以类似的方式结束:
let op_plus pc data = Printf.printf "pc: %d, data_i: %d \n" pc data;
let f = (op_array.(pc+1)) in
f (pc+1) (data+1) ;;

其中 op_array 是在上面的作用域中定义的 Array,然后重新定义它以填充一堆 op_plus 函数……但是,op_plus 函数使用了之前的 op_array 定义。这是一个鸡和蛋的问题。

最佳答案

还有一个选项(如果事先知道大小) - 最初用 void 指令填充数组:

let op_array = Array.create size (fun _ _ -> assert false)
let op_plus = ...
let () = op_array.(0) <- op_plus; ...

关于functional-programming - 用 OCaml 等函数式语言实现直接线程解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3605196/

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