15 Stimmen

Tipps für die Einreichung einer Bibliothek bei Boost?

Der Sommer kommt und eine Gruppe von Freunden und ich bereiten uns darauf vor :)

Wir haben beschlossen, Ganzzahlen mit beliebiger Genauigkeit zur Kompilierzeit zu erstellen. Wir möchten eine Reihe von Ganzzahlarithmetik-Algorithmen(Funktionen) mit der Bibliothek bereitstellen. Wir haben eine Reihe von Anfragen nach einer solchen Bibliothek gesehen (SoC2010, C++0x Standard Library Wishlist). Auch eine standardmäßige Laufzeit bigint wird normalerweise damit angefordert, aber wir möchten uns nicht mit dem Aufwand des Speichermanagements befassen. Die Idee kam mir von einer Bibliothek namens TTMath, leider funktioniert diese Bibliothek nur auf spezifischen Plattformen, weil in der Bibliothek umfangreich Assembly verwendet wurde. Wir möchten eine Standardbibliothek schreiben, die von der C++ Standardbibliothek und von Boost abhängt. Außerdem möchten wir die verfügbaren C++0x-Funktionen in aktuellen Compilern wie benutzerdefinierte Literale und andere nutzen. Dies würde die Bibliothek technisch gesehen vorerst nicht standardmäßig machen, aber wir glauben, dass es nur eine Frage der Zeit ist, bis die neuen Standards offiziell werden.

Ihre Hinweise zum gesamten Prozess, einschließlich Design, Implementierung, Dokumentation und Wartbarkeit der Bibliothek, sind mehr als willkommen. Wir sind eine Gruppe von Studenten und frischgebackenen Absolventen, die im Sommer etwas Interessantes suchen, aber wir sehen, dass Boost voller Gurus ist und wir nichts allzu Offensichtliches vergessen wollen. Wir kommunizieren online, es gibt also keine gemeinsamen Whiteboards :(

Hier ein Beispiel für die Verwendung einer solchen Bibliothek:

typedef our_namespace::uint<512> uint512_t;
// Deklaration einer ganzzahligen Variable mit einer Breite von 512 Bits.
// Danach sollte der Benutzer damit genauso umgehen wie mit den nativen Datentypen.

Danke,

5voto

hkaiser Punkte 11260

Zwei zusätzliche Hinweise:

a) Die Planung für eine reine C++0x-Bibliothek scheint im Zusammenhang mit Boost keine gute Idee zu sein. Eines der Ziele von Boost ist es, plattformübergreifende/plattformübergreifende Compiler-Bibliotheken bereitzustellen. Normalerweise interessieren sich Boost-Autoren, die C++0x-Funktionen verwenden möchten, dafür als Alternative, wenn sie einen C++0x-Compiler verwenden. Zu diesem Zweck definiert Boost einen ganzen Satz von Präprozessor-Makros, einen für jede der C++0x-Funktionen.

b) Bitte überlegen Sie, sich mit Ihren Ideen an die Boost-Entwicklerliste zu wenden und den Funktionsumfang Ihrer geplanten Bibliothek zu skizzieren. Sie könnten übrigens dieselben Fragen dort stellen. Ich bin sicher, dass Sie viele nützliche Antworten und Vorschläge erhalten würden, wenn Sie das täten.

4voto

Kirill V. Lyadvinsky Punkte 92957

Zunächst sollten Sie Boost Library Anforderungen und Richtlinien lesen.

2voto

Edward Strange Punkte 39597

Mein Tipp: Gehe auf die Boost-Website und befolge die Anweisungen, die deine genaue Frage beantworten.

2voto

utnapistim Punkte 25960

Die Idee kam mir von einer Bibliothek namens TTMath, leider funktioniert diese Bibliothek nur auf bestimmten Plattformen, da in der Bibliothek umfangreich Assembly verwendet wurde.

Planen Sie, die vollständige Unterstützung für algebraische Operationen zu implementieren? (Addition, Multiplikation, Quadratwurzel und so weiter).

Wenn ja, werfen Sie auch einen Blick auf die CryptoPP::Integer Klasse. Es handelt sich um eine voll ausgestattete, beliebig genaue Integer-Klasse, die volle arithmetische Operationen unterstützt. Sie ist auch plattformübergreifend.

Das Problem dabei ist, dass sie mit komplexer Algebra im Kopf konzipiert wurde (für kryptografische Operationen), also ist sie viel mehr als eine generische Integer-Klasse.

Innerhalb der Klasse wird auch die BER/DER- und OpenPGP-Codierung und Decodierung unterstützt, zusammen mit vielen anderen Operationen, die wahrscheinlich nicht Teil einer generischen Integer-Implementierung sein sollten.

Ihre Hinweise zum gesamten Prozess, einschließlich Design, Implementierung, Dokumentation, Wartbarkeit der Bibliothek sind mehr als willkommen.

Sie könnten auch in die Entwicklung einer Dezimal-Klasse (ähnlich der c# decimal) einsteigen, ähnlich zu float/double, aber ohne Genauigkeit bei Überlauf zu verlieren. Der mathematische Teil wäre zumindest viel einfacher.

2voto

deft_code Punkte 54095

Bitte implementieren Sie eine effiziente modpow Funktion. Ähnlich wie [BigInteger.modPow][1] in Java

Die RSA-Verschlüsselung ist ziemlich einfach, wenn man es genau betrachtet. Zwei Primzahlen und einige gewöhnliche mathematische Operatoren. Es ist trivial, eine 32-Bit-Verschlüsselung mit Standard C++ zu implementieren.

Ein Paar dieser Operationen kann ziemlich CPU-intensiv sein, eine Potenzierung gefolgt von einem Modulo. Es wurde viel Forschung betrieben, da RSA umfangreich verwendet wird, und diese beiden Operationen können effizient kombiniert werden. Die neue Operation wird modpow genannt.

Also, wenn eine effiziente Bibliothek für beliebige Genauigkeit mit einer effizienten modpow gegeben ist, kann volle Stärke RSA trivial implementiert werden. Eine vollständige Kryptolösung würde auch einige zufällige Primzahlen generieren müssen, aber das ist ein größerer Umfang.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X