Я сказал бы, что это зависит от приложения Вашей базы данных.
самая большая проблема, где Вы храните ключ шифрования? Поскольку, если у хакера есть избыток к чему-то большему чем Вашему DB, все Ваши усилия, вероятно, потрачены впустую. (Помните, для Вашего приложения будет нужен тот ключ шифрования, чтобы дешифровать и зашифровать поэтому в конечном счете хакера, найдет ключ шифрования и используемую схему шифрования).
Pro:
Недостатки:
Разрешение ненулевых обобщенных констант может очень легко нарушить безопасность системы типов для единиц (см. Статьи Эндрю Кеннеди ). Я считаю, что ответ на ваш последний вопрос заключается в том, что sqrt
действительно волшебство в некотором смысле в том смысле, что не должно быть возможности определить параметрическую функцию с такой сигнатурой типа обычными средствами. Однако возможно делать то, что вы хотите (по крайней мере, в текущей версии F #), используя преимущества бокса и преобразования:
let sqrt (x : float<'u^2>) =
let x' = (float x) ** 0.5 (* delete unit and calculate sqrt *)
((box x') :?> float<'u>)
@kvb прав, в более общем плане:
Если у вас есть алгоритм, не поддерживающий единицы измерения (например, вы пишете «корень куба»), и вы хотите поместить на него единицы измерения, вы можете обернуть алгоритм в функцию с правильной сигнатурой типа и использовать, например, «float», чтобы «отбросить» единицы по мере их поступления, и подход «box-and-downcast», чтобы «добавить обратно» соответствующие единицы на выходе .
В выпуске RTM (после Beta2) F # будет иметь примитивные библиотечные функции для «добавления обратно единиц», так как подход box-and-downcast в настоящее время является своего рода хаком, позволяющим преодолеть недостаток этих примитивов в язык / библиотека.