Larry Wall 名言:「腳本給演員看,節目給觀眾看。」程式服務終端用戶,腳本服務程式設計師。Shell 腳本擴展命令行能力,成為系統管理員必備武器與膠水語言。Perl 融合 C 與 Lisp 特性,成為最流行腳本語言之一。Web 成為腳本語言最肥沃土壤:Perl 做 CGI、PHP 專為動態網頁、Ruby 憑 Rails 風行、JavaScript 因 AJAX 進入程式設計師視野。
腳本語言以用途為標誌,動態語言以語法特征為標誌。並非所有腳本語言都是動態語言(如 Bash),並非所有動態語言天生為腳本(如 Lisp)。當腳本語言從專用發展為通用、勝任複雜應用開發,「動態語言」提法更合理。
運行期可改變資料結構、函數定義、物件行為、指令流程。核心理念:「優化人時間而非機器時間」——寧犧牲效能或買更好硬體,換取開發效率。語法簡潔自由、多為動態/弱類型、天然支援泛型、eval 函數與豐富反射支援元編程、多支援函數式(高階函數、閉包)與物件式編程。
雖語法寬鬆易出錯,但代碼量少、Bug 相對少;IDE 日益強大降低出錯成本;提供位元碼編譯甚至 JIT 彌補效能;類介面變動無需重編譯相關模組;靈活適應需求變更、開發週期短、適合快速原型開發(先用動態語言搭建,交付時轉靜態語言)。
Java/.NET 平台鋪設動態語言跑道(JRuby、IronPython、Groovy),自身也吸納動態特性。但靜態語言憑藉安全穩定、效能優越、成熟普及、融合動態優點,不可能被完全取代。程式設計師當「靜如處子,動如脫兔,如履平地般游走於高高的梅花樁上」。
