前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust 日报】2020-05-01 tco: 用过程宏实现的尾递归优化能力

【Rust 日报】2020-05-01 tco: 用过程宏实现的尾递归优化能力

作者头像
MikeLoveRust
发布2020-05-14 16:47:04
5280
发布2020-05-14 16:47:04
举报

发布:RustCrypto: p256k256 v0.2.0: 纯 Rust NIST P-256 和 secp256k1 曲线算法

这个版本用 Rust 实现了如下两个曲线算法。

• p256: NIST P-256

代码语言:javascript
复制
  □ GitHub: https://github.com/RustCrypto/elliptic-curves/tree/master/p256
  □ crates.io: https://crates.io/crates/p256
  □ docs.rs: https://docs.rs/p256/

• k256: secp256k1 (as used by Bitcoin, Ethereum, etc)

代码语言:javascript
复制
  □ GitHub: https://github.com/RustCrypto/elliptic-curves/tree/master/k256
  □ crates.io: https://crates.io/crates/k256
  □ docs.rs: https://docs.rs/k256/

tco: 用过程宏实现的尾递归优化能力

这个思路很清奇——用属性宏来实现尾递归调用优化。类似于下面这个样子:

代码语言:javascript
复制
代码语言:javascript
复制
#[tco::rewrite]
fn fac_with_acc(n: u128, acc: u128) -> u128 {
    if n > 1 {
        fac_with_acc(n - 1, acc * n)
    } else {
        acc
    }
}
优化后的代码为:fn fac_with_acc(n: u128, acc: u128) -> u128 {
    let mut n = n;
    let mut acc = acc;
    '__tco_loop: loop {
        return {
            if n > 1 {
                {
                    let __tco_0 = (n - 1, acc * n);
                    n = __tco_0.0;
                    acc = __tco_0.1;
                    continue '__tco_loop;
                }
            } else {
                acc
            }
        };
    }
}
代码语言:javascript
复制

仓库:https://github.com/samsieber/tco

-- Edit by Rust 日报小组 Mike

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • tco: 用过程宏实现的尾递归优化能力
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档