網(wǎng)站制作NEWS
什么叫程序
計算機程序或者軟件程序(通常簡稱程序)是指一組指示計算機每一步動作的指令,通常用某種程序設(shè)計語言編寫,運行于某種目標體系結(jié)構(gòu)上。打個比方,一個程序就像一個用漢語(程序設(shè)計語言)寫下的紅燒肉菜譜(程序),用于指導懂漢語的人(體系結(jié)構(gòu))來做這個菜。 通常,計算機程序要經(jīng)過編譯和鏈接而成為一種人們不易理解而計算機理解的格式,然后運行。未經(jīng)編譯就可運行的程序通常稱之為腳本程序。
程序的運行
為了一個程序運行,計算機加載程序代碼,可能還要加載數(shù)據(jù),從而初始化成一個開始狀態(tài),然后調(diào)用某種啟動機制。在最低層上,這些是由一個引導序列開始的。
在大多數(shù)計算機中,操作系統(tǒng)例如Windows等,加載并且執(zhí)行很多程序。在這種情況下,一個計算機程序是指一個單獨的可執(zhí)行的映射,而不是當前在這個計算機上運行的全部程序。
馮諾依曼體系結(jié)構(gòu)
在一臺基于最常見的馮諾依曼體系結(jié)構(gòu)(又稱Harvard Architecture)的計算機上,程序從某種外部設(shè)備,通常是硬盤,被加載到計算機里。 如果計算機選擇馮諾依曼體系結(jié)構(gòu),那么程序就被加載入內(nèi)存。 指令序列順序執(zhí)行,直到一條跳轉(zhuǎn)或轉(zhuǎn)移指令被執(zhí)行,或者一個中斷出現(xiàn)。所有這些指令都會改變指令寄存器的內(nèi)容。
基于這種體系計算機如果沒有程序的支持將無法工作。一個計算機程序是一系列指令的集合。
程序里的指令都是基于機器語言;程序通常首先用一種計算機程序設(shè)計語言編寫,然后用編譯程序或者解釋執(zhí)行程序翻譯成機器語言。 有時,程序也可以用匯編語言編寫,匯編語言實質(zhì)就是表示機器語言的一組記號-在這種情況下,用于翻譯的程序叫做匯編程序(Assembler)。
程序和數(shù)據(jù)
程序已經(jīng)被定義了。如何定義數(shù)據(jù)呢?數(shù)據(jù)可以被定義為被程序處理的信息。當我們考慮到整個計算機系統(tǒng)時,有時程序和數(shù)據(jù)的區(qū)別就不是那么明顯了。中央處理器有時有一組微指令控制硬件,數(shù)據(jù)可以是一個有待執(zhí)行的程序(參見腳本編程語言),程序可以編寫成去編寫其它的程序;所有這些例子都使程序和數(shù)據(jù)的比較成為一種視角的選擇。有人甚至斷言程序和數(shù)據(jù)沒有區(qū)別。
編寫一個程序去生成另外一個程序的過程被稱之為原編程(Metaprogramming)。它可以被應(yīng)用于讓程序根據(jù)給定數(shù)據(jù)生成代碼。單一一個程序可能不足以表示給定數(shù)據(jù)的所有方面。讓一個程序去分析這個數(shù)據(jù)并生成新的程序去處理數(shù)據(jù)所有的方面可能會容易一些。Lisp就是一例支持這種編程模式的程序語言。
在神經(jīng)網(wǎng)絡(luò)里儲存的權(quán)重是一種數(shù)據(jù)。正是這些權(quán)重數(shù)據(jù),跟網(wǎng)路的拓撲結(jié)構(gòu)一起,定義了網(wǎng)絡(luò)的行為。人們通常很難界定這些數(shù)據(jù)到底表示什么或者它們是否可以由程序來代替。這個例子以及跟人工智能相關(guān)的其它一些問題進一步考驗程序和數(shù)據(jù)的區(qū)別。
算法
多重隨機標簽