有可能挑戰Java優(yōu)勢的四種技術(shù)發(fā)布者:本站 時(shí)間:2020-05-06 14:05:15
Java是一種杰出的產(chǎn)業(yè)開(kāi)發(fā)語(yǔ)言,這是因為它帶來(lái)了偉大的統一和對事實(shí)上以前并不存在的重要標準的關(guān)注。但是和所有語(yǔ)言一樣,Java將來(lái)也會(huì )褪色。依據我做的超越Java的研究,一個(gè)重復出現的主題是有越來(lái)越多的人相信Java已不再足夠的有效率。以下一組技術(shù)可以使你更有效率。他們不是對所有的工程都適合,但當被應用于適合的工程時(shí),他們是優(yōu)秀的工具。
1、動(dòng)態(tài)語(yǔ)言
動(dòng)態(tài)語(yǔ)言可以比像C++或Java這樣的靜態(tài)語(yǔ)言更加有效率。他們可以讓你用更少的語(yǔ)言表達更多的意思。這里,我會(huì )關(guān)注現在新出現最流行的動(dòng)態(tài)語(yǔ)言Ruby。用Ruby的"Hello, World"和Java的作一個(gè)比較:
puts "Hello, world." 這顯然既簡(jiǎn)單又明了。你不需要寫(xiě)一些其他的代碼去做這件事。下面是用Java語(yǔ)言的描述:
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!") } } 在Java中,類(lèi)型是靜態(tài)的。這就代表了編譯器要檢查所有的類(lèi)型;你必須建立和編譯一個(gè)完整的程序。在Ruby中,類(lèi)型是動(dòng)態(tài)的,所以你不需要去聲明他們,你可以馬上編寫(xiě)和運行他們。下面是用兩種語(yǔ)言描述的Fibonacci 序列:
First, Ruby:x1, x2 = 0, 1 //110.times do puts x2 x1, x2 = x2, x1+x2 //4end 注意到在第一、四行同時(shí)聲明兩個(gè)變量,讓你可以簡(jiǎn)潔地表達兩種不同的聲明形式。另外,注意到10是一個(gè)對象,它支持方法,如:times。再另外,在do和end之間是一個(gè)代碼塊。Ruby代碼塊可以讓你把代碼塊傳入方法。。這種技術(shù)導致了難以置信的效率和簡(jiǎn)潔的代碼。接下來(lái),看一看用Java實(shí)現的代碼:
class Fib { public static void main (String args[]) { int x1 = 0; int x2 = 1; int total = 1; for (int i=0; i<10; i++) { System.out.println(total); total = x1+x2; x1 = x2; x2 = total; } } } 你需要去聲明所有的變量,以及詳細地寫(xiě)出來(lái)你用for循環(huán)實(shí)現的迭代。每個(gè)變量都是獨立的,所以你必須有一個(gè)臨時(shí)變量用于存放total。
相比,動(dòng)態(tài)語(yǔ)言更為簡(jiǎn)潔。按照一個(gè)普通的規則,如果你可以寫(xiě)更少的代碼而不犧牲可讀性,這些代碼將導致更高的效率。(但是你不可以犧牲可讀性來(lái)達到這一步,我們可以以Perl舉例作為結尾。)
更為重要的是,動(dòng)態(tài)語(yǔ)言在Java開(kāi)發(fā)者想要去解決的重要問(wèn)題上表現得更好,如: 元編程。 Hibernate 使用元編程技術(shù)使對象持久化。
Spring使用元編程來(lái)為Java對象增加服務(wù),而免除你為他們構建額外支持的煩惱。在Rails框架上,當紅的Ruby利用了自己能力來(lái)構建某種已存的最有效率的應用開(kāi)發(fā)框架。
令人驚訝的是,許多Java開(kāi)發(fā)者采用了Ruby。Ant和Tomcat的發(fā)明者James Duncan Davidson正在Rails上使用Ruby,以及Java的暢銷(xiāo)書(shū)作者之一,JSP專(zhuān)家組的成員David Geary正在寫(xiě)一本關(guān)于Rails上的Rub的書(shū)y。許多在Java社區里有著(zhù)聰明思想的人都轉向使用像Ruby一樣的動(dòng)態(tài)語(yǔ)言。這是因為這種新出現的語(yǔ)言能更好的解決最有興趣的問(wèn)題。動(dòng)態(tài)語(yǔ)言將不會(huì )完全取代Java,但是他們會(huì )適合于解決小的,輕量級的問(wèn)題。
2、Continuation 服務(wù)
Web編程絕對是個(gè)的災難。在Java誕生十年后,我們仍舊不能構建一個(gè)使返回按鈕正確的框架。Web應用是無(wú)國界的,所以Web應用會(huì )發(fā)展得更好。但是很難去構建無(wú)國界的應用,而我們現有的框架不能給與我們足夠的幫助。
你使用大多數Java的Web框架時(shí),從根本上說(shuō),你構建了許多不相關(guān)的使用servlets或JSP技術(shù)的應用。然后通過(guò)手工保存對象來(lái)把他們集成起來(lái),這些對象就是你需要的,用來(lái)暫時(shí)存儲對象的會(huì )話(huà)。
Continuation是語(yǔ)言的構造器,它可以使你快速存儲某個(gè)線(xiàn)程的狀態(tài),過(guò)后執行這個(gè)線(xiàn)程?;贑ontinuation的web框架總體上是通過(guò)模擬一個(gè)監控狀態(tài)的應用來(lái)使web開(kāi)發(fā)變得更為容易。當你的應用需要從用戶(hù)那取得數據時(shí),這種框架使用continuation來(lái)自動(dòng)保存應用程序的狀態(tài)。如果用戶(hù)按下返回按鈕或者通過(guò)瀏覽器的歷史紀錄回到以前的頁(yè)面,應用程序可以重新讀取一個(gè)continuation。
基于continuation最好的框架是用動(dòng)態(tài)語(yǔ)言來(lái)開(kāi)發(fā)的。到目前為止,最健壯的框架是Seaside。他是基于一種Smalltalk的Squeak語(yǔ)言的框架。Seaside支持很好的調試功能,你可以實(shí)時(shí)檢查、調試以及在瀏覽器里改動(dòng)你的代碼。Borges、Iowa和Wee都是基于Ruby且支持continuation的框架。
Java不支持continuations,但是一些在特殊限制下構造的Java框架支持模擬continuations。這些框架具有用其他語(yǔ)言編寫(xiě)的continuations框架的某些特征。
流行的框架是用了一些高級的技術(shù),如:字節碼增強、反射以及特殊類(lèi)的裝載器。這些技術(shù)用Java部分地實(shí)現了continuations。
Cocoon 2在Rhino JavaScript 虛擬機中增加了continuations,用來(lái)模擬監控狀態(tài)的應用。
Spring Webflow使用了狀態(tài)機來(lái)提供對返回按鈕良好的支持,以及其他一些continuation服務(wù)的特征。
Lakeshore使用了懸掛的線(xiàn)程來(lái)模擬continuations。這種方法不像其他方法一樣有可擴展性,同時(shí)還缺乏對返回按鈕完整的支持,但是這些預計在將來(lái)都會(huì )具有。
每個(gè)月都會(huì )有新的框架出現。我認為在未來(lái)的三年內,我們都會(huì )使用支持基于continuations的方法的web開(kāi)發(fā)框架,這種框架是由一種語(yǔ)言或者其他語(yǔ)言編寫(xiě)的。
3、慣例超越配置
Java開(kāi)發(fā)者經(jīng)常探索用于改進(jìn)配置的方法。新的框架越來(lái)越多的使用Java 5批注來(lái)進(jìn)行配置。其他的框架是用一種不同的方法。Rails中的Ruby常用慣例來(lái)推斷需要在其他框架進(jìn)行配置的聯(lián)系。
例如:在結束的時(shí)候,一個(gè)叫BlogController且有一個(gè)show方法的Rails控制器,會(huì )自動(dòng)在blog_controller目錄里提交一個(gè)叫show.rhtml的視圖。Rails還使用命名慣例來(lái)綁定數據庫表里持久化的類(lèi)。默認情況下,Perosn類(lèi)會(huì )與用英語(yǔ)的復數people與表進(jìn)行匹配。
新的框架將會(huì )支持慣例,而不是配置。
4、元編程
就像前面提到的一樣,在Rails編程框架上的Ruby里,存在著(zhù)許多hype的。我認為這種hype是正確的。在Rails上的Ruby讓你比起java,可以在一個(gè)更抽象的層次上編寫(xiě)你的程序。有了Rails上的Ruby,你可以創(chuàng )建域對象,這種對象可以發(fā)現相關(guān)聯(lián)的數據庫表的內容。例如:你可以寫(xiě)這樣簡(jiǎn)單的模型對象:
class Person < ActiveRecord::Baseend 這種類(lèi)表面看起來(lái)相當的受限制。但是一旦你執行它,Rails就會(huì )展現它的神奇。這種實(shí)現了持久化Rails的活動(dòng)紀錄框架與相關(guān)的數據庫關(guān)聯(lián),以及為了表定義掃描系統表,還發(fā)現數據庫里列項。然后,活動(dòng)記錄為數據庫中的每一列增加一個(gè)屬性,為數據庫中id列名在類(lèi)中增加一個(gè)獨一無(wú)二的標示符。你可以用下面的類(lèi)去編寫(xiě)代碼:
person=Person.newperson.name='Bruce Tate'person.email= 'bruce.tate@j2life.nospam.com'person.save 數據庫的列名和行為都會(huì )在運行時(shí)后加入Person類(lèi)。你可以很容易的擴展Person類(lèi):
class Person < ActiveRecord::Base has_many :carsend 通過(guò)Ruby中一個(gè)belongs_to的簡(jiǎn)單方法和:department標示符,我實(shí)現了所有我想做的?;顒?dòng)記錄隱式調用了Ruby的元編程來(lái)添加了所有的方法和變量,這些方法和變量用來(lái)管理一個(gè)任何一個(gè)部門(mén)之間的一對多關(guān)系。Rails用戶(hù)使用域語(yǔ)言來(lái)管理像繼承這樣的關(guān)系,另外可以用Ruby語(yǔ)言在一個(gè)更抽象的層次上工作。Rails無(wú)縫擴展了Ruby語(yǔ)言。
Rails會(huì )不會(huì )是下一代偉大的框架?有可能。要做一個(gè)選擇的話(huà),Rails應該會(huì )是在使用Ruby或是其他動(dòng)態(tài)編程語(yǔ)言的元編程框架潮流中的第一個(gè)?;蛘?,你可能看到Rails會(huì )作為某些松散對齊技術(shù)的中樞,它是以元編程作為基礎的。在任何情況下,你都會(huì )更有效率。
選擇我們,優(yōu)質(zhì)服務(wù),不容錯過(guò)
1. 優(yōu)秀的網(wǎng)絡(luò )資源,強大的網(wǎng)站優(yōu)化技術(shù),穩定的網(wǎng)站和速度保證
2. 15年上海網(wǎng)站建設經(jīng)驗,優(yōu)秀的技術(shù)和設計水平,更放心
3. 全程省心服務(wù),不必擔心自己不懂網(wǎng)絡(luò ),更省心。
------------------------------------------------------------
24小時(shí)聯(lián)系電話(huà):021-58370032