腳本語(yǔ)言在數據采集系統中的應用研究
為了解決軟件開(kāi)發(fā)的難題,人們發(fā)明了匯編語(yǔ)言,通過(guò)一些助記符來(lái)減輕二進(jìn)制編碼的開(kāi)發(fā)壓力。這的確是行之有效的方法,然而,匯編語(yǔ)言太依賴(lài)程序員的素質(zhì),而且無(wú)法適應大規模的開(kāi)發(fā)。
到了上世紀60年代,出現了Fortran,Cobol,Lisp,Algol 60等現代高級語(yǔ)言。程序員可以用接近自然語(yǔ)言的程序語(yǔ)言編制軟件,再通過(guò)編譯器轉換成機器可執行的代碼。由于使用精確的形式語(yǔ)言來(lái)定義程序語(yǔ)言本身,并通過(guò)對硬件的抽象使得程序與計算機平臺無(wú)關(guān),導致高級語(yǔ)言生產(chǎn)效率提高、維護費用降低,計算機軟件業(yè)得以蓬勃發(fā)展。
為了實(shí)現生產(chǎn)效率的提高、可靠、易維護、易管理的開(kāi)發(fā)思想和方法。文中在介紹腳本語(yǔ)言及使用的基礎上,提出了其在數據采集系統中的使用模型及具體實(shí)現。
1 腳本語(yǔ)言簡(jiǎn)介
腳本語(yǔ)言是為了縮短傳統的編寫(xiě)一編譯一鏈接一運行(edit-compile-link-run)過(guò)程而創(chuàng )建的計算機編程語(yǔ)言。相對于編譯型計算機編程語(yǔ)言,用腳本語(yǔ)言開(kāi)發(fā)的程序在執行時(shí),由其所對應的解釋器(或稱(chēng)虛擬機)解釋執行。系統程序設計語(yǔ)言是被預先編譯成機器語(yǔ)言而執行的。腳本語(yǔ)言的主要特征是:程序代碼即是腳本程序,亦是最終可執行文件。腳本語(yǔ)言可分為獨立型和嵌入型,獨立型腳本語(yǔ)言在其執行時(shí)完全依賴(lài)于解釋器,而嵌入型腳本語(yǔ)言通常在編程語(yǔ)言中(如C,C++,VB,.Java等)被嵌入使用。
腳本技術(shù)得益于計算機硬件的加速發(fā)展。過(guò)去某些情況下甚至系統程序設計語(yǔ)言也不夠有效,因此不得不用匯編編寫(xiě)應用程序。而今的機器比1980年的快100~500倍,且仍在以每18個(gè)月翻一番的速度增長(cháng)。計算機性能快速提高,使計算機程序越來(lái)越復雜。因此,開(kāi)發(fā)時(shí)間已遠比運行時(shí)間緊迫。這時(shí),腳本語(yǔ)言作為系統程序設計語(yǔ)言的補充,開(kāi)始被主要的計算機平臺所同時(shí)提供。編程語(yǔ)言已經(jīng)由性能低下的硬件與執行效率之間的矛盾,轉變?yōu)榭焖僮兓氖袌?chǎng)需要與低效的開(kāi)發(fā)工具之間的矛盾,所以腳本語(yǔ)言的發(fā)展在今后的軟件開(kāi)發(fā)中有著(zhù)必然的趨勢。
腳本語(yǔ)言和系統程序設計語(yǔ)言,一個(gè)重要的不同是腳本語(yǔ)言是被解釋而系統程序設計語(yǔ)言是被編譯。被解釋的語(yǔ)言由于沒(méi)有編譯時(shí)間而提供快速的轉換,通過(guò)允許用戶(hù)運行時(shí)編寫(xiě)應用程序,而不需要耗時(shí)的編譯/打包過(guò)程。解釋器使應用程序更加靈活,腳本語(yǔ)言的代碼能夠被實(shí)時(shí)生成和執行。腳本語(yǔ)言通常都有簡(jiǎn)單、易學(xué)、易用的特性,目的就是希望能讓程序設計師快速完成程序的編寫(xiě)工作。
2 腳本語(yǔ)言的一般應用
腳本語(yǔ)言主要應用在以下幾個(gè)方面:
(1)作為批次處理語(yǔ)言或工作控制語(yǔ)言。許多腳本語(yǔ)言用來(lái)執行一次性任務(wù),尤其是系統管理方面。DOS,Windows的批處理文件和Unix的shell腳本都屬于這種應用;
(2)作為通用的編程語(yǔ)言存在,如Perl、Py-thon、Ruby等。由于“解釋執行,內存管理,動(dòng)態(tài)”等特性,它們仍被稱(chēng)為腳本語(yǔ)言。但它們已經(jīng)用于應用程序編寫(xiě),用戶(hù)也不把它們看作腳本語(yǔ)言;
(3)許多大型的應用程序都包括根據用戶(hù)需求而定制的慣用腳本語(yǔ)言。同樣地,許多電腦游戲系統使用一種自定義腳本語(yǔ)言來(lái)表現NPC(Non-Player Character,Non-Playable Character,Non-Player Class)和游戲環(huán)境的預編程動(dòng)作。此類(lèi)語(yǔ)言通常是為一個(gè)單獨的應用程序所設計,雖然它們貌似一些通用語(yǔ)言(如Quake C,Modeled After C),但它們有自定義的功能;
(4)網(wǎng)頁(yè)中的嵌入式腳本語(yǔ)言。熟知的HTML(Hyper Text Mark-up Language)即超文本標記語(yǔ)言,就是一種腳本語(yǔ)言,它的解釋器就是瀏覽器。JavaScript直到現在仍然是網(wǎng)頁(yè)瀏覽器內的主要編程語(yǔ)言,它的ECMAScript標準化保證了它成為流行的通用嵌入式腳本語(yǔ)言。另外,隨著(zhù)動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)發(fā)展,ASP、JSP、PHP等嵌入網(wǎng)頁(yè)的腳本語(yǔ)言正被廣泛使用,不過(guò)這些腳本要通過(guò)Web Server解釋為Html而被瀏覽器執行;
(5)腳本語(yǔ)言在系統應用程序中嵌入使用,作為用戶(hù)與系統的接口方式。在工業(yè)控制領(lǐng)域,PLC編程、組態(tài)軟件的腳本語(yǔ)言是擴充組態(tài)系統功能的重要手段;在通信平臺領(lǐng)域,IVR(自動(dòng)語(yǔ)音應答)流程編程;Office辦公軟件,提供的宏和VBA;其他應用軟件如ER Studio提供的Basic MacroEditor,用戶(hù)可以編寫(xiě)Sax Basic腳本操作ER圖,生成Access庫、導出Word文檔等擴展功能。
3 腳本語(yǔ)言在數據采集系統中的應用
縱觀(guān)程序設計語(yǔ)言的發(fā)展,一個(gè)很顯著(zhù)的特點(diǎn)就是以機器的性能換取人的效率,以提高開(kāi)發(fā)者的工作效率和滿(mǎn)足人的需求為目標,在所有資源中人是最昂貴的資源,因而程序的編寫(xiě)從面向機器逐漸向面向人過(guò)度。而腳本語(yǔ)言就是可以提高開(kāi)發(fā)效率和滿(mǎn)足客戶(hù)需求程序設計的最好選擇。比如在開(kāi)發(fā)中需要對客戶(hù)自定義表達式計算時(shí),如果自己去寫(xiě)表達式解析,將是一個(gè)幾乎無(wú)法完成的任務(wù)。而使用微軟的Script控件,把表達式作為腳本函數返回值,讓Script控件解釋計算,幾行代碼就完成了,開(kāi)發(fā)效率大大提高。
在軟件系統實(shí)踐中,用的最多的就是把腳本嵌入應用程序中??焖匍_(kāi)發(fā)工具Delphi除了可用使用ActiveX控件類(lèi)型的腳本引擎外,也有許多優(yōu)秀的原生Delphi腳本引擎控件如Scripter Studio,PaxScr4pter,Inner Fuse Pascal Script,Fast Script等。在開(kāi)發(fā)一款通用的數據采集系統中,就采用了核心架構使用高級語(yǔ)言,用戶(hù)擴展和通訊協(xié)議使用Fast Script描述的設計模式。之所以選擇FastScript,因為Fast Script是一個(gè)交叉平臺的語(yǔ)言的腳本引擎。它對希望增加腳本功能的編程人員非常有用。Fast Script是用100%的Object Pascal編寫(xiě),具有支持OLE和變量數組,可以使用多語(yǔ)言腳本(Pascal Script、C++ Script、JScript和BasicScript),與標準面向對象語(yǔ)言語(yǔ)法相近,可以使用程序內的任何對象、標準庫訪(fǎng)問(wèn)基類(lèi)、控件、窗體和DB;易可擴展的庫結構;內存占用小等特點(diǎn)。
系統的結構,如圖1所示。采用這種模式,就是要充分發(fā)揮系統程序語(yǔ)言和腳本語(yǔ)言的各自?xún)?yōu)勢。因為核心架構需要創(chuàng )建采集線(xiàn)程、進(jìn)行任務(wù)調度、處理系統消息和加載腳本引擎等,而這些需要穩定且處理效率高,所以使用系統程序語(yǔ)言開(kāi)發(fā);而對于千變萬(wàn)化的通訊協(xié)議,如果全都被系統核心架構包括,是不可能的。而把各種通訊協(xié)議用不同的腳本語(yǔ)言文件描述,供采集系統調用,問(wèn)題就可以解決了。
評論