Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Sneaky Internal State

Name: Anonymous 2012-03-28 23:59

I've boiled what I want out of a programming language down to a single example.  Problems like this bite me in the ass often and I haven't used a language, yet, that helps.

Suppose I'm writing a library for working with vectors.  For simplicity, it's not fancy n-dimensional vectors, etc., let's say just three floats.  So I write some code to perform operations on vectors, like add, subtract, dot product, cross product, rotate, scale... and then I come to "normalize."

Here, I come up with this optimization that vectors could also store a flag indicating whether or not they are normal.  If that flag is set, then normalize has no work to do.  The catch is that I have to decide which operations clear the flag, which operations set it, and which operations leave it unchanged.  So I do the work and end up with a nice, efficient vector library.

I use my library for a long time -- long enough that I stop caring how that optimization worked.  Eventually, months later, I decide to add some new functions to my vector library.  Of course, I've forgotten all about the "normal" flag, and I forget to set/clear it in the new functions.  Of course, there's no compile error or even a run-time error.  I just observe strange behavior when the application runs and I have to spend hours stepping through floating-point math to figure out what's wrong.

How does your language of choice improve this situation?

Name: Anonymous 2012-03-29 1:04

>>6
Because then all your code would just be full of those comments and you'd get used to ignoring them.

>>7
This is just an example to illustrate some hand-holding that I'd like my programming language to do for me.  However, this particular vector-normalization-optimization thing is extremely common in 3D.

>>9
Right, sorry for the bad example...  So, let's take vector addition, instead.  Sometimes, adding two vectors returns a vector that just happens to be normal.  If I'm the application writer, I don't want to have to do all the math to determine whether it is or isn't.  I just want to use the vector in more functions, and I want my vector library to know when it needs to be re-normalized and when it doesn't.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List