Numbers' Necessity I once read a fascinating paper comparing and contrasting the Object-Oriented and Abstract Data Type approaches to programming. The gist was something to the effect of OO systems allowing for reuse of completely different implementations in ways which ADT systems can't match, but that ADT systems are ultimately better for correctness; an OO system allows for special objects, but that also allows for misbehaving objects. Smalltalk was mentioned as an OO system that nonetheless had numbers more like an ADT system, and that numbers are clearly more suited to that approach was mentioned a little bit. I'm not entirely convinced most programs need numbers, or at least complex support for numbers; many programs would be served well by simple support for integers of indefinite length, without much need beyond such. In just about every programming language or system based around a minumum of concepts, numbers are the black sheep, the design exception and, if not there, then clearly in implementation. I quite like the approach Ada has: Rather than have one number type, a numeric tower, there are many kinds of numbers with different characteristics, and the programmer must choose which are needed for his problem; even then, Ada lacks saturation arithmetic, and I occasionally strongly feel this lack. The elephant in the room is undoubtedly hardware support; this queer occurrence in modern computing, requiring support from hardware which has undergone generations of stripping by idiots, lessens all. Different programs need wildly different types of some data, and yet all are called numbers, which I find obscures this issue. Symbolic number manipulation and equation solving are very different from 3D graphics, and use entirely distinct representations of numbers; decimal fixed-point arithmetic is another example of a very specialized type of number, and a type also provided as standard with Ada. I've never needed floating-point numbers for programs, and yet every system I've used provides them. Ada has the concept of profiles, runtime systems which have or lack certain features, and the intent is to allow programs to shed the costs of features which they needn't use. Something not dissimilar could be done for different types of numbers. An OO system truly concerned with message-passing and little else may very well have no need for any implementation supporting primitive types of numbers, and could shed them to get something simpler, more efficient, more portable, or which has some other such quality. An ADT system could, perhaps, benefit from fewer magic types, but this seems dubious. Certainly, the more I think about programming, the more I notice what could be done without numbers.