




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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是一種藍領語言,它并不是博Java,因為我有充滿了。一方面,每個特性添加到語言中都有可能造成不可預知到,這么做會疏的。他們對語言特性很感,很多人是學者或者研究員。但
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業設計與現代制造業的關系
- 工業節能技術與發展方向
- 工作壓力下的營養補充策略
- 工業設備維護與優化管理
- 工作空間環境優化以增強工作成效
- 工作場所的變革與創新
- 工程檢測中水泥檢測技術培訓
- 工程機械結構設計與分析
- 工程設計中智能化技術的應用前景
- 工程機械的結構設計與可靠性分析
- 數字化解決方案設計師職業技能競賽參考試題庫(含答案)
- 《餐飲供應鏈智能管理系統》
- 大創結題報告范文
- GB/T 24821-2024餐桌餐椅
- JGJT46-2024《施工現場臨時用電安全技術標準》條文解讀
- 2024ESC心房顫動管理指南解讀
- 2023年上海浦東新區公辦學校教師招聘考試真題
- 電信人工智能大學習抽測考試題庫(含答案)
- 中華傳統文化融入初中地理大概念單元教學的探究
- 第二單元 公頃和平方千米(講義)-2024-2025學年四年級上冊數學人教版
- 2024-2030年中國擴展現實(XR)行業未來展望與投融資狀況分析報告
評論
0/150
提交評論