Introduction Design notes It is a serious problem to decide which multiprecision integer package and which memory manager should be used in LiDIA . Some of those packages are more efficient on one architecture and some on others. Also, new architectures lead very fast to new multiprecision packages. We decided to make LiDIA independent of a particular kernel and to make it easy to replace the LiDIA kernel. To achieve this, we separate the kernel from the application programs by an interface in which the declarations, operators, functions, and procedures dealing with multiprecision integers and the memory management are standardized.
All LiDIA classes use the kernel through that interface.
They never use the kernel functions directly. Whenever new kernel packages are used only the interface has to be changed appropriately but none of the LiDIA classes has to be altered. We try to develop extremely efficient code for the algorithms we offer in the LiDIA system. Therefore, LiDIA is designed in such a way, that a user can decide in which level of abstraction one implements the programs. Moreover we try to keep the dependency of parts of the library on each other to a minimum and to define interfaces precisely in order to be able to replace modules by more efficient modules in an efficient way.