2008-08-08 59 views

回答

77

並非所有語言都有無符號整數的概念。例如,VB 6沒有無符號整數的概念,我懷疑VB7/7.1的設計者決定不實施(現在在VB8中實現)。

引述:

http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

的CLS設計得足夠大,以包括語言,通常由開發人員需要 結構,但足以 ,大多數語言都能夠支持小它。此外,任何語言 構造使得不可能快速驗證代碼的類型安全 被排除在CLS之外,因此所有CLS兼容語言 如果他們選擇這樣做可以產生可驗證的代碼。

更新:我做這個難怪幾年前,和雖然我不明白爲什麼一個UINT不會是類型安全覈查的,我猜CLS球員必須有一個分界點的地方,以什麼是基準支持的最小數量的值類型。此外,當您考慮越來越多的語言被移植到CLR時,爲什麼迫使他們實現未簽名的整數以獲得CLS遵從(如果絕對沒有概念的話)?

+0

@Kevin:我只是想知道的話題。你的回答似乎是邏輯。我只想思考這個話題。我認爲這是一種恥辱類似Pascal的類型沒有將其納入CLR。但是你對其他語言的爭論:那並不能阻止IronPython在強大的靜態類型CLR中使用強動態類型(DLR)? – doekman 2008-08-08 20:19:05

+0

@doekman:雖然是IronPython和IronRuby的證明了CLR能提供一個平臺上,你可以建立動態類型語言中,CLS的目標是提供一套超越語言的功能標準,並讓他們成功地和安全地進行互操作。我不認爲語言在添加DL功能方面可以做什麼與CLS/CTS的內容直接相關。 – Kev 2008-08-08 20:45:24

+0

從我的理解,在CLR具有一個32位整數基本類型,其具有用於簽名的添加具有溢出檢查,無符號添加具有溢出檢查單獨的指令,並簽署不可知此外模2^32等;當被要求將對象引用轉換爲32位整數原語時,CLR既不知道也不關心使用該數字的代碼*是否希望它是有符號或無符號的。編譯器是否認爲數字有符號或無符號通常會影響編譯器爲其操作而生成的指令,但這是一種語言(而非CLR)問題。 – supercat 2015-01-22 16:43:16

3

無符號整數不符合CLS,因爲它們在某些語言之間不可互操作。

3

無符號整型在現實生活中並沒有獲得那麼多,但是具有多於一種類型的int會給你帶來痛苦,所以很多語言只有單一整數。

符合CLS的目的是使一個類從大量的語文使用的...

請記住,沒有人讓你成爲CLS兼容。

你仍然可以使用無符號整數的方法,或作爲PARMS到私人方法,因爲它是唯一的公共API是符合CLS的限制。該問題的

17

部分,我懷疑,圍繞在C無符號整數類型必須表現爲一個抽象代數環,而不是作爲數字[含義,例如成員的事實,即如果一個無符號的16位整數變量等於零,遞減要求產生65,535,並且如果它等於65,535那麼遞增它需要產生零。]有時候這種行爲是非常有用的,但是數字類型表現出這種行爲可能已經消失違背某些語言的精神。我會猜想,忽略unsigned類型的決定可能早於支持checked和unchecked數字上下文的決定。就我個人而言,我希望對於無符號數和代數環有單獨的整數類型;對一個無符號的32位數應用一元減算子應該產生一個64位的有符號結果[否定除零之外的任何東西都會產生一個負數],但是將一元減去一個環類應該產生該環內的加法逆。

在任何情況下,原因無符號整數是不符合CLS的是,微軟決定的語言中沒有支持無符號整數,以被認爲是「CLS兼容」。

相關問題