如何区分动态语言和静态语言

转自:http://blog.roodo.com/rocksaying/archives/3530367.html


雖然我們總是說著動態語言(dynamic language)、靜態語言(static language),但區分方式並不是語法,而是運行環境。

如果程式影像在載入前便確立並儲存,那麼是靜態語言[If the image of program which including op code and data is static in disk before loaded, we call it 'static language'.]。這句話對學過作業系統概論或組合語言的人比較容易理解。因為在組合語言中,要求程序員設置 code 節區, data 節區等內容載入記憶體的位置。所以我們很容易聯想記憶體中的程式影像儲存在檔案系統中的情形。與之相對的是,若程式影像在載入後才建立,則是動態語言。

在靜態語言中,軟體公司透過編譯動作(compile),事先建立程式影像並儲存在磁碟中。如此一來,便可以簡化使用者系統的載入器(loader)設計,甚至內建在作業系統之中。進而有效降低載入器和作業系統的磁碟空間需求。嗯,這些內容聽在現在的資訊科系學生耳中,想必是無法理解。一套 Windows 就要 1GB 磁碟空間,什麼載入器要簡化云云,簡直不可思議。但我玩過記憶體 640K 、磁碟空間 1.2MB 的 DOS 環境,還在這環境中用組合語言寫過程式。所以我親身體驗過那種以 KB 為單位在計較的情形。

另一方面,動態語言還有一個特點,即「互動式程式設計(interactive programming)」。動態語言程式的載入器都包含了語法解析的能力,所以很複雜且龐大,我們一般直接稱為解譯器(Interpreter)。在載入程式碼之後,依然可以接受使用者輸入程式碼。當其接受程式碼後,便立即解譯並改變程式影像之內容。

我玩過解譯式 BASIC (PC BASIC, GW BASIC) 以及編譯式 BASIC (QuickBASIC) 。我也玩過 C 語言解譯器,可以線上 coding 及運作。那時說編譯、解譯,很少說什麼動態語言、靜態語言。一種程式語言固定一種運行方式,涇渭分明的情形,大約是近10年才形成的吧 (就是 Java 與 Perl 嶄露頭角時)。

我的說法是老派程序員的觀點。也許現在的程序員另有一套說法吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值