自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

有可能挑戰(zhàn)Java優(yōu)勢(shì)的四種技術(shù)

開發(fā) 后端
Java是一種杰出的產(chǎn)業(yè)開發(fā)語言,這是因?yàn)樗鼛砹藗ゴ蟮慕y(tǒng)一和對(duì)事實(shí)上以前并不存在的重要標(biāo)準(zhǔn)的關(guān)注。但是和所有語言一樣,Java將來也會(huì)褪色。依據(jù)我做的超越Java的研究,一個(gè)重復(fù)出現(xiàn)的主題是有越來越多的人相信Java已不再足夠的有效率。以下一組技術(shù)可以使你更有效率。

Java是一種杰出的產(chǎn)業(yè)開發(fā)語言,這是因?yàn)樗鼛砹藗ゴ蟮慕y(tǒng)一和對(duì)事實(shí)上以前并不存在的重要標(biāo)準(zhǔn)的關(guān)注。但是和所有語言一樣,Java將來也會(huì)褪色。依據(jù)我做的超越Java的研究,一個(gè)重復(fù)出現(xiàn)的主題是有越來越多的人相信Java已不再足夠的有效率。以下一組技術(shù)可以使你更有效率。他們不是對(duì)所有的工程都適合,但當(dāng)被應(yīng)用于適合的工程時(shí),他們是優(yōu)秀的工具。

1、動(dòng)態(tài)語言

動(dòng)態(tài)語言可以比像C++或Java這樣的靜態(tài)語言更加有效率。他們可以讓你用更少的語言表達(dá)更多的意思。這里,我會(huì)關(guān)注現(xiàn)在新出現(xiàn)最流行的動(dòng)態(tài)語言Ruby。用Ruby的"Hello, World"和Java的作一個(gè)比較:

  1. puts "Hello, world." 

這顯然既簡(jiǎn)單又明了。你不需要寫一些其他的代碼去做這件事。下面是用Java語言的描述:

  1. class HelloWorld  
  2. {    
  3. public static void main(String[] args)   
  4. {     
  5. System.out.println("Hello World!")    
  6. }  

在Java中,類型是靜態(tài)的。這就代表了編譯器要檢查所有的類型;你必須建立和編譯一個(gè)完整的程序。在Ruby中,類型是動(dòng)態(tài)的,所以你不需要去聲明他們,你可以馬上編寫和運(yùn)行他們。下面是用兩種語言描述的Fibonacci 序列:

  1. First, Ruby:x1, x2 = 0, 1                
  2. //110.times do  puts x2  x1,   
  3. x2 = x2, x1+x2        
  4. //4end 

注意到在第一、四行同時(shí)聲明兩個(gè)變量,讓你可以簡(jiǎn)潔地表達(dá)兩種不同的聲明形式。另外,注意到10是一個(gè)對(duì)象,它支持方法,如:times。再另外,在do和end之間是一個(gè)代碼塊。Ruby代碼塊可以讓你把代碼塊傳入方法。。這種技術(shù)導(dǎo)致了難以置信的效率和簡(jiǎn)潔的代碼。接下來,看一看用Java實(shí)現(xiàn)的代碼:

  1. class Fib   
  2. {    
  3. public static void main (String args[])   
  4. {     
  5. int x1 = 0;     
  6. int x2 = 1;     
  7. int total = 1;     
  8. for (int i=0; i<10; i++)   
  9. {      
  10. System.out.println(total);      
  11. total = x1+x2;      
  12. x1 = x2;      
  13. x2 = total;    
  14. }    
  15. }  

你需要去聲明所有的變量,以及詳細(xì)地寫出來你用for循環(huán)實(shí)現(xiàn)的迭代。每個(gè)變量都是獨(dú)立的,所以你必須有一個(gè)臨時(shí)變量用于存放total。

相比,動(dòng)態(tài)語言更為簡(jiǎn)潔。按照一個(gè)普通的規(guī)則,如果你可以寫更少的代碼而不犧牲可讀性,這些代碼將導(dǎo)致更高的效率。(但是你不可以犧牲可讀性來達(dá)到這一步,我們可以以Perl舉例作為結(jié)尾。)

更為重要的是,動(dòng)態(tài)語言在Java開發(fā)者想要去解決的重要問題上表現(xiàn)得更好,如: 元編程。 Hibernate 使用元編程技術(shù)使對(duì)象持久化。

Spring使用元編程來為Java對(duì)象增加服務(wù),而免除你為他們構(gòu)建額外支持的煩惱。在Rails框架上,當(dāng)紅的Ruby利用了自己能力來構(gòu)建某種已存的最有效率的應(yīng)用開發(fā)框架。

令人驚訝的是,許多Java開發(fā)者采用了Ruby。Ant和Tomcat的發(fā)明者James Duncan Davidson正在Rails上使用Ruby,以及Java的暢銷書作者之一,JSP專家組的成員David Geary正在寫一本關(guān)于Rails上的Rub的書y。許多在Java社區(qū)里有著聰明思想的人都轉(zhuǎn)向使用像Ruby一樣的動(dòng)態(tài)語言。這是因?yàn)檫@種新出現(xiàn)的語言能更好的解決最有興趣的問題。動(dòng)態(tài)語言將不會(huì)完全取代Java,但是他們會(huì)適合于解決小的,輕量級(jí)的問題。

2、Continuation 服務(wù)

Web編程絕對(duì)是個(gè)的災(zāi)難。在Java誕生十年后,我們?nèi)耘f不能構(gòu)建一個(gè)使返回按鈕正確的框架。Web應(yīng)用是無國(guó)界的,所以Web應(yīng)用會(huì)發(fā)展得更好。但是很難去構(gòu)建無國(guó)界的應(yīng)用,而我們現(xiàn)有的框架不能給與我們足夠的幫助。

你使用大多數(shù)Java的Web框架時(shí),從根本上說,你構(gòu)建了許多不相關(guān)的使用servlets或JSP技術(shù)的應(yīng)用。然后通過手工保存對(duì)象來把他們集成起來,這些對(duì)象就是你需要的,用來暫時(shí)存儲(chǔ)對(duì)象的會(huì)話。

Continuation是語言的構(gòu)造器,它可以使你快速存儲(chǔ)某個(gè)線程的狀態(tài),過后執(zhí)行這個(gè)線程?;贑ontinuation的web框架總體上是通過模擬一個(gè)監(jiān)控狀態(tài)的應(yīng)用來使web開發(fā)變得更為容易。當(dāng)你的應(yīng)用需要從用戶那取得數(shù)據(jù)時(shí),這種框架使用continuation來自動(dòng)保存應(yīng)用程序的狀態(tài)。如果用戶按下返回按鈕或者通過瀏覽器的歷史紀(jì)錄回到以前的頁面,應(yīng)用程序可以重新讀取一個(gè)continuation。

基于continuation最好的框架是用動(dòng)態(tài)語言來開發(fā)的。到目前為止,最健壯的框架是Seaside。他是基于一種Smalltalk的Squeak語言的框架。Seaside支持很好的調(diào)試功能,你可以實(shí)時(shí)檢查、調(diào)試以及在瀏覽器里改動(dòng)你的代碼。Borges、Iowa和Wee都是基于Ruby且支持continuation的框架。

Java不支持continuations,但是一些在特殊限制下構(gòu)造的Java框架支持模擬continuations。這些框架具有用其他語言編寫的continuations框架的某些特征。

流行的框架是用了一些高級(jí)的技術(shù),如:字節(jié)碼增強(qiáng)、反射以及特殊類的裝載器。這些技術(shù)用Java部分地實(shí)現(xiàn)了continuations。

Cocoon 2在Rhino JavaScript 虛擬機(jī)中增加了continuations,用來模擬監(jiān)控狀態(tài)的應(yīng)用。

Spring Webflow使用了狀態(tài)機(jī)來提供對(duì)返回按鈕良好的支持,以及其他一些continuation服務(wù)的特征。

Lakeshore使用了懸掛的線程來模擬continuations。這種方法不像其他方法一樣有可擴(kuò)展性,同時(shí)還缺乏對(duì)返回按鈕完整的支持,但是這些預(yù)計(jì)在將來都會(huì)具有。

每個(gè)月都會(huì)有新的框架出現(xiàn)。我認(rèn)為在未來的三年內(nèi),我們都會(huì)使用支持基于continuations的方法的web開發(fā)框架,這種框架是由一種語言或者其他語言編寫的。

3、慣例超越配置

Java開發(fā)者經(jīng)常探索用于改進(jìn)配置的方法。新的框架越來越多的使用Java 5批注來進(jìn)行配置。其他的框架是用一種不同的方法。Rails中的Ruby常用慣例來推斷需要在其他框架進(jìn)行配置的聯(lián)系。

例如:在結(jié)束的時(shí)候,一個(gè)叫BlogController且有一個(gè)show方法的Rails控制器,會(huì)自動(dòng)在blog_controller目錄里提交一個(gè)叫show.rhtml的視圖。Rails還使用命名慣例來綁定數(shù)據(jù)庫表里持久化的類。默認(rèn)情況下,Perosn類會(huì)與用英語的復(fù)數(shù)people與表進(jìn)行匹配。

新的框架將會(huì)支持慣例,而不是配置。

4、元編程

就像前面提到的一樣,在Rails編程框架上的Ruby里,存在著許多hype的。我認(rèn)為這種hype是正確的。在Rails上的Ruby讓你比起java,可以在一個(gè)更抽象的層次上編寫你的程序。有了Rails上的Ruby,你可以創(chuàng)建域?qū)ο?,這種對(duì)象可以發(fā)現(xiàn)相關(guān)聯(lián)的數(shù)據(jù)庫表的內(nèi)容。例如:你可以寫這樣簡(jiǎn)單的模型對(duì)象:

  1. class Person < ActiveRecord::Baseend 

這種類表面看起來相當(dāng)?shù)氖芟拗?。但是一旦你?zhí)行它,Rails就會(huì)展現(xiàn)它的神奇。這種實(shí)現(xiàn)了持久化Rails的活動(dòng)紀(jì)錄框架與相關(guān)的數(shù)據(jù)庫關(guān)聯(lián),以及為了表定義掃描系統(tǒng)表,還發(fā)現(xiàn)數(shù)據(jù)庫里列項(xiàng)。然后,活動(dòng)記錄為數(shù)據(jù)庫中的每一列增加一個(gè)屬性,為數(shù)據(jù)庫中id列名在類中增加一個(gè)獨(dú)一無二的標(biāo)示符。你可以用下面的類去編寫代碼:

  1. person=Person.newperson.name='Bruce  
  2. Tate'person.email=  
  3. 'bruce.tate@j2life.nospam.com'person.save  

數(shù)據(jù)庫的列名和行為都會(huì)在運(yùn)行時(shí)后加入Person類。你可以很容易的擴(kuò)展Person類:

  1. class Person < ActiveRecord::Base   
  2. has_many :carsend 

通過Ruby中一個(gè)belongs_to的簡(jiǎn)單方法和:department標(biāo)示符,我實(shí)現(xiàn)了所有我想做的。活動(dòng)記錄隱式調(diào)用了Ruby的元編程來添加了所有的方法和變量,這些方法和變量用來管理一個(gè)任何一個(gè)部門之間的一對(duì)多關(guān)系。Rails用戶使用域語言來管理像繼承這樣的關(guān)系,另外可以用Ruby語言在一個(gè)更抽象的層次上工作。Rails無縫擴(kuò)展了Ruby語言。

Rails會(huì)不會(huì)是下一代偉大的框架?有可能。要做一個(gè)選擇的話,Rails應(yīng)該會(huì)是在使用Ruby或是其他動(dòng)態(tài)編程語言的元編程框架潮流中的第一個(gè)?;蛘?,你可能看到Rails會(huì)作為某些松散對(duì)齊技術(shù)的中樞,它是以元編程作為基礎(chǔ)的。在任何情況下,你都會(huì)更有效率。

總  結(jié)

在《超越Java》這本書中,我表達(dá)了Java還不會(huì)淘汰意思,但是在最近的十年,我們目睹了在Java領(lǐng)域之外引人注目的創(chuàng)新。這四種技術(shù)會(huì)在不遠(yuǎn)的將來起到重要的作用。請(qǐng)密切關(guān)注他們。

原文鏈接:http://blog.csdn.net/hacke2/article/details/7282439

【編輯推薦】

  1. Java SE 6生命將在今年11月終結(jié)
  2. Java中線程安全問題個(gè)人理解
  3. Java中參數(shù)傳遞類型只有值傳遞
  4. Java堆內(nèi)存的10個(gè)要點(diǎn)
  5. Play!在云端:Java PaaS平臺(tái)入門
責(zé)任編輯:林師授 來源: hacke2的博客
相關(guān)推薦

2016-09-06 16:53:55

2016-09-27 10:51:43

2022-07-04 12:07:57

智慧城市智能建筑物聯(lián)網(wǎng)

2019-10-24 07:42:28

Java引用GC

2011-11-24 16:34:39

Java

2015-05-08 12:24:10

惡意軟件逃避技術(shù)

2015-11-06 13:27:39

2020-11-24 14:06:55

網(wǎng)絡(luò)攻擊

2021-08-25 10:41:09

人工智能AI深度學(xué)習(xí)

2011-09-21 17:56:07

2010-12-13 17:12:31

2011-10-09 09:35:11

虛擬化hypervisor

2020-07-16 10:07:57

網(wǎng)絡(luò)安全漏洞技術(shù)

2022-08-14 16:04:15

機(jī)器學(xué)習(xí)數(shù)據(jù)集算法

2021-11-15 09:18:39

勒索軟件黑客數(shù)據(jù)備份

2019-01-29 18:29:26

區(qū)塊鏈區(qū)塊鏈技術(shù)網(wǎng)絡(luò)信任

2011-03-16 09:05:53

NATiptables

2012-09-11 09:55:26

編程HTML5編程能力

2017-07-06 15:40:19

DevOps核心能力

2022-02-07 09:24:18

自動(dòng)化企業(yè)自動(dòng)化技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)