Archive

Posts Tagged ‘Type safety’

Is It Safe?

Remember this classic torture scene in “Marathon Man“? D’oh! Is It Safe Now, suppose you had to create the representation of a message that simply aggregates several numerical measures into one data structure:

safe unsafe

Given no information other than the fact that some numerical computations must be performed on each individual target track attribute within your code, which implementation would you choose for your internal processing? The binary, type-safe, candidate, or the text, type-unsafe, option? If you chose the type-unsafe option, then you’d impose a performance penalty on your code every time you needed to perform a computation on your tracks. You’d have to deserialize and extract the individual track attribute(s) before implementing the computations:

eraseTrks

If your application is required to send/receive track messages over a “wire” between processing nodes, then you’d need to choose some sort of serialization/deserialization protocol along with an over-the-wire message format. Even if you were to choose a text format (JSON, XML) for the wire, be sure to deserialize the input as soon as possible and serialize on output as late as possible. Otherwise you’ll impose an unnecessary performance hit on your code every time you have to numerically manipulate the fields in your message.

InOutTrks

More generally….

Serialize-Deserialize

The “Void Star” Crowd

April 29, 2012 3 comments

During theAsk Us Anything” panel discussion at theGoing Native 2012” conference, one of the questions asked was: how do you get the “void *guys to move forward toward a more type-safe and abstract C++ style of programming?“.

By “void *“, the questioner meant programmers who still cling to writing code like this:

instead of this:

The panelists admitted that it was a big challenge, and they gave the following suggestions:

  • Ask them what problems they’re having and then show them the solution by doing it for them in C++ style. (Stroustrup)
  • Set a personal example of increased productivity. (Alexandrescu)
  • Show them compiler generated assembly output comparing the “void *”  C-style code with a more expressive, less error-prone, more readable C++ equivalent. Odds are that the compiler-optimized C++ code will be much shorter than the hand-crafted C code. (STL)

Bjarne Stroustrup seemed especially frustrated at the pervasiveness of “void *” mindset. As a professor at Texas A&M, he said that as people come out of high school, most of them want to write games and they’ve convinced themselves and each other that, beyond a shadow of a doubt, “void *” is as fast as one can get. That’s exacerbated by the fact that many professors and “greybeards” still code in the type unsafe, barely readable, and error prone “void *” way.

I can sympathize with Bjarne and the panel. When I made the transition from C to C++, it took me what-seemed-like forever to “graduate” from arrays and naked pointers to containers and smart pointers and algorithms. Luckily, I did it in spite of myself. I can’t even remember the last time I used “void *” in any of the code I wrote.

%d bloggers like this: