我為什么要用 D 語(yǔ)言寫腳本?
D 語(yǔ)言以系統(tǒng)編程語(yǔ)言而聞名,但它也是編寫腳本的一個(gè)很好的選擇。
D 語(yǔ)言由于其靜態(tài)類型和元編程能力,經(jīng)常被宣傳為系統(tǒng)編程語(yǔ)言。然而,它也是一種非常高效的腳本語(yǔ)言。
由于 Python 在自動(dòng)化任務(wù)和快速實(shí)現(xiàn)原型想法方面的靈活性,它通常被選為腳本語(yǔ)言。這使得 Python 對(duì)系統(tǒng)管理員、管理者和一般的開發(fā)人員非常有吸引力,因?yàn)樗梢宰詣?dòng)完成他們可能需要手動(dòng)完成的重復(fù)性任務(wù)。
我們自然也可以期待任何其他的腳本編寫語(yǔ)言具有 Python 的這些特性和能力。以下是我認(rèn)為 D 是一個(gè)不錯(cuò)的選擇的兩個(gè)原因。
1、D 很容易讀和寫
作為一種類似于 C 的語(yǔ)言,D 應(yīng)該是大多數(shù)程序員所熟悉的。任何使用 JavaScript、Java、PHP 或 Python 的人對(duì) D 語(yǔ)言都很容易上手。
如果你還沒(méi)有安裝 D,請(qǐng)安裝 D 編譯器,這樣你就可以運(yùn)行本文中的 D 代碼。你也可以使用在線 D 編輯器。
下面是一個(gè) D 代碼的例子,它從一個(gè)名為 words.txt
的文件中讀取單詞,并在命令行中打印出來(lái):
open
source
is
cool
用 D 語(yǔ)言寫腳本:
#!/usr/bin/env rdmd
// file print_words.d
// import the D standard library
import std;
void main(){
// open the file
File("./words.txt")
//iterate by line
.byLine
// print each number
.each!writeln;
}
這段代碼以 釋伴 開頭,它將使用 rdmd 來(lái)運(yùn)行這段代碼,rdmd
是 D 編譯器自帶的編譯和運(yùn)行代碼的工具。假設(shè)你運(yùn)行的是 Unix 或 Linux,在運(yùn)行這個(gè)腳本之前,你必須使用chmod
命令使其可執(zhí)行:
chmod u+x print_words.d
現(xiàn)在腳本是可執(zhí)行的,你可以運(yùn)行它:
./print_words.d
這將在你的命令行中打印以下內(nèi)容:
open
source
is
cool
恭喜你,你寫了第一個(gè) D 語(yǔ)言腳本。你可以看到 D 是如何讓你按順序鏈?zhǔn)秸{(diào)用函數(shù),這讓閱讀代碼的感覺(jué)很自然,類似于你在頭腦中思考問(wèn)題的方式。這個(gè)功能讓 D 成為我最喜歡的編程語(yǔ)言。
試著再寫一個(gè)腳本:一個(gè)非營(yíng)利組織的管理員有一個(gè)捐款的文本文件,每筆金額都是單獨(dú)的一行。管理員想把前 10 筆捐款相加,然后打印出金額:
#!/usr/bin/env rdmd
// file sum_donations.d
import std;
void main()
{
double total = 0;
// open the file
File("monies.txt")
// iterate by line
.byLine
// pick first 10 lines
.take(10)
// remove new line characters (\n)
.map!(strip)
// convert each to double
.map!(to!double)
// add element to total
.tee!((x) { total += x; })
// print each number
.each!writeln;
// print total
writeln("total: ", total);
}
與 each
一起使用的 !
操作符是模板參數(shù)的語(yǔ)法。
2、D 是快速原型設(shè)計(jì)的好幫手
D 是靈活的,它可以快速地將代碼敲打在一起,并使其發(fā)揮作用。它的標(biāo)準(zhǔn)庫(kù)中包含了豐富的實(shí)用函數(shù),用于執(zhí)行常見的任務(wù),如操作數(shù)據(jù)(JSON、CSV、文本等)。它還帶有一套豐富的通用算法,用于迭代、搜索、比較和 mutate 數(shù)據(jù)。這些巧妙的算法通過(guò)定義通用的 基于范圍的接口 而按照序列進(jìn)行處理。
上面的腳本顯示了 D 中的鏈?zhǔn)秸{(diào)用函數(shù)如何提供順序處理和操作數(shù)據(jù)的要領(lǐng)。D 的另一個(gè)吸引人的地方是它不斷增長(zhǎng)的用于執(zhí)行普通任務(wù)的第三方包的生態(tài)系統(tǒng)。一個(gè)例子是,使用 Vibe.d web 框架構(gòu)建一個(gè)簡(jiǎn)單的 web 服務(wù)器很容易。下面是一個(gè)例子:
#!/usr/bin/env dub
/+ dub.sdl:
dependency "vibe-d" version="~>0.8.0"
+/
void main()
{
import vibe.d;
listenHTTP(":8080", (req, res) {
res.writeBody("Hello, World: " ~ req.path);
});
runApplication();
}
它使用官方的 D 軟件包管理器 Dub,從 D 軟件包倉(cāng)庫(kù)中獲取 vibe.d Web 框架。Dub 負(fù)責(zé)下載 Vibe.d 包,然后在本地主機(jī) 8080 端口上編譯并啟動(dòng)一個(gè) web 服務(wù)器。
嘗試一下 D 語(yǔ)言
這些只是你可能想用 D 來(lái)寫腳本的幾個(gè)原因。
D 是一種非常適合開發(fā)的語(yǔ)言。你可以很容易從 D 下載頁(yè)面安裝,因此下載編譯器,看看例子,并親自體驗(yàn) D 語(yǔ)言。