Inner classes are one of several things that were done half-arsed, in order to minimize hits to the JVM. It almost seems like there was a period there when they were afraid to touch the actual JVM so they did obscene stuff in javac instead.
Like I said, lots of the decisions don't appear to have been made on a cost/benefits basis, but rather based on someone's prejudices or perhaps working around an intransigent individual. On Aug 4, 2:09 am, Bob Kerns <r...@acm.org> wrote: > On Aug 3, 10:46 pm, DanH <danhi...@ieee.org> wrote: > > > Just a few bullet points: > > -- I've always thought that C #include processing sucked. Why did > > they never introduce an "#includeonce" directive that would have > > eliminated all the #ifndef stuff to prevent double includes?? > > Even better, go one step further -- call it #import, and put some > constraints on it, like the file has to start and end at top-level, > and no circular imports, and perhaps even that dependencies will be > sorted automatically. > > > -- C macros suck. They obfuscate without really introducing much > > capability. I've worked on languages that had macros that were their > > own language -- you could have real variables in them, loop, do most > > normal programming things. Code was generated via "emit" statements. > > With such a macro language you can do some amazing things, and with > > reasonable use (always a problem, I know) the macros served to clarify > > rather than obfuscate. > > Another model, found in Lisp, Scheme, and Bliss-32, is to construct a > parsed representation of the code you want, and return it. (I'm not > sure if that was in BLISS-16 or not). In Lisp or Scheme, macros are > written in Lisp or Scheme -- in BLISS-32, it's its own language. > > > -- Post-processing of Java bytecodes is expensive and error-prone, and > > again obscures the logic. Not that cost should be a criteria, but > > post-processing is no panacea. > > Yes, no panacea, but it needn't be all that expensive or error-prone. > > And it definitely does NOT need to obscure the logic. In most uses > I've seen or done, it simply implements the logic shown in the source. > It can obscure the flow somewhat, however. But so do inheritance or > delegation. > > I leave it to you to decide whether things like Aspect-J obscure the > logic. > > > -- Yes, one should have to "cost-justify" including a line-number > > pseudo-function in javac. But there are a hundred features of Java > > that don't seem to me to be "cost-justified", and several hundred > > other missing functions that ARE "cost-justified". I never have > > figured out how Sun decided what went into Java and what didn't > > (though in several cases it appears to have depended on what would > > hide the deficiencies in their implementation vs expose them). > > I think I can cost-justify it! It's really easy to do, and it will > take a lot of the wind out of the sails of people demanding Java adopt > the C/C++ preprocessor! :=) More seriously, I think that datastructure > tagging, while not that common, has enough value to justify the low > cost. > > I have my own list of issues with what goes into Java and what > doesn't. #1 would be why we need to use 'final' on variables > referenced in inner classes? Unless, of course, we really want to make > them final. But why should we have to do these stupid tricks to set a > variable from an inner function? It's not like Guy Steele couldn't > teach them how to compile that by now! (His Rabbit and S1 compilers > handled that just fine -- back in the '70's... I spent a lot of time > reading that code...) > > The next few slots would be filled with various generics issues... :=) -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en