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

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

來源:北大青鳥飛迅校區(qū)|發(fā)布時(shí)間:2013-05-05 11:22:31

  近幾年來,編程語言的設(shè)計(jì)正在經(jīng)歷著類似于“文藝復(fù)興”的過程,這么說主要是基于下面兩個(gè)事實(shí):(1)多核技術(shù)推動(dòng)著PC消費(fèi)者更多的關(guān)注并行程序。(2)動(dòng)態(tài)語言的性能越來越好,其性期已經(jīng)可以足夠用來實(shí)現(xiàn)互聯(lián)網(wǎng)服務(wù),并且它們正在走出“腳本語言”陰影。

  這篇文章試圖收集最重要的編程語言的設(shè)計(jì)錯(cuò)誤,以便讓那些程序語言設(shè)計(jì)者們?cè)谠O(shè)計(jì)新型的編程語言時(shí)避免。我避免了一些糾纏不清的有好有壞的問題,如:動(dòng)態(tài)類型或是靜態(tài)類型。我也省略了那些看起來并不嚴(yán)重,很容易被修改的錯(cuò)誤。例如,加入“參量”(Parametric Type),這在Java中已經(jīng)有了。Sun在發(fā)布Java 1.0版后的第八年才加入了這一功能。還有一個(gè)最近的例子是 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 指針

  幾乎在所有的主流編程語言中,對(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

  我把它叫做“億萬美元錯(cuò)誤”。這個(gè)空指針的發(fā)明創(chuàng)造來自1965年。…… 現(xiàn)在的編程語言引入了“非空引用”的聲明規(guī)格。這個(gè)方案被我在1965年給拒絕了。

  其它語言,如 C/C++ 更夸張,它們?cè)谶\(yùn)到這樣的錯(cuò)誤時(shí),直接Crash掉,而 Java, Python 和其它語言會(huì)拋出一NullPointerException異常,但問題是,這個(gè) RuntimeException 可能會(huì)被幾乎所有的語句拋出。其實(shí),只需要一個(gè)靜態(tài)類型的語言就可以保證不會(huì)出現(xiàn)空指針或空引用。例如: Cyclone 是一個(gè)安全的C變種,其引入了非空指針和指針運(yùn)算的限制。

  一些語言甚至讓你根本不可能創(chuàng)建空指針,雖然這使得明確的指針不能行進(jìn)行運(yùn)算。Haskell 就是這樣的一個(gè)語言,其提供了Maybe Monad,其強(qiáng)制程序員考慮“Null”的情形。

  1. 很難解析的語法

  編程語言的語法應(yīng)該來自 LALR 或是更好的 LL(1)。今天的程序員需要適當(dāng)?shù)墓ぞ邅碇С制溟_發(fā)語言,也就是我們常說的IDE,編譯器或是其它可以幫你解析程序語言的編程工具。這并不會(huì)出現(xiàn)在一個(gè)單一的前端。也許,多重編譯器已經(jīng)被實(shí)現(xiàn)出來了。這可能讓我們的開始變得更容易一些。然而,我們現(xiàn)實(shí)中的一個(gè)反例是 C++,幾乎沒有哪個(gè)C++的編譯器可以把C++這個(gè)語言完美地正確地解釋出來,而且不同C++的編譯器的行為如此的詭異。編程語法的開銷是微不足道的,程序員應(yīng)該在編寫程序中享有更快速和高效的回報(bào)。

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

熱門話題

招生熱線: 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)注我們
在線咨詢
嘿,我來幫您!
金川县| 政和县| 任丘市| 格尔木市| 高清| 吉林市| 赣州市| 深泽县| 曲周县| 蒲城县| 玉树县| 子洲县| 太和县| 磐安县| 乌拉特中旗| 湘潭市| 得荣县| 荣昌县| 南皮县| 九龙坡区| 上栗县| 咸丰县| 澄城县| 南昌县| 云林县| 盐山县| 常州市| 奉节县| 威信县| 旬邑县| 西盟| 庐江县| 万源市| 华阴市| 玛沁县| 北碚区| 靖安县| 吉林市| 皮山县| 永泰县| 永定县|