> There is however, a very big difference between looking at a language > change from the perspective of a language implementor vs a language > user. In any case, I look forward to our discussion!
And I look forward to listening! > > - Joe (the other Joe) > > On Sep 2, 8:44 pm, jddarcy <jdda...@gmail.com> wrote: >> After listening to episode 277, I'm led to conclude I'm thought of by >> some as one of the "ivory tower guys" who "just says no" to ideas >> about changing the Java programming language. >> >> I have a rather different perspective. >> >> In November 2006, Sun published javac and related code under the >> familiar GPLv2 with Classpath exception. [1] >> >> Shortly thereafter in January 2007, no less a Java luminary than >> James >> Gosling endorsed the Kitchen Sink Language (KSL) project. [2] In >> James' words KSL is "A place where people could throw language >> features, no matter how absurd, just so that folks could play around" >> since he has "... never been real happy with debates about language >> features, I'd much rather implement them and try them out." >> >> KSL received no significant community response. >> >> Later in 2007, after the remaining core components of the platform >> were published as open source software as part of OpenJDK during >> JavaOne, in November Kijaro was created. [4] Kijaro is similar in >> spirit to KSL, but not does require contributors to sign the Sun >> Contributor Agreement (SCA). Before Project Coin, Kijaro saw a >> modest >> number of features developed, fewer than ten, which is also not a >> particular vigorous community response given the millions of Java >> developers in the world. >> >> The earliest posts on what would become Project Coin mentioned the >> utility of prototypes, the Project Coin proposal form included a >> section to provide a link to an optional prototype, and I repeated >> stated throughout Project Coin the helpfulness of providing a >> prototype along with a proposal. >> >> Despite the availability of the OpenJDK sources for javac and the >> repeated suggestions to produce prototypes, only a handful of >> prototypes were developed for the 70 proposals sent into Project >> Coin. >> >> Dick asked rhetorically during the podcast whether alternative >> projects exploring language changes were inevitable as the "only >> approach given strict control exercised over the JVM [by Sun]." >> >> IMO, such approaches are inevitable only if Sun's repeated efforts to >> collaborate continue to be ignored. >> >> Classes on compilers are a core component of many undergraduate >> compiler science curricula. All the Java sources in the JDK 7 >> langtools repository adds up to about 160,000 lines of code and javac >> itself is a bit over 70,000 lines currently. These are far from >> trivial code bases and some portions of them are quite tricky, but >> implementing certain changes isn't that hard. Really. Try it out. >> >> Dick says toward the end of the opening segment "If people do want to >> do this stuff, right now they are being told they can't." >> >> I certainly do not have the authority to tell others what they can >> and >> cannot do. Indeed, I have advocated producing prototypes of language >> changes as a much more productive outlet than whining and pouting >> that >> other people aren't busy implementing the language changes you want >> to >> little avail. Others have already noted in previous messages to this >> group the irony of Lombok using the annotation processing facility I >> added to javac in JDK 6 as an alternate way to explore language >> changes (together with an agent API to rewrite javac internal >> classes!) . However, way back before JDK *5* shipped in 2005, we at >> Sun recognized that annotation processors by themselves would be a >> possible way to implement certain kinds of de facto language changes. >> The apt tool and later javac were always designed to be general meta- >> programming frameworks not directly tied to annotations; for example, >> an annotation processor can process a type containing no annotations >> to, say, enforce a chosen extra-linguistic check based on the >> structure of the program. >> >> As an example of what can be done just using annotation processing, >> long-time annotation processing hacker Bruce Chapman implemented >> "multi-line strings" as part of his rapt project [5]; the value of >> the >> string is populated from a multi-line comment. After repeatedly >> outlining how it would be possible to do so on the annotation >> processing forum [6], I've gotten around to hacking up a little >> proof- >> of-concept annotation processor based implementation of Properties. >> [7] The user writes code like >> >> public class TestProperty extends TestPropertyParent { >> protected TestProperty() {}; >> >> @ProofOfConceptProperty >> protected int property1; >> >> @ProofOfConceptProperty(readOnly = false) >> protected long property2; >> >> @ProofOfConceptProperty >> protected double property3; >> >> public static TestProperty newInstance(int property1, >> long property2, >> double property3) { >> return new TestPropertyChild(property1, property2, property3); >> } >> >> } >> >> and the annotation processor generates the superclass and subclass to >> implement the desired semantics, including the getter and setter >> methods, etc. Using annotation processors in this way is a bit >> clunky >> compared to native language support, but if people want to >> experiment, >> the capabilities have been standardized as part of the platform since >> JDK 6. >> >> It is technically possible to take the OpenJDK sources and >> construct a >> version of javac that accepts language extensions; after all, this is >> how we generally evolve the language and also how the JSR 308 changes >> were developed before going back into the JDK 7 code base. >> Additionally, the IcedTea project and the shipping of OpenJDK 6 in >> Linux distributions has provided an existence proof that folks other >> than Sun can take the entire OpenJDK code base, add various patches >> and additional components to it, and ship it as a product. >> >> Given the OpenJDK sources Sun has published, subject to the license >> and trademark terms and conditions, anyone is free to implement and >> use language changes, *as long as* they assume the costs and >> responsibilities for doing so. Experimentation has long been >> encouraged and experiences from experiments using language changes on >> real code bases would certainly better inform language evolution >> decisions. Unfortunately, others have generally not done these >> experiments, or if the experiments have been done, the results have >> not be shared. >> >> I also do not have the power to prevent others from using non-Java >> languages on the JVM or to force others to run anything on the JVM, >> nor would I want to exercise such powers even if I had them. Indeed, >> for some time Sun has endorsed having additional languages for the >> platform and the main beneficiary of John Rose's JSR 292 work will >> not >> be the Java language, but all the non-Java languages hosted on top of >> the JVM. >> >> I do have the authority to speak on what Sun will and will not spend >> our resources on in relation to Project Coin, certainly a right any >> organization reserves to do with its resources. >> >> If there are frustrations waiting for Java language changes, I assure >> you there are also frustrations working on Java language changes. >> For >> example, I find it frustrating (and self-inconsistent) that people >> state "I don't have technical expertise in this area" while >> simultaneously expecting their preferences to be selected without any >> contribution on their part. [8] >> >> Finally, going back to a white paper from 1996, the design of Java >> quite intentionally said "No!" to various widely-used features from >> the C/C++ world including a preprocessor and multiple inheritance. >> Again since the beginning, Java admittedly borrowed features from >> many >> other established languages. [9] Given the vast number of potential >> ways to change the language that have been proposed, many language >> changes will continue to be called and few will continue to be >> chosen. In any endeavor there is a tension to balance stability and >> progress. For the Java language, given the vast numbers of >> programmers and existing code bases, we try to err on the side of >> being conservative (saying "No." by default) first to do no harm, but >> also to preserve the value of existing Java sources, class files, and >> programmer skills. >> >> There are many other fine languages which run on the JVM platform and >> I expect the Java language to continue to adopt changes, big and >> small, informed both by direct experiments with prototypes and by >> experiences with other languages. >> >> -Joe Darcy >> Project Coin Lead >> >> [1]http://blogs.sun.com/ahe/entry/javac_open_sourced >> >> [2]https://ksl.dev.java.net/ >> >> [3]http://blogs.sun.com/jag/entry/compiler_fun >> >> [4]https://kijaro.dev.java.net >> >> [5]https://rapt.dev.java.net/;see also Bruce'shttps:// >> hickory.dev.java.net/ >> >> [6]http://forums.sun.com/forum.jspa?forumID=514 >> >> [7]http://blogs.sun.com/darcy/entry/ >> properties_via_annotation_processing >> >> [8]http://blogs.sun.com/darcy/entry/project_coin_final_five#comments >> >> [9]http://java.sun.com/docs/white/langenv > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---