原文地址:C++/Rust 元编程之 BrainFuck 编译器(constexpr/ 过程宏解法)
引子
接上一篇C++ 元编程之 BrainFuck 编译器(模板元解法)挖了个坑:用constexpr方式实现,我发现更容易实现了,代码不到100行搞定,同时也尝试了一下用Rust过程宏来做元编程,最后我会对这两者进行比较。
之前模板元方式解法不支持嵌套循环,同时也不支持输入输出,在这次实现中,支持嵌套循环、输出。
C++版本:
// compile time
constexpr auto res = brain_fuck(R"(
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.
>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
)");
puts(res);
// runtime
if (argc > 1) puts(brain_fuck(argv[1]));
Rust版本:
println!("{}", brain_fuck!(
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.
>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
));
而两者背后实现的算法是一致的。
C++ constexpr解法
其实模板元解法和constexpr解法能力相同,只是实现代价不同,后者更容易实现,写起来就像普通函数一样。运行结果可看:https://