D vs Java
kris
foo at bar.com
Tue Mar 21 14:00:59 PST 2006
Matthias Spycher wrote:
> Walter Bright wrote:
>
>> I'm no expert on Java programming, but I get this question a lot:
>> "What compelling reason does D have that would entice a Java
>> programmer to switch to D?"
>>
>> I know several of you have come to D from Java, and are expert Java
>> programmers, so you folks' reasons would be very valuable.
>>
>
> I agree with Andrew that D and Java belong in separate categories. Java
> is intended for managed environments where the guts of the runtime are
> not exposed to the programmer. The object model is simple, the dynamic
> linking mechanism with class loaders is very powerful, and dynamic
> compilation achieves performance that is acceptable for many applications.
>
> If you look at just the language, it would be very easy to say D is
> competitive or superior. But if you look at the whole application
> life-cycle from specification, development, deployment, management,
> maintenance, evolution, etc., and the tools that support you in this
> cycle; D has quite a ways to go -- not so much the language, but the
> ecosystem around it.
>
> I do believe that, for certain applications, a dynamic compiler will at
> some point do a better job of optimizing code than a static compiler. Why?
>
> 1. A dynamic compiler knows about the architecture of the machine, e.g.
> cache sizes; and the profile of the running application, e.g. I/O
> boundedness. The data path is likely to be the main bottleneck in coming
> years.
>
> 2. Languages like Java have the advantage that they don't expose the
> actual layout of objects in memory to the programmer. Any language with
> pointers has a disadvantage in the context of dynamic optimization.
>
> 3. Multicore/multithreaded systems will provide for enough computational
> bandwidth for dynamic compilers and GCs to run in parallel with the
> programs they operate on. Performance degradation due to compilation at
> runtime will become a moot point on server systems very soon.
>
> 4. The ability to run multiple applications in the same runtime context;
> i.e. sharing the heap, the GC and the dynamically compiled bits of code;
> will reduce the overhead (which today is clearly a big issue for certain
> applications). Such a feature will be more easily implemented for a
> language like Java than D.
>
> Scalability. Java scales quite well to very large projects. Applications
> with millions of lines of code built by hundreds of developers (with
> different skill sets) are not out of the ordinary. If D can achieve this
> scalability (with the right tools, of course) then it will have come a
> long way. C/C++ do not scale this well primarily because they are
> system-dependent, have weaker semantics, limited library functionality,
> expose memory to the programmer and don't support garbage collection.
> Ownership patterns in large code bases are lost on the masses, and
> programming in the large becomes increasingly a breeding ground for
> dictatorships. One might argue Java is a mediocre programming language,
> but most programmers are mediocre, so less is more...
>
> Mobility. If you were a Comcast or a Vodafone, would you like to manage
> native downloadable applications for each and every gadget architecture
> that will appear on the planet. The ARM Cortex A8 architecture has this
> Jazelle RTC technology which will help byte-code apps scale on mobile,
> embedded systems. The infrastructure to manage native binaries is too
> expensive (not to mention fragile) and the performance degradation for
> byte code apps will be addressed (in hardware, if necessary).
>
> The choice for me will be to use D instead of C or C++ when I need to
> program at the system level -- when it's ready. I certainly think D is
> on the right track, so keep up the good work. IMHO, Java/C# are on a
> different track.
>
> Matthias
Amen; on every point.
What seems to be missing in this topic is the notion of selecting the
right tool for the job. One could endlessly debate the overlap and
distinction between D and Java, but in the end it's just horses for
courses all over again. Heck ~ one might argue that D /is/ statically
compiled Java, with the addition of pointers and structs, yet without
the library support :-p
It would be more interesting if this were entitled D vs C++. After all,
isn't that (as Mattias indicated) the target "competition" ?
More information about the Digitalmars-d
mailing list