C++/Rust 元编程之 BrainFuck 编译器(constexpr/ 过程宏解法)

原文地址: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://

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值