您的位置:首頁 > 學(xué)生信息 > 學(xué)習(xí)心得
來源:北大青鳥飛迅校區(qū)|發(fā)布時間:2013-05-05 11:22:31
近幾年來,編程語言的設(shè)計正在經(jīng)歷著類似于“文藝復(fù)興”的過程,這么說主要是基于下面兩個事實:(1)多核技術(shù)推動著PC消費者更多的關(guān)注并行程序。(2)動態(tài)語言的性能越來越好,其性期已經(jīng)可以足夠用來實現(xiàn)互聯(lián)網(wǎng)服務(wù),并且它們正在走出“腳本語言”陰影。
這篇文章試圖收集最重要的編程語言的設(shè)計錯誤,以便讓那些程序語言設(shè)計者們在設(shè)計新型的編程語言時避免。我避免了一些糾纏不清的有好有壞的問題,如:動態(tài)類型或是靜態(tài)類型。我也省略了那些看起來并不嚴重,很容易被修改的錯誤。例如,加入“參量”(Parametric Type),這在Java中已經(jīng)有了。Sun在發(fā)布Java 1.0版后的第八年才加入了這一功能。還有一個最近的例子是 Google Go Language Design FAQ 中說到的:: “Generics may well be added at some point. We don’t feel an urgency for them, although we understand some programmers do.”
0. Null 指針
幾乎在所有的主流編程語言中,對一個對像的引用可能會是一個空指針,這個錯誤會引發(fā)運行時錯誤。 C.A.R. Hoare 最近聲明向這一“發(fā)明”負責(zé),盡管如此,其它許多的設(shè)計者們都應(yīng)該對這樣的設(shè)計受到批評。下面是 C.A.R Hoare 的“懺悔”:
I call it my billion-dollar mistake. It was the invention of the null reference in 1965. [...] More recent programming languages like Spec# have introduced declarations for non-null references. This is the solution, which I rejected in 1965. - C.A.R. Hoare
我把它叫做“億萬美元錯誤”。這個空指針的發(fā)明創(chuàng)造來自1965年。…… 現(xiàn)在的編程語言引入了“非空引用”的聲明規(guī)格。這個方案被我在1965年給拒絕了。
其它語言,如 C/C++ 更夸張,它們在運到這樣的錯誤時,直接Crash掉,而 Java, Python 和其它語言會拋出一NullPointerException異常,但問題是,這個 RuntimeException 可能會被幾乎所有的語句拋出。其實,只需要一個靜態(tài)類型的語言就可以保證不會出現(xiàn)空指針或空引用。例如: Cyclone 是一個安全的C變種,其引入了非空指針和指針運算的限制。
一些語言甚至讓你根本不可能創(chuàng)建空指針,雖然這使得明確的指針不能行進行運算。Haskell 就是這樣的一個語言,其提供了Maybe Monad,其強制程序員考慮“Null”的情形。
1. 很難解析的語法
編程語言的語法應(yīng)該來自 LALR 或是更好的 LL(1)。今天的程序員需要適當?shù)墓ぞ邅碇С制溟_發(fā)語言,也就是我們常說的IDE,編譯器或是其它可以幫你解析程序語言的編程工具。這并不會出現(xiàn)在一個單一的前端。也許,多重編譯器已經(jīng)被實現(xiàn)出來了。這可能讓我們的開始變得更容易一些。然而,我們現(xiàn)實中的一個反例是 C++,幾乎沒有哪個C++的編譯器可以把C++這個語言完美地正確地解釋出來,而且不同C++的編譯器的行為如此的詭異。編程語法的開銷是微不足道的,程序員應(yīng)該在編寫程序中享有更快速和高效的回報。
全程面授,不高薪都難
申請成功后,我們將在24小時內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長沙市天心區(qū)團結(jié)路6號
Copyright © 2006 | 湖南大計信息科技有限公司 版權(quán)所有
湘ICP備14017520號-3