成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

編程語言設(shè)計的五大陷阱

開發(fā)
這篇文章試圖收集最重要的編程語言的設(shè)計錯誤,以便讓那些程序語言設(shè)計者們在設(shè)計新型的編程語言時避免,文章避免了一些糾纏不清的有好有壞的問題。

在近幾年來,編程語言的設(shè)計正在經(jīng)歷著類似于“文藝復(fù)興”的過程,這么說主要是基于下面兩個事實:

1)多核技術(shù)推動著PC消費者更多的關(guān)注并行程序。

2)動態(tài)語言的性能越來越好,其性期已經(jīng)可以足夠用來實現(xiàn)互聯(lián)網(wǎng)服務(wù),并且它們正在走出“腳本語言”陰影。

這篇文章試圖收集最重要的編程語言的設(shè)計錯誤,以便讓那些程序語言設(shè)計者們在設(shè)計新型的編程語言時避免。(51CTO相關(guān)文章推薦:程序員的十大技術(shù)煩惱

文章避免了一些糾纏不清的有好有壞的問題,如:動態(tài)類型或是靜態(tài)類型,同時也省略了那些看起來并不嚴重,很容易被修改的錯誤。例如,加入“參量”(ParametricType),這在Java中已經(jīng)有了。Sun在發(fā)布Java 1.0版后的第八年才加入了這一功能。

1.Null指針

幾乎在所有的主流編程語言中,對一個對像的引用可能會是一個空指針,這個錯誤會引發(fā)運行時錯誤。C.A.R.Hoare最近聲明向這一“發(fā)明”負責,盡管如此,其它許多的設(shè)計者們都應(yīng)該對這樣的設(shè)計受到批評。下面是C.A.RHoare的“懺悔”:我把它叫做“億萬美元錯誤”。這個空指針的發(fā)明創(chuàng)造來自1965年。……現(xiàn)在的編程語言引入了“非空引用”的聲明規(guī)格。這個方案被我在1965年給拒絕了。

其它語言,如C/C++更夸張,它們在運到這樣的錯誤時,直接Crash掉,而Java,Python和其它語言會拋出一NullPointerException異常,但問題是,這個RuntimeException可能會被幾乎所有的語句拋出。

其實,只需要一個靜態(tài)類型的語言就可以保證不會出現(xiàn)空指針或空引用。例如:Cyclone是一個安全的C變種,其引入了非空指針和指針運算的限制。一些語言甚至讓你根本不可能創(chuàng)建空指針,雖然這使得明確的指針不能行進行運算。Haskell就是這樣的一個語言,其提供了MaybeMonad,其強制程序員考慮“Null”的情形。

2.很難解析的語法

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

3.未定義的語義

別在語言規(guī)格中說“實現(xiàn)規(guī)范”!盡可能的少使用“未定義”這樣的術(shù)語來描述語言的行為(C/C++中出現(xiàn)了很多undefined的行為)!黃金準則是StandardML,其是一個完整地正式的語義。C語言是這樣一個反例,其規(guī)則中有太多太多的未定義的情況。

然而,由于其廣泛使用,所以某些行為的定義已經(jīng)成為了世界的共識(江湖的行規(guī),或,潛規(guī)則)。舉個例子,在C中,整型overflow的行為是未定義的,而編譯器也是有能力推斷出“x<x+1”是否總是為真。不幸的是,這個本來是編譯器應(yīng)該干的事,交給了程序員,于是在C的世界里,出現(xiàn)了大量的整型溢出的代碼。而當整型溢出的時候,幾乎所有的行為都是像x86處理器一樣(如:maxint+1==minint)。

明確的語義可以讓驗證和錯誤檢查更容易。雖然,軟件校驗來得比緩慢,但一定會來。我可以想像,編程語言的下一個機會將會是更容易地校驗,這可能需要十到二十年的時間,但今天開始這樣做的語言將會在那天成為世界的主流。

4.壞的Unicode支持

程序中幾乎都要處理字符串,但別忘了并不是所有人都會使用英語來編程。今天,幾乎所有的編程語言都不支持Unicode,所以,我們只能使用ANSI的英語來編程。這個時代,程序員應(yīng)該使用Unicode來編程,所以,源代碼也可以聲明其用什么來編碼。

在文本和字節(jié)序間的轉(zhuǎn)換和區(qū)分在的標準庫方面會比語言方面更是一個問題,當然,這也影響了語法。

5.預(yù)處理器

像C++和MP4的預(yù)處理器已經(jīng)被廣泛地使用著,使用預(yù)處理器更像是一種hack而不是一個干凈的解決方案。他們被用來,使用外部文件(如頭文件,但確沒有正確地模塊機制),使用條件編譯,宏替換,等。把這些功能與編程語言集成起來一起使用可以增加程序的性能和開發(fā)效率,并沒有什么不好的地方。

如果要舉一個反例,那么就是預(yù)編譯器的模塊化系統(tǒng)。C使用#include而C++更痛苦,因為模板需要寫一個大的頭文件,而且其會被包含在幾乎所有的其它文件中。而一個真正的模塊化的系統(tǒng)是不需要使用extern關(guān)鍵字,也不需要程序的鏈接,而應(yīng)該是直接使用。

文章原文地址:http://beza1e1.tuxen.de/articles/proglang_mistakes.html

【編輯推薦】

  1. 程序員的十大技術(shù)煩惱
  2. Java程序員的未來 走向混合編程時代
  3. 原生態(tài)Java 程序員容易忽視的編程細節(jié)
責任編輯:王曉東 來源: 酷殼
相關(guān)推薦

2015-08-27 10:11:18

2021-09-03 14:00:52

端點安全漏洞網(wǎng)絡(luò)安全

2015-08-12 14:55:43

數(shù)據(jù)同步共享設(shè)施陷阱

2025-04-07 00:00:00

CISO網(wǎng)絡(luò)安全

2019-09-23 09:00:00

編程語言職場

2014-12-25 23:02:29

2018-08-20 21:10:35

編程語言PythonJava

2019-08-13 11:39:29

編程語言技術(shù)Python

2024-02-06 12:05:43

2022-11-11 10:47:21

數(shù)字化轉(zhuǎn)型企業(yè)

2012-02-15 09:03:19

企業(yè)級移動商務(wù)智能領(lǐng)域

2021-03-12 10:17:50

C++編程語言Python

2013-06-21 10:15:33

BYOD

2019-06-04 10:40:07

2021-06-11 10:02:39

語言編程開發(fā)

2015-03-02 13:03:43

2024-04-25 09:24:19

系統(tǒng)設(shè)計開發(fā)

2010-11-26 09:28:21

2021-12-01 10:53:23

首席信息官技術(shù)發(fā)展企業(yè)管理者

2013-10-17 09:24:16

云通信服務(wù)IP語音電話統(tǒng)一通信服務(wù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美成人一区二区 | 欧美一区二区成人 | 亚洲成人免费观看 | 伊人在线视频 | 91精品国产自产在线老师啪 | 久久久国产精品入口麻豆 | 婷婷免费在线 | 1级黄色大片 | 国产在线二区 | 日韩精品一区二区三区久久 | 国产成人网 | 亚洲精品乱码久久久久久9色 | 国产在线小视频 | 国产精品99久久久久久大便 | 午夜性色a√在线视频观看9 | 在线观看www高清视频 | 一级全黄少妇性色生活免费看 | 国产精品日韩欧美一区二区三区 | 欧美日韩精品免费观看 | 国产日韩亚洲欧美 | 久久亚洲美女 | 国产一区二区三区网站 | 午夜国产一级 | 麻豆changesxxx国产 | 国产日韩精品一区二区 | 亚洲伊人精品酒店 | 亚洲国产69 | 亚洲视频免费在线观看 | 亚洲精品一区二区三区中文字幕 | 日韩在线观看网站 | 国产成人精品亚洲日本在线观看 | 久久精品网 | 日韩欧美在 | 91成人在线 | 国产一级片网站 | 精品久久久久久国产 | 国产乱码精品一区二区三区五月婷 | 精品国产乱码一区二区三区 | 欧美色专区 | 少妇黄色 | 欧美日韩亚洲国产综合 |