學Java,觀GP (轉)
下筆之時,學Java已經有5天了。用慣了C++,現在看Java,有一種故人之感。Java和
C++有很多相同的地方,也有一些不同的地方。其實,仔細想一下,這些區別並不能夠說明那個更好,主要是兩種語言的設計思路不同,實現的目標不同:C++側重效率,Java注重安全。他們的差異也就由此展開,當然,我寫這篇文章並不是為了說明他們的不同,只不過有感於一件事,記得好像Java聲稱可以支援GP(也許是下一個版本,也許已經實現了,只不過我剛開始學,也沒看到相關的書籍,不太清楚現在的情況),有點疑惑:STL之父曾經為了實現STL,曾經在Java裡面進行了試驗,結果以失敗告終,不知道這次GP引入Java是採用的什麼技術。
用過STL的人都知道,這是C++裡面實現GP的一個典型範例。那麼究竟什麼才是GP呢?GP的實現由那些技術支援呢?
首先我們說Generic 一般這麼定義:Abstract of Genreic Concepts。GP是Generic
Programming的縮寫,意思是:Abstract Of Generic Concepts And The Subsequent Ins
tantiation,也有人說GP就是Programming With Concepts。從這些定義我們可以看出,在GP裡面的Concept居於一個非常重要的地位,那麼什麼是Concept呢?按照《範型程式設計與STL》一書的定義就是:一組“描述某個型別”的條件。你可以把Concept想象成一組型別條件,也可以想象成型別的集合,甚至可以想象成一組合法的程式,無論如何他們在本質上都是相通的。如果我們按照正式規格系統來定義Concept,也許Concept就是:a set of many-sorted algebas,這是嚴格的以數學邏輯來定義的。個人認為GP就是一種思想,思想的核心就是透過靜態的演算法和動態的操作,以緊密的方式,低耦合的特性,來實現程式設計中的型別無關性。
在C++中GP的實現是透過模板+多繼承來實現的,當然更基礎的就是運算子過載。C++中模板透過編譯期間的時間損失來獲取執行效率的提高,同時透過編譯器進行引數傳遞的型別檢測,具有較高的安全性。這也就是為什麼STL之父選擇C++來實現自己的STL的一個很重要的地方,畢竟語言直接支援可以是實現更加方便,也更有效率。
當然,並不是說GP只能在C++裡面實現,GP是一種思想,應該獨立於任何語言的,Java不是也宣稱要加入GP麼?不過C++裡面引入GP的確本身具有很大的優勢,語言本身的特性(模板+多繼承)使得C++具有得天獨厚的優勢:在無損效率的同時具有很高的安全性。
那麼Java透過什麼來支援GP呢?我有點疑惑。Java裡面沒有模板,也沒有多繼承,當然Java裡面的單繼承也許更加有優勢,另外Java裡面有很好的RTTI機制(至少比C++裡面的RTTI功能強多了,也許是C++裡面的實在太弱了)。不過也有一些問題需要考慮,例如Java裡面的基本型別不是物件,單根特性對他們沒有什麼用處,這就比較讓人頭疼。另外單根+RTTI本身不是與法本身實現的,是透過oop的理論+類庫體系來實現的,這看起來也許更加的直觀,但是RTTI執行期的特性毫無疑問會是一個巨大的障礙,如果說Java不在乎效率,更側重安全的話,這一點似乎也無關痛癢,但是RTTI並沒有像C++那樣有編譯器進行型別檢查,相反他繞過了型別檢查機制,欺騙了編譯器,安全性問題浮現出來,這個安全的保證非常不情願的回到了程式設計師的手裡。這是一個讓人非常鬱悶的地方。
也許java有自己的一套方法,那讓我們拭目以待吧。
注:現在據說Java要引入模版,那就和C++差不多了吧:)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-958670/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- GP詭異的查詢轉換
- 【GP】快速搭建gp叢集
- |轉| java學習之路Java
- java學習方向〔轉〕Java
- java-樂觀鎖與悲觀鎖Java
- JAVA基礎:我個人的物件導向的程式觀(轉)Java物件
- 轉享: 樂觀 vs 悲觀協議協議
- 學習觀點
- PARI/GP 簡介
- effective java 觀後感Java
- Linux面面觀 (轉)Linux
- 我的程式觀 (轉)
- Java彌散系列 - 樂觀鎖與悲觀鎖Java
- 微觀經濟學與巨集觀經濟學的區別
- Java學習--xml文字轉換成Java物件JavaXML物件
- 我的學習觀
- Java併發:樂觀鎖Java
- CMMI入門 – 通用實踐的實施GP 2.1-GP 2.5薦
- Java中的鎖之樂觀鎖與悲觀鎖Java
- 加密技術面面觀 (轉)加密
- 炒股軟體面面觀 (轉)
- CMMI入門 – 通用實踐的實施GP 2.8-GP 2.10薦
- Java學習之跳轉語句Java
- Java學習之值傳遞(轉)Java
- STL的內觀排序(introsort)演算法學習筆記 (轉)排序ROS演算法筆記
- Java 中的悲觀鎖和樂觀鎖的實現Java
- 侯捷對《C++ Primer》《GP&STL》的讀書建議 (轉)C++
- GP增加計算節點
- GP standby切換成masterAST
- GP完整安裝手冊
- java設計模式-外觀模式Java設計模式
- Java設計模式之外觀模式Java設計模式
- 轉行Java能學會嗎?零基礎學習Java的學習路線Java
- PHP應用提速面面觀(轉)PHP
- 轉行學Java開發怎麼樣?Java
- Java轉行學Python難不難?JavaPython
- Java學習之類的屬性(轉)Java
- java的30個學習目標(轉)Java