I stopped using Object Master when I started using namespaces regularly because it was never upgraded to support them.
However, apart from the blazing speed (on an old 400MHz Mac with 144MB RAM) there are so many things that I still found useful I thought it was worth capturing a list of these goodies.
Object Master parses your code, in either plain C, C++, Object Pascal, Modula-2 or Java and builds an internal representation caching its object-oriented representation of your code. This parsed representation is saved back into the files - it is an editing environment as well as a browser.
It groups C functions into "classes" based on their file membership and obviously follows the OO logic of other languages.
It is dumb as far as C macros go and requires you to manually define them. There are shortcuts to make it relatively easy to define the complex macros such as used in MFC and preloaded standard sets so this doesn't actually amount to much work.
Where the ability to hand-define macro meanings becomes very useful is in the area of speed and smart presentation, as noted below.
The browser window, of which you can create many, is a typical Smalltalk-style browser with a triple pane presentation of classes, methods and member variables, with a code area underneath.
This is a list, in no particular order, of the things that have impressed me in the last few weeks as I revisit Object Master. This is after years of using XCode, CodeWarrior, Visual Studio (up to 2003) and Eclipse (for C++ and Python, no comment on Java tools).
Whilst it also has strong project, makefile and source-control integration, the target environments are long-since outmoded and now therefore mainly irrelevant.
For browsing old code, I still found these features useful and depressingly better implemented than in any of the environments I'm using elsewhere!
- you can tag source files with arbitrary colours and limit searches to a colour
- tagging is totally arbitrary, per file so can go across any other organisation
- the project sort order makes it very easy to contiguously select files in directories
- it is very fast, even on Macs of 12 years ago it didn't interrupt a smooth flow
- you can open multiple browsers on a class, editing many methods, even when they are stored in the same file. It thus hides the file-oriented storage and allows you to think totally class-based
- for cross-platform code, the macro support is fantastic because code that is disabled by a macro definition is italicised, making it trivially easy to see what code is active. Remember I said you could change the definitions of macros? That makes it very simple to effectively jump between environments and see where your nested #ifdefs are interacting.
- it is very clean to move between a browser view, source file and class hierarchy diagrams with drop-down menus of methods
- history of recently visited methods is available at the bottom of the browser window so you can swiftly go back along the arbitrary chain you have followed
- the method and member variable lists can be expanded with inherited members, allowing you to select them and see them immediately as defined in the parent class
- you can restrict the views as implementor, user, etc. so the effects of access control are obvious
- you can easily navigate to related methods being implementations, overridden versions or callers of a method
I reviewed an older version in MacTech magazine so you can look at some pretty pictures and read the full review: [Dent94].
Version 3 did come out with all the things they promised include a Windows version that still runs very nicely under Windows XP.
However, the codebase had major cobwebs. It was originally written in MacApp v2 which used Object Pascal (the elegant, lean Apple variant developed in consultation with Wirth, nothing to do with Borland).
It was ported to MacApp v3 using a conversion tool to convert it to c++ (I think) and then the Windows version created using a product Mac2Win from the same company that acquired the rights to Object Master.
As the c++ standard loomed and became dramatically harder to parse, with the new casts, heavy use of templates and namespaces, a business decision was apparently made that updating the parser was not going to be cost-effective. I don't really know - I think it was a one-man product all those years and maybe the resident genius just grew tired, left or suffered some less-desirable fate.