I would like to suggest adding an integer presentation type for base 36 to PEP 3101. I can't imagine that it would be a whole lot more difficult than the existing types. Python's built-in long integers provide a nice way to prototype and demonstrate cryptographic operations, especially with asymmetric cryptography. (Alice and Bob stuff.) Built-in functions provide modular reduction, modular exponentiation, and lots of nice number theory stuff that supports a variety of protocols and algorithms. A frequent need is to represent a message by a number. Base 36 provides a way to represent all 26 letters in a semi-standard way, and simple string transformations can efficiently make zeros into spaces or vice versa. long() can already take a radix argument of 36 to parse base 36 numbers. If a base 36 presentation type (say, 'z' or something) was available, it would be possible to base 36 numbers as a simple way to interpret a message as a number in number theoretic/asymmetric cryptographic applications.
The standard answer (see, for example, the Wikipedia Base 36 article) is to code up a quick routine to loop around and generate each digit, but:
- The kinds of numbers used in cryptographic applications are big, as in thousands of digits. Providing some sort of direct support would nicely facilitate computational efficiency as it would avoid going around an interpreted loop thousands of times for each conversion.
- All the the examples I've seen on in a quick Google search use the horrible anti-idiom of building up a string by repeated concatenation. Obviously, doing it efficiently is not trivial. It would be nice to get it right and be done with it.
- Yes, one could write his own routine to do it, but this would serve as an unnecessary distraction where the purpose of the code is to illustrate a cryptographic algorithm or protocol
- Yes, one could write his own module, define his own type, and override everything, but it's a fair amount of work to cover everything off (longs are a part of the language's core syntax) and even then, you still have the clutter of manually invoking constructors to make your new type instead of the built-int type. It's also kind of a trivial thing to justify promulgating a standard module for, and without a standard module, it's one more preliminary that has to be done before you can get to the main algorithm.
- "Batteries included" is kind of a nice philosophy.
Is it practical to add a base36 integer presentation type (say, 'z' or 'Z' similar to hexadecimal's 'x' or 'X') to the existing integer presentation types list in PEP 3101 (or do I need to raise a brand new PEP for this near-triviality)? It would be a very parallel thing to the hexadecimal one which is doing almost all the same things. I can't imagine it breaking anything because it defines something new that previously wasn't defined as anything useful at all.
Jeffrey <jss.bulk@@gmail.com mailto:email@example.com>