日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
編程語言的未來,Java路在何方

英文原文:coderfriendly,編譯:王曉杰

成都創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的10多年時(shí)間我們累計(jì)服務(wù)了上千家以及全國政企客戶,如自上料攪拌車等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致稱贊。

我希望你有機(jī)會(huì)看看這個(gè)視頻“The future of the programming language”。這個(gè)會(huì)議是由C#的架構(gòu)師Anders Hejlsberg 主導(dǎo)的,視頻中他闡述了自己心目中的下一代編程語言應(yīng)該具備的主要特性:

特定領(lǐng)域語言(Domain Specific Language, 簡寫DSL,包括內(nèi)部及外部DSL)

有注解功能(將注意力集中在做什么而不是怎么做)

介于靜態(tài)語言好動(dòng)態(tài)語言之間的語言

面向過程語言(命令式語言(Imperative Language)并不適合面向多線程編程)

他的演講非常棒,十分通俗易懂,從中我學(xué)到了很多,我相信微軟擁有世界上最好的實(shí)驗(yàn)室。在演講的最后,他說他不理解為什么Java還沒有轉(zhuǎn)向面向過程。作為一名Java開發(fā)者,我不得不承認(rèn).net平臺確實(shí)非常強(qiáng)大。我喜歡他所倡導(dǎo)的”選一個(gè)自己喜歡的語言去編程吧!”

函數(shù)式編程

對于什么是函數(shù)式編程語言,Anders給出了一個(gè)很簡要的描述。例如,在命令式語言中,會(huì)經(jīng)常這么寫:

x=x+1

我們已經(jīng)按照這種方式編程很多年了,以至于我們幾乎忘了其他的一些科學(xué)家們并不是這樣做的。在數(shù)學(xué)領(lǐng)域,你應(yīng)該這么寫:

y=x+1

y的計(jì)算結(jié)果并不會(huì)改變x的值。這個(gè)例子可能有些過于簡單,為了進(jìn)一步說明,我們來假設(shè)有這樣一個(gè)叫做”Number”的Java類。

 
 
 
  1. publicclassNumberImperative {
  2. privateint_value;
  3. publicNumberImperative(finalintvalue) {
  4. _value = value;
  5. }
  6. publicintgetValue(){
  7. return_value;
  8. }
  9. publicvoidadd(finalintnumberToAdd){
  10. _value += numberToAdd;
  11. }
  12. publicvoidsubstract(finalintnumberToSubstract){
  13. _value -= numberToSubstract;
  14. }
  15. }

以及第二種實(shí)現(xiàn):

 
 
 
  1. publicclassNumberFunctional {
  2. privatefinalint_value;
  3. publicNumberFunctional(finalintvalue) {
  4. _value = value;
  5. }
  6. publicintgetValue(){
  7. return_value;
  8. }
  9. publicNumberFunctional add(finalintnumberToAdd){
  10. returnnewNumberFunctional(_value + numberToAdd);
  11. }
  12. publicNumberFunctional substract(finalintnumberToSubstract){
  13. returnnewNumberFunctional(_value - numberToSubstract);

我知道你可能喜歡寫int y = x + 1;。但這個(gè)不是我們在這要討論的。這兩個(gè)例子中的代碼給出了命令式語言和函數(shù)式語言的最基本用法,我們使用下面這個(gè)段代碼來進(jìn)行測試。

 
 
 
  1. publicfinalclassDemoNumber {
  2. publicstaticvoidmain(finalString[] args) {
  3. finalintx = 5;
  4. // imperative
  5. finalNumberImperative numberImperative = newNumberImperative(x);
  6. numberImperative.add(1);
  7. System.out.println("imperative: "+ numberImperative.getValue());
  8. // functional
  9. finalNumberFunctional numberFunctional = newNumberFunctional(x);
  10. finalNumberFunctional resultNumberFunctional = numberFunctional.add(1);
  11. System.out.println("functional: "+ resultNumberFunctional.getValue());
  12. }
  13. }

輸出的結(jié)果為:

imperative: 6 functional: 6

我都能夠想象出你臉上的表情:”這哥們一定是個(gè)代碼控,這么喜歡寫代碼”。別忘了,這只是一個(gè)例子,而且在現(xiàn)實(shí)生活中我們不需要寫這樣的類 (NumberFunctional)。但是,如果你習(xí)慣于開發(fā)線程安全的代碼,那么你一定已經(jīng)意識到函數(shù)式的實(shí)現(xiàn)方式是不可變類,而不可變類可以很容易 的解決并行執(zhí)行過程中遇到的問題,JDK中有很多你可以隨時(shí)初始化的不可變類,例如:String,Integer,Double等。

在未來幾年,隨著多核微處理的普及,并行編程將成為開發(fā)人員必須要具備的核心競爭力。在NumberImperative類中,因?yàn)槌蓡T變量 “_value”是沒有同步的,所以在運(yùn)行時(shí)將產(chǎn)生副作用。即便是我們對這個(gè)屬性進(jìn)行了同步,但如果擁有同一個(gè)引用的兩個(gè)線程同時(shí)調(diào)用下面的函數(shù)的話,仍舊會(huì)形成競爭條件:

 
 
 
  1. publicvoidatomicProblem(finalNumberImperative numberImperative){
  2. if(numberImperative.getValue() == 0){
  3. numberImperative.add(1);

如果你讀過Brian Goetz的書“Java Concurrent in practice“,你可能會(huì)想到在你的代碼中加入Annotation。我們可以將NumberImperative類注解成 @NotThreadSafe,而將NumberFunctional類注解成@Immutable。

函數(shù)式語言默認(rèn)就是不可更改的。如果我們想讓一個(gè)數(shù)據(jù)變得可以更改,我們需要追加一個(gè)關(guān)鍵字,比如: Closures,你可以參照Refs and Transactions。在F#語言中可以使用 mutable關(guān)鍵字,而在Scala中,可以用“var” 和 “val”這兩個(gè)關(guān)鍵字。

大勢所趨

目前我們所遇到的問題是,由于JCIP Annotation還不夠普及,構(gòu)建一個(gè)線程安全的軟件是十分困難的。就連一些Java標(biāo)準(zhǔn)類也沒有加入Annotation,如果你的團(tuán)隊(duì)中的某些人沒有看過 Brian Goetz的書, 那么他/她很可能不知道如何編寫線程安全的類,如何使用Annotation。在我的團(tuán)隊(duì)中,我總是認(rèn)為那些沒有JCIP Annotation的類不是線程安全的。但是就連鼎鼎大名的Findbugs ,也無法幫你找出那些沒有加入Annotation的類。因此,要查找并發(fā)Bug是十分困難的。

那么,如何迫使程序員去適應(yīng)并發(fā)編程呢?我想我們不能要求所有的程序員去檢查他的程序是否存在并發(fā)的問題。我遇到過很多不喜歡讀書的程序員,因此JCIP相關(guān)的書籍也不是一個(gè)好的解決方案。Java是 James Gosling在 1995年創(chuàng)造的,那已經(jīng)是14年前的事情了?,F(xiàn)在我們發(fā)現(xiàn)要?jiǎng)?chuàng)建一個(gè)用Java寫的并發(fā)軟件的唯一方法就是,強(qiáng)化注解,并且對代碼用工具進(jìn)行靜態(tài)分析。 但是你我都只知道,工具并不能使問題編程更簡單,只是讓他變得能夠管理。依我看來,想要迫使人們?nèi)W(xué)習(xí)新的方法論,一門新的語言是唯一的選擇。這樣程序員 就必須去學(xué)習(xí)新的內(nèi)容,去改變他們原有的習(xí)慣.

放棄Java?

就目前來看,答案當(dāng)然是否定的。Java非常的普及,龐大的社區(qū)需要很長時(shí)間才會(huì)接受新的編程語言.我想新的語言應(yīng)該是面向少數(shù)先知先覺者的,并且需要經(jīng)過多年的歷練才會(huì)崛起。一篇文章中這么寫道:最近確實(shí)有很多關(guān)于Java語言未來的博客,Daniel Weinreb強(qiáng)調(diào)“Java的普及率太高了,我們不太可能看到它消失”。同時(shí),James Iry的觀點(diǎn)是“他目前是并且在未來很長一段時(shí)間內(nèi),都將是IT經(jīng)理為數(shù)不多的幾個(gè)最安全的選擇其中之一”。

因此,作為一個(gè)Java開發(fā)人員,我們需要豎起耳朵去聆聽市場的聲音,并且不斷地提高自己以便適應(yīng)未來五年內(nèi)可能發(fā)生的遷移。目前我們還是要現(xiàn)在工具編寫并發(fā)程序,因此我們需要繼續(xù)讀 Brian Goetz的書。并且在多線程場景中提高警惕。

那么你呢,你會(huì)給Java開發(fā)人員哪些建議?


當(dāng)前題目:編程語言的未來,Java路在何方
URL地址:http://www.dlmjj.cn/article/dpdephd.html