為了解決軟件開發的難題,人們發明了匯編語言,通過一些助記符來減輕二進制編碼的開發壓力。這的確是行之有效的方法,然而,匯編語言太依賴程序員的素質,而且無法適應大規模的開發。
到了上世紀60年代,出現了Fortran,Cobol,Lisp,Algol 60等現代高級語言。程序員可以用接近自然語言的程序語言編制軟件,再通過編譯器轉換成機器可執行的代碼。由于使用精確的形式語言來定義程序語言本身,并通過對硬件的抽象使得程序與計算機平臺無關,導致高級語言生產效率提高、維護費用降低,計算機軟件業得以蓬勃發展。
為了實現生產效率的提高、可靠、易維護、易管理的開發思想和方法。文中在介紹腳本語言及使用的基礎上,提出了其在數據采集系統中的使用模型及具體實現。
1 腳本語言簡介
腳本語言是為了縮短傳統的編寫一編譯一鏈接一運行(edit-compile-link-run)過程而創建的計算機編程語言。相對于編譯型計算機編程語言,用腳本語言開發的程序在執行時,由其所對應的解釋器(或稱虛擬機)解釋執行。系統程序設計語言是被預先編譯成機器語言而執行的。腳本語言的主要特征是:程序代碼即是腳本程序,亦是最終可執行文件。腳本語言可分為獨立型和嵌入型,獨立型腳本語言在其執行時完全依賴于解釋器,而嵌入型腳本語言通常在編程語言中(如C,C++,VB,.Java等)被嵌入使用。
腳本技術得益于計算機硬件的加速發展。過去某些情況下甚至系統程序設計語言也不夠有效,因此不得不用匯編編寫應用程序。而今的機器比1980年的快100~500倍,且仍在以每18個月翻一番的速度增長。計算機性能快速提高,使計算機程序越來越復雜。因此,開發時間已遠比運行時間緊迫。這時,腳本語言作為系統程序設計語言的補充,開始被主要的計算機平臺所同時提供。編程語言已經由性能低下的硬件與執行效率之間的矛盾,轉變為快速變化的市場需要與低效的開發工具之間的矛盾,所以腳本語言的發展在今后的軟件開發中有著必然的趨勢。
腳本語言和系統程序設計語言,一個重要的不同是腳本語言是被解釋而系統程序設計語言是被編譯。被解釋的語言由于沒有編譯時間而提供快速的轉換,通過允許用戶運行時編寫應用程序,而不需要耗時的編譯/打包過程。解釋器使應用程序更加靈活,腳本語言的代碼能夠被實時生成和執行。腳本語言通常都有簡單、易學、易用的特性,目的就是希望能讓程序設計師快速完成程序的編寫工作。
2 腳本語言的一般應用
腳本語言主要應用在以下幾個方面:
(1)作為批次處理語言或工作控制語言。許多腳本語言用來執行一次性任務,尤其是系統管理方面。DOS,Windows的批處理文件和Unix的shell腳本都屬于這種應用;
(2)作為通用的編程語言存在,如Perl、Py-thon、Ruby等。由于“解釋執行,內存管理,動態”等特性,它們仍被稱為腳本語言。但它們已經用于應用程序編寫,用戶也不把它們看作腳本語言;
(3)許多大型的應用程序都包括根據用戶需求而定制的慣用腳本語言。同樣地,許多電腦游戲系統使用一種自定義腳本語言來表現NPC(Non-Player Character,Non-Playable Character,Non-Player Class)和游戲環境的預編程動作。此類語言通常是為一個單獨的應用程序所設計,雖然它們貌似一些通用語言(如Quake C,Modeled After C),但它們有自定義的功能;
(4)網頁中的嵌入式腳本語言。熟知的HTML(Hyper Text Mark-up Language)即超文本標記語言,就是一種腳本語言,它的解釋器就是瀏覽器。JavaScript直到現在仍然是網頁瀏覽器內的主要編程語言,它的ECMAScript標準化保證了它成為流行的通用嵌入式腳本語言。另外,隨著動態網頁技術發展,ASP、JSP、PHP等嵌入網頁的腳本語言正被廣泛使用,不過這些腳本要通過Web Server解釋為Html而被瀏覽器執行;
(5)腳本語言在系統應用程序中嵌入使用,作為用戶與系統的接口方式。在工業控制領域,PLC編程、組態軟件的腳本語言是擴充組態系統功能的重要手段;在通信平臺領域,IVR(自動語音應答)流程編程;Office辦公軟件,提供的宏和VBA;其他應用軟件如ER Studio提供的Basic MacroEditor,用戶可以編寫Sax Basic腳本操作ER圖,生成Access庫、導出Word文檔等擴展功能。
3 腳本語言在數據采集系統中的應用
縱觀程序設計語言的發展,一個很顯著的特點就是以機器的性能換取人的效率,以提高開發者的工作效率和滿足人的需求為目標,在所有資源中人是最昂貴的資源,因而程序的編寫從面向機器逐漸向面向人過度。而腳本語言就是可以提高開發效率和滿足客戶需求程序設計的最好選擇。比如在開發中需要對客戶自定義表達式計算時,如果自己去寫表達式解析,將是一個幾乎無法完成的任務。而使用微軟的Script控件,把表達式作為腳本函數返回值,讓Script控件解釋計算,幾行代碼就完成了,開發效率大大提高。
在軟件系統實踐中,用的最多的就是把腳本嵌入應用程序中。快速開發工具Delphi除了可用使用ActiveX控件類型的腳本引擎外,也有許多優秀的原生Delphi腳本引擎控件如Scripter Studio,PaxScr4pter,Inner Fuse Pascal Script,Fast Script等。在開發一款通用的數據采集系統中,就采用了核心架構使用高級語言,用戶擴展和通訊協議使用Fast Script描述的設計模式。之所以選擇FastScript,因為Fast Script是一個交叉平臺的語言的腳本引擎。它對希望增加腳本功能的編程人員非常有用。Fast Script是用100%的Object Pascal編寫,具有支持OLE和變量數組,可以使用多語言腳本(Pascal Script、C++ Script、JScript和BasicScript),與標準面向對象語言語法相近,可以使用程序內的任何對象、標準庫訪問基類、控件、窗體和DB;易可擴展的庫結構;內存占用小等特點。
系統的結構,如圖1所示。采用這種模式,就是要充分發揮系統程序語言和腳本語言的各自優勢。因為核心架構需要創建采集線程、進行任務調度、處理系統消息和加載腳本引擎等,而這些需要穩定且處理效率高,所以使用系統程序語言開發;而對于千變萬化的通訊協議,如果全都被系統核心架構包括,是不可能的。而把各種通訊協議用不同的腳本語言文件描述,供采集系統調用,問題就可以解決了。
如圖1所示,通過系統配置,告訴采集核心需要建立的采集通道(對應采集點,每個通道的任務在自己的線程中調度),以及每個通道的采集任務(對應與通訊協議腳本)和調度方案(何時啟動采集或者多長時間周期采集一次)。正是應用了腳本語言描述采集任務,使得系統具有高度靈活的可配置性。
采集任務通過xml文檔描述,具體的通訊使用Fast Script描述。xml文檔結構如下:
《?xml version=“1.0” encoding=“GBK”?》
《項目名稱=“采集器對時”開始流程=“通信步驟1”》
《全局變量初始化腳本=“…”/》《!--采集任務必要的全局變量加載腳本--》
《通信流程名稱=“通信步驟1”下一流程=“通信步驟2”》
《發送數據腳本=“…”/》《!--通信步驟發送數據的腳本--》
《收全判斷腳本=“…”/》《!--判斷通信數據是否收全的腳本,收全后進入下一步驟--》
《正確回復腳本=“…”/》《!--判斷通信步驟收到數據是否正確的腳本--》
《/通信流程》
……
《通信流程名稱=“通信步驟n”下一流程=“”》
《發送數據腳本=“…”/》
《正確回復腳本=“…”/》
《收全判斷腳本=“…”/》
《/通信流程》
《數據處理腳本=“…”/》《!--處理收到數據的腳本,一般用于數據解析并保存數據--》
《/項目》
在系統核心中,把系統一些常量、函數聲明、讀入的腳本一起組成完整的腳本。
以下是幾個典型腳本的例程(函數聲明為系統定義,斜體部分為XML文檔中讀入系統)。
全局變量初始化腳本如下:
Procedure (Conn: TADOConnection; varGlobalVar:Variant);
begin{全局變量分別為采集點地址,開始地址,結束地址}
系統核心按照XML定義的流程,通過腳本控件的CallFunction、CallFunctionl、CallFunction2方法調用腳本中的函數,根據執行結果執行相關操作并寫入日志。在實踐應用中發現,整個腳本的語法檢查(Compile方法)占用系統的資源最多、對系統影響較大。所以在系統開始時,就把所有任務腳本讀人內存中,并通過腳本控件的語法檢查,這樣雖然加大了系統內存開銷,但是整個腳本語法檢查只做一次,任務調度時直接執行腳本。比較與每次任務調度時讀人腳本、檢查語法、執行,效率提高相當明顯,幾乎可以達到與系統語言相媲美水平。
除了描述采集通訊協議,系統還允許用戶通過腳本自定義界面,開發了腳本編輯、調試工具,方便腳本編寫,這里不作詳述。
從上述應用可以發現,這種腳本的語法與Del-phi十分相似,易于編寫,又能描述復雜、變化的任務。即能保持基本框架不變,又能使系統靈活。
4 結束語
今天,用腳本語言編寫的應用程序的數目遠多于用系統程序設計語言編寫的應用程序的數目。在Unix系統中有比C程序更多的外部腳本。當然,多數大型和廣泛使用的應用程序都是用系統程序設計語言寫成的,但腳本語言已經是應用程序開發的主動力,并且今后它的市場份額會繼續提高。腳本將對越來越多的應用程序產生吸引力。以Python,Perl,Tcl,Ruby為代表的動態語言越來越受到開發者的青睞,使用動態語言群體、社區不斷壯大,許多開發團隊不再單純使用一種語言編程開發軟件,而是混合式編程,動態語言作為膠水語言專為應用程序而設計,在今后的混合式應用中變的越來越重要,甚至有人認為腳本語言是“21世紀更高級的編程語言”。
評論
查看更多