On Wed, 2002-04-17 at 22:52, Mike Nordell wrote: > A discussion on IRC made me realize this hasn't been thouroughly enough used > in the current code.
I'm very much in favor of using tools to track memory usage, pre&post conditions, variable intializations, and so forth. Asserts are a very good way to check pre & post conditions or to alert you to an "impossible state" that your program has been thrown into. Asserts are good for this sort of thing, and I encourage their use in these areas. Asserts are poor memory error checkers - there's no two ways about it. Tools like Verify and Valgrind (and to a lesser extent, Memprof) are very good at tracking memory allocations, deallocations (or lack thereof), double-frees, heap corruptions, etc... I encourage the use of these tools in these areas. Variable initialization is just a good thing to do. Java and C# do this for you. While I think this is good, I think it also leads to laziness and forgetfullness all too often, and might not be so much of a time saver if you want all of your class' bools initialized to true (for example). In C++ it's a bit more work, but it's still easy. int i = 0; Not so hard. Class variables should be initialized in constructors (or at least a common init() method). Function variables should be initialized when they are declared or immediately afterwords: int i, j, k ; i = j = k = 0 ; The idea is that through variable intialization we don't throw ourselves into an "impossible state" and thus trigger fewer asserts. Exceptions are good tools, but C++'s exception checking and handling is piss-poor, IMNSHO. In Java, you can at least declare that your method/ctor throws an exception or error and have the COMPILER make sure that you, the programmer, catch that exception or propegate it to someone who will. That said, we do have an exception throwing mechanism in place and I encourage its use. If you throw an exception, DOCUMENT THAT YOUR METHOD THROWS and declare the method as UT_THROWS((types)) my_iconv_class::my_iconv_class (string in_charset, string out_charset) UT_THROWS((int)) Every one of our platforms and compilers support exceptions. Even OS/390 running ZOS does, and its compiler doesn't understand bool (or anything else introduced in C++-land before 1992, for that matter). For those places where exceptions are a bad idea, return a WELL DOCUMENTED error condition and make sure that the calling function checks that return condition for success or failure. Code defensively. These are all tools. Use the correct tool for the situation, and use the tool correctly. Dom
