Какие языки сценариев хорошо поддерживают длинные (64-битные) целые числа? - PullRequest
5 голосов
/ 15 декабря 2010

Perl долгое время был моим любимым языком сценариев, но я столкнулся с ужасной проблемой. По умолчанию поддержка длинных (64-битных) целых чисел отсутствует. В большинстве случаев целое число - это просто строка, и они работают для поиска в больших файлах, но есть множество мест, где они не работают, например, двоичные &, printf, pack, unpack, <<, >>.

Теперь они работают в более новых версиях Perl, но только если он построен с поддержкой 64-битных целых чисел, что не помогает, если я хочу сделать переносимый код для запуска на Perls, созданном без этой опции. И вы не всегда получаете контроль над Perl в системе, в которой работает ваш код.

У меня вопрос: страдают ли Python, PHP и Ruby такой проблемой или же они зависят от версии и параметров сборки?

Ответы [ 4 ]

14 голосов
/ 15 декабря 2010

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

Если вам нужна поддержка больших целочисленных кросс-платформенных / кросс-версий, прагма Perl use bigint; поможет. Если вам нужно больше контроля, bigint является оберткой вокруг модуля Math::BigInt.

В области, в которую загружен use bigint;, все целые числа в этой области будут прозрачно обновлены до Math::BigInt чисел. Наконец, при использовании любой библиотеки больших чисел, не используйте такие трюки, как 9**9**9, чтобы получить бесконечность, потому что вы можете некоторое время ждать:)

3 голосов
/ 15 декабря 2010

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

2 голосов
/ 15 декабря 2010

Поддержка длинных целых чисел в Tcl 8.5 довольно хороша с точки зрения пользователя. Внутренне, он представляет целые числа как любой тип, необходимый для их хранения (вплоть до bigints), а вещи, которые потребляют целые числа, возьмут любое из них (хотя могут налагать свои собственные ограничения; вы не хотите использовать число, подходит только для bigint как режим файлов Unix ...)

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

1 голос
/ 15 декабря 2010

Простите, сэр, bigint и Math :: BigInt являются частью основных модулей. Просто блин '1005 * один из них, он будет работать на любой платформе.

...