Oooh, good question.
I don't know enough about your project to suggest a clear answer, but I give you some ideas about the advantages and disadvantages of each language in the mobile device space.
Disclaimer: I am very Java biased. I learned C years ago and have maybe coded about 100 lines of it in my life. Rusty doesn't being to described my C/C++ abilities. I am a member of Sun's JSR 75, J2ME PDA Profile Expert Group. These opinions are my own, and based on knowledge external to the Expert Group.
For a WinCE device, your options are PersonalJava (which evolving into the Personal J2ME profile) and C++. Iassume you already familiar with both languages, and learning isn't an issue.
C++
---
WinCE is a MS OS, and MS likes C++ and doesn't like Java. The same advntages of C++ over Java on a PC apply here: its faster (no JIT on WinCE) and you can more easily access native functionality. I don't know how readily availavle C++ WinCE compilers are.
Java
----
We found our Java app to be a bit slow on a Jornada 133MHz; however running on an iPaq (206MHz?) seems fine. I actually don't really like Java for mobile devices simply because unlike PCs and workstations, mobile devices have a lot of variance between them. Jave tends to only support the intersection of their fuctionalities an can be very limited, e.g. MIDP. While device/JVM manufacturers can add OEM APIs, that makes Java as hard to port as C++. I think over the next few years, as devices matural and standardize, J2ME will, too, and this will be less of an issue. (Personal Java is currently very close to the JDK 1.1.8, but this may change a bit as it moves into the J2ME space, and as other devices come out which may fall into the PersonalJava space, influencing its direction.)
Also, there are a limited number of JVMs available, and their licensing isn't as simple as on the PC, so if this is a commercial/distributable product, that may be a factor.
Java does offer one advantage, however, and this is where my Java bigotry comes in. I think code is easier to maintain in Java, than in C++. For most commercial products, maintanence is a hugh cost of software development, much greater than the initial development cost, and so this plays a big factor.
So really, it depends on
- who will use it: few? many? is it a commercial product?
- how they will use it:do you rely havily on native
functionality?
- what is the future:how long will you support it? will you be
adding new features? will you be on multiple platforms?
I hope this helps.
--Mark
hershey@vaultus.com