I work for a company that makes restaurant appliances, and nearly every one has a PIC-based control board (in some cases as many as 3 per board!). Over the past few years we have used CCS, Hitech and most recently BoostC. I will not address any competitive comparisons, but will give information based on actual use. CCS: (1) Handles interrupts very poorly. It does not support dual priority interrupts. It has a lot of overhead and isr's are handled one-per-call to the interrupt routine. (2) Bugs in integer and floating point math. You cannot do add/subtract with a negative result in the same source code line as a multiply/divide and come up with a correct answer. (3) Very poor code efficiency. Hitech: (1) Math problems similar to CCS, plus printf with floating point may simply lockup and require the watchdog to bark. (2) One of our customers wrote their own code using v 8.35 and it was working. They "upgraded" to 9.40 and the code hung on some internal library function that couldn't be fixed. They went back to 8.35. (3) I tried their newest (9.63) on some other working 8.35 code and ran out of ROM space. (4) Their use of "psects" as part of their linking mechanism is "well documented" as to what it is - but not a single sentence on what to do when you get this error. (5) Microchips purchase of Hitech has simply raised the price without any improvements. Microchips C18: We have not used this for any projects, mostly because of what looks like poor code efficiency (every variable access begins with setting the BSR!).
We have completed a couple of small projects with BoostC with no noticeable issues. I am about to do another one of those 3-chip systems and will be using BoostC. There are a few things I need to "work around" but so far these are minor. Code efficiency "appears" on-par with Hitech (8.35 anyway).
In summary, from the real world, don't waste your time/money on CCS or Hitech.
PS: Wish list: (1) bit fields, (2) deeper struct/union nesting, (3) better error messaging. I *Love* your function overloading!