2010-06-16 15 views
15

Llega el verano, y un grupo de amigos y yo nos estamos preparando :)¿Sugerencias para enviar una biblioteca a Boost?

Decidimos crear una precisión arbitraria Preders sin signo. Nos gustaría proporcionar un conjunto de algoritmos enteros (funciones) con la biblioteca. Hemos visto una serie de solicitudes para dicha biblioteca (SoC2010, C++0x Standard Library wishlist). Además, generalmente se solicita un tiempo de ejecución normal bigint con eso, pero no queremos entrar en la molestia de la administración de la memoria. La idea me llegó desde una biblioteca llamada TTMath, desafortunadamente esta biblioteca funciona solo en plataformas específicas porque Assembly se usó ampliamente en la biblioteca. Nos gustaría escribir una biblioteca estándar, dependiendo de la biblioteca estándar de C++ y Boost. Además, nos gustaría utilizar las funciones disponibles de C++ 0x en los compiladores actuales, como los literales definidos por el usuario y otros. Esto técnicamente haría que la biblioteca no sea estándar por un tiempo, pero creemos que es cuestión de tiempo que los nuevos estándares sean oficiales.

Sus sugerencias sobre todo el proceso, incluido el diseño, la implementación, la documentación y el mantenimiento de la biblioteca son más que bienvenidos. Somos un grupo de estudiantes y recién graduados que buscan algo interesante en el verano, pero vemos que Boost está lleno de gurús y no queremos olvidar algo demasiado obvio. Nos estamos comunicando en línea, así que no hay pizarras compartidas :(

He aquí un ejemplo del uso de tal biblioteca:

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. 

Gracias,

+0

pregunta impresionante, estaba pensando en tratar de escribir una librería de punto flotante en tiempo de compilación. – GManNickG

+0

¿De verdad? Ni siquiera pude encontrar una pregunta. Interesante leer, supongo. – Dolph

+0

@Dolph Mathews Disculpe, estaba escribiendo la "pregunta" y olvidé comprobar CW. Gracias. – AraK

Respuesta

5

Dos pistas adicionales:

a) La planificación de una biblioteca de C++ 0x pura no parece ser una buena idea en el contexto de Boost. Uno de los objetivos de Boost es proporcionar bibliotecas multiplataforma/compilador cruzado. Por lo general, los autores de Boost interesados ​​en utilizar las características de C++ 0x lo hacen como una alternativa habilitada cuando se utiliza un compilador de C++ 0x. Para ese propósito, Boost predefine un conjunto completo de macros de preprocesador, uno para cada una de las características de C++ 0x.

b) Considere escribir en la lista de desarrollo de Boost con sus ideas, delineando el conjunto de características de su biblioteca planificada. Puede hacer las mismas preguntas allí, por cierto. Estoy seguro de que obtendrías muchas respuestas útiles y sugerencias si lo hicieras.

+0

Gracias. Tomaremos su consejo e iremos con C++ 03 puro. – AraK

+0

@Arak Sería bueno si incluyese declaraciones literales definidas por el usuario. Simplemente envuélvalos en el apropiado '# ifndef' (BOOST_NO_RAW_LITERALS creo) – KitsuneYMG

2

Mi consejo: ir a la impulsar la página web y siga las instrucciones que respondan a su pregunta exacta.

+0

Roberts ¡Gracias! Los requisitos están aquí: https: //svn.boost.org/trac/boost/wiki/Guidelines/Requirements y los estamos siguiendo.¿Hay algo más que se te ocurra? – AraK

+0

Prepárese para respaldar su producto con argumento. Tendrás tanto escépticos como fanáticos. –

4

en primer lugar usted debe leer Boost Library Requirements and Guidelines.

+0

Estos son requisitos explícitos que * tenemos * que seguir de cualquier forma. ¿Cómo vería esta decisión de diseño, por ejemplo: no proporcionamos cheques de desbordamiento al igual que los tipos nativos? Es eso aceptable? Me gustaría escuchar algunos consejos sobre esta biblioteca específica de quien hizo algo cercano o al menos tiene interés. Gracias. – AraK

+0

Veo ahora por qué preguntas. Espero que algunos de los usuarios de SO tengan una experiencia similar en esa área. –

+0

@AraK: para este tipo de comentarios, probablemente debería solicitar una revisión en la lista de correo de Boost. –

1

de inicio con la motivación para tal una delgada gramo. Me gustaría saber qué aplicaciones hay. Por "tiempo de compilación", supongo que te refieres a una plantilla de solución de metaprogramación, ¿correcto?

Suena como un proyecto divertido, pero quizás no es útil como parte del impulso (o tal vez sea útil .. que tendrá que establecer que detalle importante.)

+0

Gracias. Se solicita específicamente en SoC2010, ver el enlace en mi pregunta. La idea es simple, pondré un ejemplo de uso en la pregunta. – AraK

2

La idea me vino de una biblioteca llamado TTMath, desafortunadamente esta biblioteca funciona solo en plataformas específicas porque Assembly se usó ampliamente en la biblioteca .

¿Tiene previsto implementar un soporte de operaciones algebric completo? (adición, multiplicación, raíz cuadrada, etc.).

Si lo hace, también consulte el CryptoPP::Integer class. Es una clase entera con todas las funciones y precisión arbitraria que admite operaciones aritméticas completas. También es multiplataforma.

El problema es que se resignó al álgebra compleja en mente (para operaciones criptográficas) por lo que es mucho más que una clase entera genérica.

También es compatible con la codificación y decodificación BER/DER y OpenPGP como parte de la clase, junto con muchas otras operaciones que probablemente no deberían ser parte de una implementación entera genérica.

Sus consejos sobre todo el proceso incluyendo el diseño, implementación, documentación, mantenibles de la biblioteca son más de Welcom.

También podría considerar el desarrollo de una clase decimal (similar al c# decimal), similar a float/double, pero sin perder precisión al desbordarse. La parte matemática al menos sería mucho más simple.

2

Implemente una eficiente función modpow. Similar a Java [BigInteger.modPow] [1]

El cifrado RSA es bastante simple cuando se llega a él. Dos números primos y algunos operadores matemáticos regulares. Es trivial implementar < cifrado de 32 bits con C++ estándar.

Un par de esas operaciones puede requerir bastante CPU, una potencia seguida de un módulo. Ha habido mucha investigación ya que RSA se usa ampliamente, y esas dos operaciones se pueden combinar de manera eficiente. La nueva operación se llama modpow.

Por lo tanto, dada una eficiente biblioteca de iteración de precisión abitrary con un modpow eficiente, RSA de fuerza completa se puede implementar trivialmente. Una solución criptográfica completa también necesitaría generar algunos números primos aleatorios, pero ese es un alcance mayor.

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

Cuestiones relacionadas