During the holdiday season things have slowed down at work, so I've had some time to try out several programming tools. Most were disappointing, but a couple seem to be so genuinely useful that I'm going to try to introduce them at my work.During the holdiday season things have slowed down at work, so I've had some time to try out several programming tools. Most were disappointing, but a couple seem to be so genuinely useful that I'm going to try to introduce them at my work.
The first is The Source-Navigator IDE . I have not used this as a full IDE, I have a variety of tests and Clear Case integration that I don't want to mess with yet, but as a class browser and project analysis tool it is excellent. Written in tcl/tk and C, it seems to be very portable. I'm currently using it on Linux, MacOSX (under X11), and plan to try it out on Solaris on Monday.
The built in editor is a fairly standard programmer's editor, syntax highlighting and browser integration work correctly with my projects so far. The only features I can think of that I'd like to see added are selectable region visibility and vi emulation.
Adding existing code to a project is very simple and fairly fast. The initial 'project view' window has options to list classes, methods, functions, and files. Once you select one of these types and select an item then a new context sensitive browser window appears. The include browser, cross ref browser, and class hierarchy browsers are all very useful. A tab at the top of the window lets you easily switch between views of the item and a drop down select lets you easily switch to different items (with a filter setting with the current type as the default).
Overall I'm very happy with Source-Navigator and I'd suggest it to anyone looking for a great free tool to help manage their C++ projects. The UI is well thought out and seldom clumsy and the functionality and speed are very good.
The other tool that I've been happy with so far is FlexeLint for C/C++ . One thing I should mention right away is that this tool is $1000 for Linux/Unix use, the windows version is $240 and I hope that Gimpel Software will really consider bringing the price of the Linux version down to the same as the Windows price. I've seen some people mention running the windows version under emulation on Linux, I have no idea what Gimpel's take on that configuration might be or how stable it is - so I can't suggest that path for professional use.
The basic idea behind FlexeLint is that there are problems that your compiler does not have enough information to catch because it is divorced from the linker and runtime. This tool is essential a configurable C++ compiler that analyzes the code as it builds it. Rather than producing object or executable files it produces a report of problems and potential problems with the code. This is very different from what a tool like Purify does, and although they both check for some of the same sorts of problems, Purify does some runtime checking that a static analysis tool (like FlexeLint) could never manage.
You have to write (or use) a compiler and build system specific config file to tell the lint tool how to build your project. It did not take me long to realize that I needed to build some scripts as part of my build process to generate these config files at build time, One script adds a lint target for each module that run 'gcc -E' with precompiler options to dump build information about include paths and library paths. A couple more scripts to read those dumps into a format that the lint tool can use. I have several static config files that turn on or off some style checks, such as the Scott Meyers Effective C++/More Effective C++ checks, suspicious indentation, some default warnings I need to modify or turn off, and so on.
I've run into a few problems so far with templates, namespaces, and typedefs, but overall FlexeLint is a very useful tool. If I can convince my employer to spring for a couple copies I want to make it part of the nightly build and checkin process.
If anyone is interested I can grab some of my scripts and configs on Monday and post them here.