java從java 5(or 6)?開始引入一連串的特色,讓我覺得這個語言愈來愈難掌握,愈來愈像是C++翻版:P
從annotation開始,annotation是類似comment,卻可以指使compiler去做一些處理,如果使用過hibernate的人就知道,可以連hibernate原本用來對應DB與java物件之間的xml檔案,全部寫入annotation上
跟著為了溶入generic programming,也就是在C++的template以及STL like的函數,引入了<?>這個符號,generic programming本人可是對他又愛又恨阿,他是非常的powerfull,但是又非常的難以maintain以及extend(對了,有時候還非常難以debug,visual c++ 6.0,光compiler吐出來的message,就根本不能看,更遑論runtime了),只敢使用STL或者Boost之類,其他人寫出的template lib,我可是十分警戒
後來因為其他需要,我開始使用python之類的語言,好處是十分快速的可以開發出一些prototype,來驗證自己的演算法,即使python的速度大概只能達到C++的1/10,不過如果我用C++開發大概要一個月,python我只要一個星期就搞定了XD 在驗證想法上,python有很大的優勢,只要把速度的問題交給機器去克服:P
在使用python之後,突然我想到了一個問題,為何PHP/Python這類不純粹是OO的語言,可以發展得如此之好,甚至於好過原本Java,不是一直在說OO可以幫忙處理、分析複雜的問題嗎??為何感覺PHP/Python愈發興盛?這意味著有某些是我們沒考慮到的!?這個問題似乎還沒有個終極的答案,我只有把它留在心裡
最近看了一下,java 8的新特色,OMG,開始支援一些PHP/Python的特色,比方說lambda的特色,讓java感覺又為了相容一些functional programming的特色以及generic的特色,"走回頭路",整個語法亂到了一個極致。在此同時,已也已經披露了OO的一些極限,比方說,在以前(java 6),你想弄個類似function pointer(C/C++),必須定義一個介面,走template method或者其他pattern的模式,光為了一個function pointer,必須多出一個interface再多出一個implementation,當然在OO上面有好處,但是在code上面可是多了不少阿
另外上面這些java的新特色,有個幾乎千篇一律的特色就是.....全部是在compiler的時候做手腳,也就是在.java轉換成.class的時候自動產生一些額外的code
回到核心的問題,是否一個語言在與時俱進的時候,必須要弄出一些"不倫不類"的特色,弄了一些code sugar,但是降低了原本的簡潔性?我倒是覺得java乾脆弄出個新的關鍵字,不要再把一些舊有的模式跟新的模式作一種奇怪的搭配,然後用compiler去處理這件事情。我只能說,我對這些新特色十分感冒orz
沒有留言:
張貼留言