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