外文文獻翻譯發(fā)表日期2009年10月_第1頁
外文文獻翻譯發(fā)表日期2009年10月_第2頁
外文文獻翻譯發(fā)表日期2009年10月_第3頁
外文文獻翻譯發(fā)表日期2009年10月_第4頁
外文文獻翻譯發(fā)表日期2009年10月_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

EvolvingJavaWithoutChangingtheIn"TheFeelofJava"JamesGoslingstatedthat:Javaisabluecollarlanguage.It'snotPhDthesismaterialbutalanguageforajob.JavafeelsveryfamiliartomanydifferentprogrammersbecauseIhadaverystrongtendencytopreferthingsthathadbeenusedalotoverthingsthatjustsoundedlikeagoodidea.TheextraordinarysuccessofJavaoffersweighttothenotionthatthiswasasensibleapproach,andifitremainsanimportantgoalforJavatoday,thenitmakessensethatthelanguageshouldcontinuetoevolverelativelyslowly.Inadditiontothis,thefactthatJavaisamature,widelyusedlanguagecausesitsevolutiontobefraughtwithdifficulty.Foronething,eachfeatureaddedtothelanguagecanchangethewayitfeelsinsubtleandoftenunpredictableways,riskingalienatingdeveloperswhohavealreadyadopteditastheirlanguageofchoice.Foranother,afeaturethatmakesperfectsenseonitsownmayinctwithotherfeaturesofthelanguageinawkwardorunexpectedways.Worse,oncealanguagefeaturehasbeenaddeditisallbutimpossibletoremoveevenifitturnsouttobedetrimentaltothelanguageasawhole.Tojustifyaddinganewfeature,alanguagedesignermustbehighlyconfidentthatitwillbeoflongtermbenefittothelanguageratherthanashorttermorfashionablesolutiontoaproblemthat esredundant.Tomitigatetheriskalanguagedesignerwilltypicallyexperimentbycreatingaseparatelanguageorbranch,suchasthePizzalanguageusedtoexperimentwithJava'sgenerics,priortotheirimplementation.Theproblemwiththisapproachisthattheaudienceforsuchexperimentsisbothsmallandself-selecting;obviouslytheywillallbeinterestedinlanguagefeatures,andmanymaybeacademicsorresearchers.Anideawhichyswelltosuchanaudiencemaystillybadlywhenitisincorporatedintothemainlanguageandgeneralprogrammersstarttoworkwithit.Togetasenseofthis,considertheclosuresdebatethatbecamesoheatedforJavaImplementationsforthemainproposals(andsomeothers)havebeenavailableforsometimebutnoconsensushasemerged.InconsequenceSundecidedthatJDK7willnotgetfullclosuressupport.ThecoreargumentcamedowntowhetherJavahad eascomplexasitcouldaffordtobewhengenerics(andinparticularthewildcardsyntax)wereaddedtoJava5;whethertheadditionoffullsupportforclosureswasjustifiedwhenJavaalreadyhasamorelimitedformthroughanonymousinnerclasses.Twoimportantusecasesforaddingfullclosuressupportweretosimplifyworkingwiththefork/joinAPIthatisbeingaddedtoJDK7toimprovemulti-coreprogramming,andtohelpwithresourceclean-up.JoshBloch'sARMblockproposal,whichisnowexpectedtobeinJDK7viaProjectCoin,offersanalternativesolutiontothelatterproblem.Dr.CliffClick'sresearchonascalable,non-blockingprogrammingstyleforJavaoffersanalternativeapproachtofork/jointhatmaybemoreappropriateasthenumberofprocessorcoresincreases.Ifthisweretohappen,thentheusesforclosuresinJavamayarguablybetoolimitedtojustifytheirinclusion.Itremainsimportantthoughthataprogramminglanguagecontinuestodevelopatsomelevel.ThisarticlethereforeexaminesthreealternativetechniquesforaddingnewlanguagefeaturestoJavathatdon'trequirechangestothelanguageitself-usingacustomSpecificLanguage,exploitingtheJava6annotationprocessortoaddoptionallanguagefeaturesviaalibrary,andmovingthesyntacticsugarfromthelanguagetotheIDE.Eachoffersthepotentialtoallowawideaudienceofmainstreamdeveloperstoexperimentwiththenewfeaturesoverthemediumterminanon-invasivemanner,andthebestideascanthenfilterdownforinclusioninthecoreCustomThemostwidelydiscussedofthethreeisthe-SpecificLanguageorDSL.Thereissomedisagreementonexactlywhatthetermmeans,butforthepurposesofthisdiscussionwe'llrefertoitsimplyasalanguagethathasbeencreatedwithanarrowfocustosolveaparticularproblem,ratherthanasageneralpurposelanguagedesignedtosolveeverycomputingproblem.AssuchwewouldexpectaDSLtobenon-Turingcompleteandforthemostpartthisisthecase.Thereareedgecasesofcourse.Postscript,forexample,isaTuringcompletelanguagebutalsoqualifiesasaDSLusingourdefinition.Astheaboveexamplealsoillustrates,theideaofaDSLisnotnew.OtherfamiliarDSLsincludeRegularExpressions,XSLT,Ant,andJSP,allofwhichrequiresomesortofcustomparsertoprocessthem.MartinFowleralsosuggeststhatfluentinterfaces/APIscanbeconsideredasecondtypeofDSL,whichhereferstoasaninternalDSL.HisdefinitionisthataninternalDSLisdevelopeddirectlywithinthehostlanguage.ThiswasacommonpracticeamongstLispandSmalltalkprogrammers,andmorerecentlytheRubycommunityhasbeenpopularisingthetechnique.Whilstmanywell-knownDSLsarecommerciallydevelopedandmaintained,someenterprisedevelopmentteamshaveusedthetechniquetocreatealanguagethatallowsthemtorapidlyexploreaspectsoftheirproblem.Itisn'thoweverascommonasitmightbe,perhapsbecauseDSLshaveafairlyintimidatingbarriertoentry.Theteamhastodesignthelanguage,buildtheparserandpossiblyothertoolstosupporttheprogrammingteam,andtraineachnewdeveloperthatjoinstheteamonhowtheDSLworks.HeretheemergenceoftoolstospecificallysupportDSLdevelopmentcouldsignificantlychangethelandscape.IntentionalSoftware'sIntentionalWorkbench,whichhasbeenindevelopmentlongerthanJavahasbeenaround,isthefirstsignificantimplementationofsuchatool.TheprojectstartedlifeatResearch,andDr.CharlesSimonyi's1995paper"TheDeathofComputerLanguages,theBirthofIntentionalProgramming"describeshisvision.In2002SimonyifoundedIntentionalSoftwaretocontinueworkingonhisideasandahugelyimpressivedemoofthesystemisavailable.Theproductitselfisat1.0status,butaccessisrestrictedtoverylimitedpartners.Othersoftwarehousesarealsoexploringtheconcepts,amongstthemJetBrains,wellrespectedfortheirInliJIDEAJavaIDE,whohaverecentlyreleasedthe1.0versionoftheirMetaProgrammingSystem(MPS).MPSdoesn'tuseaparser,insteadworkingwiththeSyntaxTree(AST)directly.Itprovidesatext-likeprojectionaleditorwhichallowstheprogrammertomanipulatetheAST,andisusedtowritelanguagesandprograms.Foreachnodeinthetreeatextualprojectioniscreated-astheprogrammerworkswiththeprojection,thechangeisreflectedinthenode.Thisapproachallowsyoutoextendandembedlanguagesinanycombination(oftenreferredtoaslanguagecomposing)promotinglanguagere-use.JetBrainsareusingtheproductinternallyandhaverecentlyreleasedYouTrack,abugtrackingproductdevelopedusingthesystem.TheJava6AnnotationWhilstDSLsarelesscommoninmoremainstreamlanguagessuchasJavathantheyareinRuby,SmalltalkandLisp,recentdevelopmentsintheJavalanguage,inparticulartheannotationprocessorwhichwasaddedinJava6,offernewpossibilitiesfordeveloperslookingtousetheminJava.TheJPA2.0criteriaAPIthatwillshipaspartofJavaEE6,itselfaDSL,offersanexample.Heretheannotationprocessorbuildsupametamodeltypeforeachpersistentclassintheapplication.WhilstitwouldbeperfectlypossibleforthedevelopertohandcraftthemetamodelinJava,itwouldbebothtediousanderrorprone.Theuseoftheannotationprocessoreliminatesthatpainand,sincetheannotationprocessorisbuiltintoJava6,theapproachrequiresnospecificIDEsupport–anIDEdelegatestotheannotationprocessortriggeredbythecompiler,andthemetadatamodelisgeneratedonthefly.Usingtheannotationprocessoritisalsopossibleforalibrarytoaddanewlanguagefeature.BruceChapman'sprototype"noclosures"proposal,forexample,usesthetechniquetoprovideamechanismforcastingamethodtoaSingle Method(SAM)typewhichcompilesontopofJava6.DuringourconversationChapmanpointedoutthattheSAMtypealsosupportsvariables,akeyaspectofaclosure:ThemethodbodycandeclareadditionalparametersbeyondthoserequiredfortheSingleMethodusingthe@As.Additionalannotation.TheseparameterscanhavevaluestothematthepointwhereyouobtainaninstanceoftheSAMtype,andarethenpassedtothemethodeachtimeitisinvoked.ChapmanalsosetuptheRaptprojecttoexploreotherusesofthetechnique,andhasaddedimplementationsfortwolanguagechanges-MultilineStringsandXMLlils-thatwereconsideredforJDK7butwon'tnowmakeitintothefinalrelease.Javacouldevengetaformofclosuressupportusingthisapproach.Whenaskedaboutthis,Chapmansaid:WearejustfinishingaSwingprojectwhichweuseditfor.Wehavefoundacoupleofminorbugsaroundgenerictypes,onerecentlydiscoveredremainstobefixedbutotherthanthatitseemsquitenicetouse,andnobodyhasbeenwantingtorushbacktouseconventionalanonymousinnerclasses.ProjectLombok,anotherprojectexploringthetheannotationprocessor,pushesthetechniquestillfurther.IneffectLombokusesannotationprocessingasahooktorunaJavaagentthatre-writesvariousjavacinternalsbasedontheannotations.Sinceitismanipulatinginternalclassesitisprobablynotsuitedtoproductionuse(internalclassescanchangeevenbetweenminorreleasesoftheJVM)buttheprojectisaneye-openingexampleofjustwhatcanbedoneusingtheannotationprocessor,including:Supportforpropertiesusingapairof@Getterand/or@Setterannotationswithvaryingaccesslevels,e.g.@Setter(AccessLevel.PROTECTED)privateStringname;The@EqualsAndHashCodeannotation,whichgenerateshashCode()andequals()implementationsfromthefieldsofyourobjectThe@ToStringannotation,whichgeneratesanimplementationofthetoString()The@datamethod,whichisequivalenttocombining@ToString,@EqualsAndHashCode,@Getteronallfields,and@Setteronallnon-finalfieldsalongwithaconstructortoinitializeyourfinalfieldsOtherlanguageexperimentation,suchasremovingcheckedexceptionsfromJava,canalsobedoneusingthisapproach.Whilsttheannotationprocessortechniqueopensupa enewroutetolanguageexperimentation,careneedstobetakenthatthegeneratedcodecanbeeasilyreadbydevelopers,notjustbythemachine.Chapmanmadeanumberofsuggestionsduringourconversation:Generatesourcecodenotbytecode,andpayattentiontoformatting(indentingespecially)inthegeneratedcode.Thecompilerwon'tcarewhetheritisallononelineornot,butyouruserswill.Ievensometimesaddcommentsandjavadocinthesourcecodegeneratedbymyannotationprocessorswhereappropriate.Hopefullyifthetechnique esmoreprevalentIDEswillalsomakeiteasiertoviewthecodethatistobegeneratedatcompiletime.SyntacticSugarintheBruceChapmanalsotouchesonourthirdtechnique-movingthesyntacticsugarfromthelanguagetotheIDE-inhisblogandheelaboratedonhisideasduringourconversation.ItisalreadyroutineforJavaIDEstocreateportionsofboilertecodeforyousuchasthegettersandsettersofaclass,butIDEdevelopersarebeginningtopushtheconceptfurther.JetBrains'InliJ9offersatersecodeblocksyntaxforinnerclassessimilartoaclosure,whichadevelopercanalsotype.Actinglikecodefolds,thesecanthenbeexpandedintothefullanonymousinnerclasseswhichthecompilerworkswith-thisallowsdeveloperswhoprefertostickwiththestandardanonymousinnerclasssyntaxtodoso.Asimilarplug-inforEclipsealsoexists.Thekeypointhereisthatthe"alternate"syntaxisjustaviewoftheactualcodewhichthecompilerandanysourcemanagementtoolscontinuetoworkwith.Thusthedevelopershouldbeabletoviewsbetweeneitherform(likeexpandingorcollapsingacodefold),andanyonewithoutaccesstothedefinitionofthesugarjustseesthenormalJavacode.Chapmanwrites:Therearemanydetailstoworkoutinordertomakethiseasilyaccessible,butlongtermIseedevelopersrelativelyeasilydefiningatwowaysugaring/desugaringtransformation(jackpotisagoodstartforhowthismightbedone),tryingthemout,evolvingthemandsharingthegoodoneswithcolleaguesandthecommunity.Theadvantagesofthisarealmostthesameasforalanguagechange,withoutthedisadvantages.Theverybestcould eubiquitousandthenformthebasisofanactuallanguagechangeifnecessarytogetridofanyremaining"noise"notpossiblewiththisapproach.Sincesyntacticsugarhastomaptoanother(moreverbose)languagefeatureitcannotoffercompleteclosuresupport;therearesomefeaturesofBGGAclosuresforexamplethatcannotbemappedtoanonymousinnerclasses,andsotheycouldn'tbeimplementedthroughthisapproach.Neverthelesstheideaopensupthepossibilityofhavingvariousnewsyntaxesforrepresentinganonymousinnerclasses,similartoBGGAsyntaxorFCMsyntax,andallowingdeveloperstopickthesyntaxtheywanttoworkwith.Otherlanguagefeatures,suchasthenull-safeElvisoperator,couldcertainlybedonethisway.ToexperimentfurtherwiththeideathisNetBeansmodulealsodevelopedbyChapman,iswhathedescribesasa"barelyfunctional"prototypeforPropertiesusingthisapproach.Inlanguagedevelopmentthereisalwaysatrade-offbetweenstabilityandprogress.Theadvantagethatallofthesetechniquesbringisthattheydon'taffectthetformorthelanguage.Inconsequencetheyaremoretoleranttomistakesandarethereforemoreconducivetorapidandradicalexperimentation.Withdeveloperslyabletoexperimentweshouldbegintoseemorepeopleseparaytacklingthepoorsignaltonoiseratioofsomecommonboilertesuchastheanonymousinnerclasssyntax,mixingandevolvingtheseideastosomeoptimumformthataddsthemostvalueinthemostcases.ItwillbefascinatingtoseehowdevelopersusethesedifferentapproachestopushtheJavatforminnewdirections.不改變語言的前提下推進JavaJamesGosling在“TheFeelofJava”中:Java是一種藍領(lǐng)語言,它并不是博Java,因為我有充滿了。一方面,每個特性添加到語言中都有可能造成不可預(yù)知到,這么做會疏的。他們對語言特性很感,很多人是學(xué)者或者研究員。但

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論