版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙人撤資合同
- 2024年甘肅客運從業(yè)資格證實操考試題庫及答案
- 論電子商務(wù)的發(fā)展論文
- 追加訴訟請求申請書4篇
- 2024中山市勞動合同范文
- 2024個人貸款抵押房屋保險合同
- 2024勞務(wù)合同范本樣本勞務(wù)合同范本大全
- 2024的國際貨物買賣合同解釋與分析
- 規(guī)劃課題申報范例:“三教”改革背景下教材改革的實踐研究(附可修改技術(shù)路線圖)
- 深圳大學(xué)《游泳俱樂部》2021-2022學(xué)年第一學(xué)期期末試卷
- 野獸派 beast 花店 調(diào)研 設(shè)計-文檔資料
- 水泵房每日巡視檢查表
- 杭州市區(qū)汽車客運站臨時加班管理規(guī)定
- 墊片沖壓模具設(shè)計畢業(yè)設(shè)計論文
- 常見矩形管規(guī)格表
- 冷庫工程特點施工難點分析及對策
- Python-Django開發(fā)實戰(zhàn)
- 小學(xué)道法小學(xué)道法1我們的好朋友--第一課時ppt課件
- 路由和波長分配PPT課件
- 光伏組件開路電壓測試記錄
- 配電箱安裝規(guī)范
評論
0/150
提交評論