文章詳情頁(yè)
Java之父:為Java發(fā)展驚奇 和腳本語(yǔ)言走得更近
瀏覽:245日期:2024-03-18 14:47:53
十年前,Sun微系統(tǒng)公司將Java搬到了世人面前,這是首次協(xié)助企業(yè)建立具有前瞻性的思想的一款軟件,隨后Java迅猛擴(kuò)散,深入到計(jì)算機(jī)業(yè)的幾乎每個(gè)角落。這項(xiàng)技術(shù)的幕后英雄,就是本文采訪的James Gosling。 上個(gè)世紀(jì)90年代初,Gosling發(fā)起并領(lǐng)導(dǎo)了一個(gè)名為Green的項(xiàng)目,此項(xiàng)目最終演變?yōu)镴ava。Java 的基本理念是創(chuàng)造一種可以在不需修改的情況下執(zhí)行在各種運(yùn)算設(shè)備上的程序。例如,一個(gè)裝備了Java虛擬機(jī)器的手機(jī)游戲軟件也應(yīng)該可以在別的手機(jī)上使用。 過(guò)去十年,這項(xiàng)技術(shù)身經(jīng)百戰(zhàn)。早期的合作伙伴微軟發(fā)現(xiàn)Java程序的平臺(tái)無(wú)關(guān)性對(duì)Windows帶來(lái)不利,于是稍做修改,另創(chuàng)適合Windows的Java版本,從而引發(fā)了七年的官司。由于消費(fèi)性設(shè)備、PC及服務(wù)器需要有不同的Java,Sun一直努力想找到合適的方法與其他各方分享Java的掌控權(quán)。以至于到現(xiàn)在,包括IBM在內(nèi)的許多公司都在不斷呼吁Sun開(kāi)放Java主體部分的源碼。 盡管如此,Java已經(jīng)在計(jì)算機(jī)領(lǐng)域站穩(wěn)腳跟。Sun首席執(zhí)行官Scott McNealy可能還是會(huì)發(fā)布冠冕堂皇的演說(shuō),但在上周二Sun JavaOne大會(huì)上他的一番講話話卻十分中肯,他說(shuō):“七、八年前的JavaOne演說(shuō)現(xiàn)在聽(tīng)起來(lái)真是寒磣,我們那時(shí)實(shí)在是太小看它了。我們根本不知道這項(xiàng)技術(shù)要做什么。 Gosling全程參與了JavaOne上周的活動(dòng),現(xiàn)在的他頭發(fā)已經(jīng)花白,但牛仔褲、T恤衫和Birkenstock運(yùn)動(dòng)鞋的裝束始終未變。“他看來(lái)像是一個(gè)老嬉皮,Gosling的女兒在周二大會(huì)的影片中現(xiàn)身說(shuō)法,惹得這位知天命的Java教父在臺(tái)上滿臉通紅。 以下是Gosling暢談Java理念的記錄。 問(wèn):在Java的設(shè)計(jì)之初,你心中有想像過(guò)它會(huì)是什么樣子嗎? Gosling:回想設(shè)計(jì)Green項(xiàng)目的時(shí)候,我們對(duì)長(zhǎng)遠(yuǎn)未來(lái)大談了許多。我們?cè)鴮戇^(guò)一本很多場(chǎng)景組成的小冊(cè)子,許多Java設(shè)計(jì)都是依據(jù)這些場(chǎng)景構(gòu)想出來(lái)的。我覺(jué)得那比較像是科幻小說(shuō)的做法,你從來(lái)都不知道世界會(huì)走向何方,你可以任意預(yù)測(cè)技術(shù)的發(fā)展,但想象歸想象,和實(shí)際還是有很大差距的。我非常相信摩爾定律會(huì)成為現(xiàn)實(shí),輕而易舉地而把一個(gè)個(gè)的點(diǎn)連成一了快速傳播信息的網(wǎng)絡(luò)。 我大膽預(yù)測(cè)許多科技一定會(huì)那樣發(fā)展,當(dāng)然會(huì)只是存在安全、可靠及便攜等方面的問(wèn)題。我們參與對(duì)這些問(wèn)題的絕大部分給出答案,最后的結(jié)果一定會(huì)讓大家驚奇萬(wàn)分。 問(wèn):最初,你的Green項(xiàng)目不是把重點(diǎn)放在消費(fèi)性電子設(shè)備上嗎? Gosling:項(xiàng)目設(shè)計(jì)初期,我們花費(fèi)很多時(shí)間和各界人士交談,我們看到同樣的問(wèn)題發(fā)生在消費(fèi)性電子設(shè)備、新興手機(jī)及嵌入式控制系統(tǒng)領(lǐng)域。我們和電梯、機(jī)車、電力控制系統(tǒng)的制造商及汽車界的工作人員交談過(guò)。我們也和VCR和電視機(jī)開(kāi)發(fā)商交流過(guò)。在Green項(xiàng)目初期,我們決定做個(gè)原型,我們必須把精力集中在這一點(diǎn),我們選擇了消費(fèi)性電子設(shè)備,很大程度上是因?yàn)檫@個(gè)領(lǐng)域更有趣。 雖然許多人都覺(jué)得很這個(gè)計(jì)劃有意思,但我們還是疑惑是不是能把這個(gè)計(jì)劃用在自我支持上?差不多同時(shí)期,時(shí)代華納為全方位服務(wù)網(wǎng)絡(luò)公開(kāi)招標(biāo),那正是我們夢(mèng)寐以求的事──網(wǎng)絡(luò)連到家庭、在網(wǎng)絡(luò)上傳遞語(yǔ)音和影像、內(nèi)容互動(dòng)等等。“是的!這正是我們想要的,是我們?yōu)橹畩^斗的目標(biāo)!于是我們就一頭扎了進(jìn)來(lái)。 問(wèn):那實(shí)際上是在互動(dòng)電視的發(fā)展初期吧? Gosling:沒(méi)錯(cuò),那真是一個(gè)具有遠(yuǎn)見(jiàn)的計(jì)劃。很多人都說(shuō):“我們也想這樣做。 時(shí)代華納的計(jì)劃因?yàn)楦鞣N原因后來(lái)變得十分奇怪,我們沒(méi)能拿下他們的標(biāo)。回想起來(lái),我還很慶幸我們那時(shí)輸了。贏家SGI后來(lái)不知花了多少錢做那個(gè)單子,但沒(méi)得到多大回報(bào)。 問(wèn):你認(rèn)為Java是用在這種狹窄領(lǐng)域上的技術(shù)呢,還是可能深入到在整個(gè)電腦業(yè)的技術(shù)? Gosling:我們并沒(méi)有計(jì)劃要把它推向整個(gè)業(yè)界,但我們看到整個(gè)產(chǎn)業(yè)在做類似的事,每個(gè)系統(tǒng)內(nèi)部都裝有數(shù)碼控制器。但是存在著嚴(yán)重的相互操作性問(wèn)題,所有東西都在相互整合,這事實(shí)引起了我們的注意。就像你站在暴力賽車場(chǎng)外看到所有車子都在朝競(jìng)賽場(chǎng)中心開(kāi)去,一定會(huì)撞成一團(tuán)糟。 問(wèn):Java解決了相互操作性的問(wèn)題,但微軟另辟蹊徑創(chuàng)出了.Net,引發(fā)了更高層的兼容性問(wèn)題。有什么方法可以把.Net 及Java整合起來(lái)嗎? Gosling:某種程序(比如Web services),就像一座橋梁。但是我們不能把不愿融在一起的東西硬往一塊拉。微軟很明顯地就是想要走自己的路,他們向來(lái)喜歡標(biāo)新立異。他們?cè)鳛镴ava社區(qū)里非常優(yōu)秀而可愛(ài)的成員,可惜只持續(xù)了半年多,后來(lái)他們認(rèn)為這樣不好。 問(wèn):那是1995年還1996年的事吧? Gosling:應(yīng)該是在1996年。共同合作雙方的意向。對(duì)微軟而言這是一個(gè)長(zhǎng)期的教育過(guò)程,他們好像不太喜歡這種方式。他們貌似在跟你走更近,例如我們之間合作開(kāi)發(fā)了不少不錯(cuò)的產(chǎn)品,但其實(shí)彼此間還隔了一步之遙。我們之間的確有共通點(diǎn),像Web services或相互操作性,都是很好的說(shuō)明。 問(wèn):你們不能把用C#開(kāi)發(fā)成的.Net程序上融入到Java虛擬機(jī)器中嗎? Gosling:我們的差別在于他們大量使用這種不安全的方式,但我堅(jiān)決認(rèn)為不應(yīng)該用不安全的方式。問(wèn):不安全?您的意思是…… Gosling:源代碼有受管的和不受管的之分。受管源代碼是可以確保安全與穩(wěn)定性的,而不受管的源代碼你無(wú)法保證什么。有時(shí)正確的做法也會(huì)引起內(nèi)存損害,程序運(yùn)作十分不容易分析。C程序是一種不受管程序,可能莫名其妙就掛了,最后造成安全上的重大影響。使用C語(yǔ)言,你可以假造事物的身份,但用Java,是絕不容許偽造身份的。問(wèn):微軟為什么想加入Java Community Process(JCP)? Gosling:我不清楚,你可以問(wèn)問(wèn)Sun 首席技術(shù)官Greg Papadopoulos。 問(wèn):你希不希望看到雙方回到當(dāng)初半年多的密切合作狀態(tài)? Gosling:我很期待看到他們和JCP其他成員合作。 問(wèn):你們剛把Java應(yīng)用服務(wù)器軟件作為玻璃魚(yú)開(kāi)放源碼,是不是也有可能把Java標(biāo)準(zhǔn)版(Java SE,Java的基礎(chǔ))開(kāi)源發(fā)布? Gosling:或許會(huì)的。我們過(guò)去為Java SE做的一切和開(kāi)放源代碼其實(shí)差不多,主要差別只是在于我們的授權(quán)要求要有測(cè)試。在做過(guò)調(diào)查后,我們認(rèn)為測(cè)試是非常重要的。但開(kāi)源界人士一方面說(shuō)他們會(huì)接受測(cè)試,另一方面又說(shuō)他們只是不同意測(cè)試。我們可能有一天會(huì)開(kāi)放Java SE的源代碼,主要得考慮怎么做比較好。 有很多事讓我們十分緊張。許多人都有過(guò)使用JavaScript的經(jīng)驗(yàn),不同JavaScript間也存在相當(dāng)嚴(yán)重的相互操作性問(wèn)題,對(duì)網(wǎng)頁(yè)制作者來(lái)說(shuō)是一大夢(mèng)魘。Java界的人都得拿著JavaScript手冊(cè)才能做事,真是太可怕了。 問(wèn):像BEA等公司會(huì)加入一些東西使得Java程序只有在他們的應(yīng)用服務(wù)器上才能執(zhí)行,到頭來(lái)Java也會(huì)變得不可攜,是這樣的嗎? Gosling:沒(méi)錯(cuò),這的確是個(gè)問(wèn)題。但至少,這還只是在特別功能上而已。Java有個(gè)包命名(package naming)工具。當(dāng)用API時(shí),你得申明用的是公開(kāi)標(biāo)準(zhǔn)的API──像Java等──或是某公司的專有API──例如com.bea,作為一個(gè)開(kāi)發(fā)者就一定要十分小心。開(kāi)發(fā)人員真得很在乎可攜性,每次使用com.bea你會(huì)覺(jué)得很難受。JavaScript的一個(gè)困難就是無(wú)法判斷你用的是不是某個(gè)瀏覽器專用的功能。 另外,事情也會(huì)演變成某個(gè)應(yīng)用伺服器廠商具有一些想法,而大家都覺(jué)得不錯(cuò),這個(gè)想法就會(huì)送到JSR(Java Specification request),那么這家廠商第二或第三版本也會(huì)是在標(biāo)準(zhǔn)的Java框架內(nèi)。 問(wèn):難道不能在開(kāi)放Java源代碼后通過(guò)品牌名稱來(lái)控制兼容性嗎?比如說(shuō),要求在其Java名稱被充許前,就取得認(rèn)證? Gosling:這點(diǎn)我們做過(guò)許多討論。Sun是一個(gè)十分民主的公司,有人認(rèn)為這個(gè)方法可行,有人反對(duì),目前反對(duì)者占多數(shù)。 問(wèn):你持反對(duì)觀點(diǎn)嗎? Gosling:我有時(shí)是站在贊成的一方,不過(guò)我得承認(rèn)我常常反復(fù)不定。 問(wèn):能將五年前的Java技術(shù)和今天的做一比較嗎? Gosling:最大的差別在于Java已經(jīng)變成許多大型的關(guān)鍵的系統(tǒng)的中心,這就需要保守一點(diǎn)。當(dāng)你的系統(tǒng)是一個(gè)每晚結(jié)算數(shù)百億筆交易的銀行系統(tǒng)時(shí),小小一個(gè)bug也會(huì)釀成巨禍。早期我們有很多異想天開(kāi)的點(diǎn)子,但現(xiàn)在我們得考慮到哪些人會(huì)受到我們影響。現(xiàn)在一切都要考慮周全才行。 問(wèn):通過(guò)Groovy等項(xiàng)目,Sun正在讓Java世界和腳本語(yǔ)言走得更近,但坦白講我不太清楚編程語(yǔ)言和像PHP、Perl、Python這樣的腳本語(yǔ)言有什么不同。 Gosling:你的困惑其實(shí)是有根據(jù)的。世界上有太多松散的語(yǔ)言,給不同人提供不同的用途。 當(dāng)人們提到腳本語(yǔ)言時(shí),往往想到的是可以很快讓開(kāi)發(fā)人員把東西拼湊好,很快拿出去跟客戶做演示。程序的性能怎么樣、擴(kuò)充性如何,或是能不能建成一個(gè)大系統(tǒng)到在其次才考慮。但在Java設(shè)計(jì)上,我們不太在乎能不能很快寫成一個(gè)程序出門去做演示,我們?cè)诤醯氖悄懿荒芎芸鞂懗梢粋€(gè)大型的具有良好擴(kuò)充性的程序,到最后我們做的決定往往比較困難實(shí)現(xiàn)。一般來(lái)講,在設(shè)計(jì)上,腳本語(yǔ)言比編程語(yǔ)言要容易。 Java設(shè)計(jì)有兩個(gè)層次:Java虛擬機(jī)和Java語(yǔ)言。難點(diǎn)在Java虛擬機(jī)及其以下的部分。如果把腳本語(yǔ)言用在Java虛擬機(jī)上,就可以兼得兩者的優(yōu)點(diǎn)。 問(wèn):你是這么做嗎? Gosling:是的。Groovy開(kāi)發(fā)的東西可以獲得所有的Java庫(kù),Java應(yīng)用也可以使用Groovy。
標(biāo)簽:
Java
相關(guān)文章:
1. JavaScript實(shí)現(xiàn)簡(jiǎn)單的彈窗效果2. 我所理解的JavaScript中的this指向3. javascript實(shí)現(xiàn)貪吃蛇小練習(xí)4. JavaScript中new操作符的原理示例詳解5. Java commons-httpclient如果實(shí)現(xiàn)get及post請(qǐng)求6. 一文帶你徹底理解Java序列化和反序列化7. Java基于字符界面的簡(jiǎn)易收銀臺(tái)8. Java源碼解析之SortedMap和NavigableMap9. Java xml數(shù)據(jù)格式返回實(shí)現(xiàn)操作10. 關(guān)于Java下奇怪的Base64詳解
排行榜

網(wǎng)公網(wǎng)安備