国产美女一级毛片精品久久久|婷婷影院在线综合免费视频|最新国产午夜精品视频成人|久久精品九九无码免费

五個(gè)編程語(yǔ)言設(shè)計(jì)中常犯的失誤

來(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)。

上一篇:國(guó)外資深人士給PHP初學(xué)者的一些經(jīng)驗(yàn)
下一篇:軟件編程初學(xué)者怎么學(xué)習(xí)java?

熱門(mén)話(huà)題

招生熱線(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

關(guān)注我們
在線(xiàn)咨詢(xún)
嘿,我來(lái)幫您!
鄂温| 佛山市| 湖北省| 龙州县| 阜新市| 始兴县| 扶沟县| 汶川县| 陵水| 永昌县| 奉节县| 榆林市| 泽库县| 英德市| 六安市| 五大连池市| 巧家县| 县级市| 南澳县| 桃园县| 正阳县| 防城港市| 额尔古纳市| 蒲江县| 通化市| 怀集县| 定安县| 固始县| 探索| 克拉玛依市| 鄄城县| 石城县| 蒙自县| 响水县| 秦皇岛市| 东辽县| 色达县| 宝山区| 林芝县| 登封市| 湖南省|