322 GPGPU Programming for Games and Science
is responsible for keeping the distinction in his head and enforcing the rules ac-
cordingly. In my last commercial endeavor I attempted to build a very general
homogeneous algebra system, supporting linear algebra, affine algebra, and
homogeneous operations, while at the same time having as much compiler
support and runtime support for enforcing the rules. In the end, the program-
mers using the system still found ways to violate the point-vector distinction
although not intentionally. My conclusion was that the effort spent trying
to protect a programmer from inadvertently making errors was not justified
by the maintenance costs. The bottom line is: You must understand and be
adept at the mathematical abstracti ...