2012-11-19 53 views
3

在閱讀了this關於Ada和C++的有趣文章以及瞭解D對CTFE和常量參數專業化函數的支持之後,我想知道Ada風格範圍類型是否可以更容易/有效地實現D比在C++中。有沒有人可能已經寫過這樣的圖書館?D中的Ada風格範圍類型

如果這樣的範圍可以高效地實現並且對D中的開發人員友好,它可以用作在對確定性和類型和內存安全性要求較高的扇區中建立D的推動者,例如在航空電子設備中和汽車。 D將因此獲得更多的開發者興趣和更強大的財務支持。

回答

3

我寫了一些小的代碼爲D OES與溢出檢查整數的最小值和最大值:

http://arsdnet.net/dcode/ranged.d

這只是一個概念證明,雖然,我懷疑它會表現非常好,但可能如果內聯。

+0

感謝亞當 - 我記得我在某處看到它! :)這正是我想到的代碼。 :) – DejanLekic

+0

這可以擴展到浮點類型(W /或W/O組裝援助)? –

+1

是的,它應該是可能的。我不知道是否有像這裏的asm檢查那樣的浮點溢出標誌,但是如果result 比較....我改變了文件(刷新鏈接)在asm上做靜態,所以現在它至少應該在float上工作。 –

4

具有標量(有界)變量很容易在D中作爲模板完成,事實上我記得我看到有人已經做了它的代碼。不幸的是,我不記得我在哪裏看到它。這就是說,恕我直言,沒有必要爲此成爲語言的一部分,而是標準庫的一部分。

編輯:亞當提醒我的代碼:http://arsdnet.net/dcode/ranged.d

範圍更廣泛的概念,安德烈的文章很好地解釋 - http://www.informit.com/articles/printerfriendly.aspx?p=1407357&rll=1。 這種類型的範圍現在是D的核心概念。D的切片是實現最強大的範圍 - RandomAccessRange

例子:

import std.stdio; 
import std.algorithm; 

void main() 
{ 
    int[] values = [ 1, 20, 7, 11 ]; // values is a RandomAcessRange 
    writeln(filter!(value => value > 10)(values)); 
} 

好讀:

  1. http://ddili.org/ders/d.en/ranges.html
  2. http://www.drdobbs.com/architecture-and-design/component-programming-in-d/240008321
  3. http://dlang.org/phobos/std_range.html
+1

不是那種類型的範圍,而是一個有界(標量)變量(像一個帶有最小和最大值的實數) –

+0

感謝您指出這一點,棘輪。我編輯了文本。 – DejanLekic