Советы по отправке библиотеки в Boost? - PullRequest
15 голосов
/ 17 июня 2010

Лето наступает, и группа друзей и я готовимся к нему:)

Мы решили создать произвольные целые числа без знака точности во время компиляции.Мы хотели бы предоставить набор целых алгоритмов (функций) с библиотекой.Мы видели несколько запросов на такую ​​библиотеку ( SoC2010 , C ++ 0x Список пожеланий стандартной библиотеки ).Кроме того, обычно с этим запрашивается обычное время выполнения 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 ]

5 голосов
/ 17 июня 2010

Две дополнительные подсказки:

a) Планирование чистой библиотеки C ++ 0x не очень хорошая идея в контексте Boost. Одна из целей Boost - предоставить кросс-платформенные / кросс-компиляторные библиотеки. Обычно авторы Boost, заинтересованные в использовании возможностей C ++ 0x, делают это в качестве альтернативы, включенной при использовании компилятора C ++ 0x. Для этого Boost предопределяет целый набор макросов препроцессора, по одному для каждой функции C ++ 0x.

b) Пожалуйста, рассмотрите возможность записи в список Boost devel со своими идеями и описанием набора функций вашей запланированной библиотеки. Вы можете задать те же вопросы там, кстати. Я уверен, что вы бы получили много полезных ответов и предложений, если бы сделали.

4 голосов
/ 17 июня 2010

Прежде всего, вы должны прочитать Требования и рекомендации по повышению библиотеки .

2 голосов
/ 17 июня 2010

Пожалуйста, реализуйте эффективную функцию modpow.Подобно Java [BigInteger.modPow] [1]

RSA-шифрование довольно просто, когда вы приступаете к нему.Два простых числа и некоторые регулярные математические операторы.Легко реализовать <32-битное шифрование со стандартным C ++. </p>

Пара этих операций может быть довольно интенсивно загружать процессор, затем мощность по модулю.Было проведено много исследований, поскольку RSA широко используется, и эти две операции могут быть эффективно объединены.Новая операция называется modpow.

Таким образом, при наличии эффективной библиотеки итераторов с прецизионной точностью и эффективным модулем ввода данных, RSA полной мощности может быть тривиально реализована.Полное криптографическое решение также должно было бы генерировать некоторые случайные простые числа, но это большая область.

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

2 голосов
/ 17 июня 2010

Идея пришла ко мне из библиотеки под названием TTMath, к сожалению, эта библиотека работает только на определенных платформах, потому что в библиотеке широко использовался ассемблер.

Планируете ли вы реализовать полный алгебраическийподдержка операций?(сложение, умножение, квадратный корень и т. д.).

Если вы это сделаете, посмотрите также CryptoPP :: Integer class .Это полнофункциональный целочисленный класс произвольной точности, поддерживающий полные арифметические операции.Он также кроссплатформенный.

Проблема в том, что он смирился со сложной алгеброй (для криптографических операций), так что это гораздо больше, чем универсальный целочисленный класс.

Этотакже поддерживает кодирование и декодирование BER / DER и OpenPGP как часть класса, а также множество других операций, которые, вероятно, не должны быть частью общей целочисленной реализации.

Ваши подсказки по всему процессу, включаядизайн, реализация, документация, поддерживаемость библиотеки более чем приветствуются.

Вы также можете заняться разработкой десятичного класса (аналогично c # decimal ), аналогично float/ double, но без потери точности при переполнении.По крайней мере, математическая часть была бы намного проще.

2 голосов
/ 17 июня 2010

Мой совет: зайдите на сайт поддержки и следуйте инструкциям, которые ответят на ваш точный вопрос.

1 голос
/ 17 июня 2010

Начните с мотивации для такой вещи.Мне было бы любопытно, какие приложения есть.Под «временем компиляции» я предполагаю, что вы имеете в виду шаблонное метапрограммирующее решение, верно?

Это звучит как забавный проект, но, возможно, бесполезно как часть повышения (или, возможно, полезно .. вам придетсяпредоставьте эту важную деталь.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...