提交库到Boost的提示?

时间:2010-06-16 21:02:58

标签: c++ boost c++11

夏天即将到来,我和一群朋友正在为此做好准备:)

我们决定构建一个编译时任意精度的无符号整数。我们想为库提供一组整数算法(函数)。我们已经看到了对此类库(SoC2010C++0x Standard Library wishlist)的一些请求。此外,通常会请求常规运行时bigint,但我们不想进入内存管理的麻烦。这个想法来自一个名为TTMath的库,不幸的是这个库只适用于特定平台,因为Assembly在库中被广泛使用。我们想编写一个标准库,具体取决于C ++标准库和Boost。此外,我们希望在当前编译器中使用可用的C ++ 0x工具,如用户定义的文字和其他。这在技术上会使图书馆暂时不标准,但我们认为新标准是官方的是时间问题。

您对整个过程的提示,包括设计,实施,文档,图书馆的可维护性,都非常受欢迎。我们是一群学生和应届毕业生,他们在夏天寻找有趣的东西,但我们看到Boost充满了大师,我们不想忘记太明显的事情。我们正在线上进行通信,因此没有共享的白板:(

以下是使用此类库的示例:

typedef our_namespace::uint<512> uint512_t;
// declaring an unsigned int with 512 bits width.
// After that the user is supposed to deal with it just like the native types.

谢谢,

6 个答案:

答案 0 :(得分:5)

另外两个提示:

a)在Boost环境中,规划纯C ++ 0x库似乎不是一个好主意。 Boost的目标之一是提供跨平台/交叉编译库。通常对使用C ++ 0x功能感兴趣的Boost作者在使用C ++ 0x编译器时作为替代方案。为此,Boost预定义了一整套预处理器宏,每个宏对应一个C ++ 0x特性。

b)请考虑使用您的想法写入Boost开发列表,概述您计划的库的功能集。你可以在那里问同样的问题,顺便说一下。如果你这样做,我相信你会得到很多有用的答案和建议。

答案 1 :(得分:4)

首先,您应该阅读Boost Library Requirements and Guidelines

答案 2 :(得分:2)

我的提示:访问提升网站并按照回答确切问题的说明进行操作。

答案 3 :(得分:2)

  

这个想法来自图书馆   不幸的是,这称为TTMath   图书馆仅适用于特定的   平台因为使用了Assembly   广泛地在图书馆。

您是否计划实施完整的algebric运营支持? (加法,乘法,平方根等)。

如果你这样做,也请查看CryptoPP::Integer class。它是一个功能齐全的任意精度整数类,支持完整的算术运算。它也是跨平台的。

它的问题在于它考虑了复杂的代数(用于加密操作),所以它不仅仅是一个通用的整数类。

它还支持BER / DER和OpenPGP编码和解码作为类的一部分,以及许多其他操作,这些操作可能不应该是通用整数实现的一部分。

  

您对整个过程的暗示   包括设计,实施,   文档,可维护   图书馆不仅仅是欢迎光临。

您还可以研究开发一个十进制类(类似于c# decimal),类似于float / double,但不会在溢出时失去精度。数学部分至少会简单得多。

答案 4 :(得分:2)

请实施高效的modpow功能。类似于Java的[BigInteger.modPow] [1]

当您开始使用时,RSA加密非常简单。两个素数和一些常规数学运算符。使用标准C ++实现&lt; 32位加密是微不足道的。

这些操作中的一对操作可能非常耗费CPU,然后是一个模数。由于RSA被广泛使用,因此进行了大量研究,并且可以有效地组合这两个操作。新操作称为modpow

因此,给定一个具有高效modpow的高效的abitrary精度迭代库,可以简单地实现全强度RSA。完整的加密解决方案还需要生成一些随机素数,但这是一个更大的范围。

[1]:http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html#modPow(java.math.BigInteger,java.math.BigInteger)

答案 5 :(得分:1)

从这种事情的动机开始。我很好奇有什么应用程序。通过“编译时”我假设你的意思是模板元编程解决方案,对吗?

这听起来像是一个有趣的项目,但可能没有用作提升的一部分(或者可能有用......你必须提供那些重要的细节。)