BigIntegers are immutable
Instances can be shared by reference to save time and memory. Technically, you can access the “private” data to modify them yourself, but none of the library methods modify their arguments.
Numbers are stored as little-endian arrays in base 107
I’ve tried to balance simplicity and performance
Performance is not the primary concern, but I have tried to make things efficent. The multiply function currently uses the somewhat naive O(n2) algorithm you learn in school instead of faster algorithms like Karatsuba multiplication. In the (somewhat limited) testing I’ve done so far, the added complexity and recursion makes Karatsuba multiplication slower for most integer sizes.