Советы по отправке библиотеки на Boost?
Лето приближается, и группа друзей и я готовимся к этому:)
Мы решили построить компиляционную точность беззнаковых целых чисел. Мы хотели бы предоставить набор алгоритмов (функций) целых чисел с библиотекой. Мы увидели несколько запросов для такой библиотеки (SoC2010, Список пожеланий стандартной библиотеки С++ 0x). Кроме того, обычно требуется регулярное время выполнения bigint
, но мы не хотим вдаваться в проблему управления памятью. Идея пришла ко мне из библиотеки под названием TTMath, к сожалению эта библиотека работает только на определенных платформах, потому что Assembly широко использовалась в библиотеке. Мы хотели бы написать стандартную библиотеку в зависимости от стандартной библиотеки С++ и Boost. Кроме того, мы хотели бы использовать доступные средства С++ 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.
Спасибо,
Ответы
Ответ 1
Два дополнительных подсказки:
a) Планирование для чистой библиотеки С++ 0x, по-видимому, не является хорошей идеей в контексте Boost. Одной из целей Boost является предоставление кросс-платформенных/кросс-компиляторных библиотек. Обычно авторы Boost, заинтересованные в использовании возможностей С++ 0x, делают это как альтернативу, доступную при использовании компилятора С++ 0x. Для этой цели Boost предопределяет целый набор макросов препроцессора, по одному для каждой из возможностей С++ 0x.
b) Пожалуйста, подумайте о том, чтобы записать в список Boost devel свои идеи, изложив набор функций вашей запланированной библиотеки. Вы можете задать те же вопросы там, кстати. Я уверен, что вы получили бы много полезных ответов и предложений, если бы вы это сделали.
Ответ 2
Прежде всего, вы должны прочитать Повысить требования к библиотеке и рекомендации.
Ответ 3
Мой намек: перейдите на сайт повышения и следуйте инструкциям, которые отвечают на ваш точный вопрос.
Ответ 4
Идея пришла ко мне из библиотеки называется TTMath, к сожалению, это библиотека работает только по конкретным платформы, потому что была использована сборка широко в библиотеке.
Планируете ли вы реализовать полную поддержку алгебраических операций? (добавление, умножение, квадратный корень и т.д.).
Если вы это сделаете, просмотрите класс CryptoPP:: Integer. Это полнофункциональный целочисленный класс произвольной точности, поддерживающий полные арифметические операции. Это также межплатформенная платформа.
Проблема заключается в том, что он сбрасывается с учетом сложной алгебры (для криптографических операций), поэтому он намного больше, чем общий целочисленный класс.
Он также поддерживает кодирование и декодирование BER/DER и OpenPGP как часть класса, а также множество других операций, которые, вероятно, не должны быть частью универсальной целочисленной реализации.
Ваши намеки на весь процесс включая проектирование, внедрение, документации, поддерживаемой библиотека больше, чем welcom.
Вы также можете изучить десятичный класс (похожий на С# decimal), аналогичный float/double, но не потеряющий точность при переполнении. Математическая часть, по крайней мере, была бы намного проще.
Ответ 5
Внедрите эффективную функцию modpow
. Подобно Java [BigInteger.modPow] [1]
Шифрование RSA довольно просто, когда вы переходите к нему. Два простых числа и некоторые регулярные математические операторы. Тривиально реализовать и 32-битное шифрование со стандартным С++.
Пара этих операций может быть достаточно интенсивной, а затем последовательностью по модулю. Было много исследований, поскольку RSA широко используется, и эти две операции могут быть эффективно объединены. Новая операция называется modpow
.
Таким образом, при использовании эффективной библиотеки точности iteger с эффективной modpow, полная прочность RSA может быть реализована тривиально. Полное криптовое решение также должно было бы генерировать некоторые случайные простые числа, но это большая область.
[1]: http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html#modPow(java.math.BigInteger, java.math.BigInteger)
Ответ 6
Начните с мотивации для такой вещи. Мне было бы любопытно, какие приложения есть. Под "компиляцией" я предполагаю, что вы имеете в виду решение метапрограмм шаблона, правильно?
Это звучит забавно, но, возможно, не полезно как часть повышения (или, может быть, полезно.. вам нужно будет предоставить эту важную деталь.)