Целое число произвольной длины в Ada

Можно выполнить команду SHOW FULL PROCESSLIST; MySQL для наблюдения, какие запросы обрабатываются в любой момент времени, но это, вероятно, не достигнет того, на что Вы надеетесь.

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

Действительно знают, что это, вероятно, значительно замедлит все на сервере хотя с добавлением дополнительного INSERT сверх каждого запроса.

Редактирование: другая альтернатива Журнал Общего запроса , но писание его к плоскому файлу удалило бы много возможностей для гибкости отображения особенно в режиме реального времени. Если Вы просто хотите простой, легкий к реализации способ видеть то, что продолжается, хотя, включая GQL и затем с помощью выполнения tail -f на файле журнала добился бы цели.

6
задан T.E.D. 24 August 2009 в 17:40
поделиться

2 ответа

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

Жаль, что стандарт не предоставил нам, пользователям, стандартный доступ к этому средству. С другой стороны, использовать для того, что нужно компилятору, и использовать для общего использования часто могут быть две разные вещи.

1
ответ дан 10 December 2019 в 02:51
поделиться

Криптографическая библиотека Ada поддерживает большие беззнаковые числа ( Big_Numbers ). Вы можете скачать библиотека из http://sourceforge.net/projects/libadacrypt-dev/ . Я рекомендую проверить файл svn. Функция умножения Big_Numbers текущего выпуска содержит небольшую ошибку.

Вы можете скомпилировать библиотеку с текущим компилятором GNAT с сайта AdaCore Libre .

Библиотека не будет компилироваться под gcc-4.3 или gcc-4.4 из-за ошибки в gcc .

Наконец, я дам вам небольшой пример, как умножить два 512-битных Big_Number из LibAdaCrypt.

package Test.Big_Numbers is

with Crypto.Types.Big_Numbers;

pragma Elaborate_All(Crypto.Types.Big_Numbers);

package Big is new Crypto.Types.Big_Numbers(512);
    use Big;
    use Big.Utils;
end Test.Big_Numbers;



package body Test.Big_Numbers is

x : Big_Unsigned := To_Big_Unsigned("16#57C19F8F7866F8633AC1D25B92FC83B4#");
Y : Big_Unsigned := To_Big_Unsigned("16#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60#");

x := X * Y;
Put_Line(X);

end Test.Big_Numbers;
 
Best regards
   Christian
8
ответ дан 10 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: