On Thu, Sep 17, 2009 at 9:34 AM, Joshua Marinacci <jos...@marinacci.org>wrote:

>
> (warning, this is long).
>
>
> It's easier to invent a new language than improve the old one for the
> same reason it's far faster and cheaper to build a brand new road then
> to do minor repairs on an existing road that's *in use*.  This is just
> the nature of software. Once something ships and is used by customers
> it instantly becomes legacy. And the more people use it the harder it
> becomes to change.  Over the last 30 years of software development
> we've come up with lots of tricks to address this, but it's still a
> very hard problem with no easy answers.
>

Yes, there is always a balance between stability and progress.

When a platform is new, much of its value is that it is new, different, and
presumably better than existing platforms in some way.  As a platform gets
widely used, some of the value delivered by the platform transitions to
keeping the code which uses the platform working.

The compatibility policies used to evolve the JDK [1] aim to keep source and
class files working while also improving the capabilities of the platform.
However, the wide use of the JDK does impose some behavioral compatibility
constraints.  Two examples from JDK 5, for a time javac switched from using
"$" between the component names of local and anonymous classes to using
"+".  The names of local and anonymous classes are a contract the compiler
keeps with itself; unlike nested member classes, local and anonymous classes
can't be referred to outside of the declaring context. [2]  While using "$"
in this way is not specified anywhere, people came to rely on that
convention over the years and numerous build systems broke with the switch
to "+" so we reverted to using "$".  Also in JDK 5, the private int value
field in java.lang.Integer was switched to being "final" to play better with
the memory model and similar changes were made to the other wrapper
classes.  Unfortunately, a program widely used at the time relied on being
able to write these *private* fields.  The addition of final was reverted
for a time and reapplied later in JDK 5 after the misbehaving external
program was fixed.

Developers can rely on many of these accidental details of the platform
implementation.  One benefit of adding a module system to the platform is
that more of such details can be hidden, making evolving the platform
easier.

-Joe

[1] "JDK Release Types and Compatibility Regions"*
*http://blogs.sun.com/darcy/entry/release_types_compatibility_regions

[2] "Nested, Inner, Member, and Top-Level Classes"
http://blogs.sun.com/darcy/entry/nested_inner_member_and_top

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to