黃嘉誠
(江南大學,江蘇無錫 214122)
語言是資源溝通、信息交流的一種重要方式[1]。計算機語言問世于20世紀50年代,是計算機軟件的一個重要組成部分,對于計算機發展具有非常重要的意義。計算機語言經歷了機器語言、匯編語言以及高級語言三個階段[2]。其中高級語言提升了對用戶的友好程度,降低了對硬件的依賴程度,充分滿足了社會需求,得到了廣泛的使用與推廣[3]。在計算機語言發展歷史中,編程起源于西方,英文編程成為了主流與規范,漢字編程卻發展艱難,而易語言(EPL)則是漢字編程中的典型代表。本文分別通過易語言以及C++編程語言,來設計與仿真基于元胞自動機的生命游戲,進一步討論易語言的特點,以及展現中英文編程的差異。
易語言是中國人發明的一種計算機編程語言,以“易”著稱,早期稱為E語言,是一種以漢字為程序代碼來展現的語言形式[4]。易語言誕生于國內計算機發展初期,此時漢化系統與漢語輸入法才步入正軌。為了促進漢語編程的發展,吳濤先生在2000年研發出了易語言的最早版本。經過20多年的發展,易語言已經具備一定規模,具有安裝方便、操作簡單、容易上手等特點,不僅支持界面設計與程序流程的可視化,還具有即時幫助系統、語法格式自動檢查等功能[5]。在軟件編譯器的設計、漢語可視化的編程等方面具有一定的創新,處于國內領先地位,像《中華辦公系統》《紅警2戰網》等軟件都是采用易語言編寫的。易語言的趣味性很強,學習以及入門門檻較低,為國內非專業人士、英文基礎薄弱人群以及電腦編程初學者提供了相對容易的學習環境與學習機會,可以在較短的時間內進入windows程序系統的大門[6]。它的程序實現是由窗體設計以及代碼編寫組合而成,因此易語言在小游戲和小程序的開發與實現上具有顯著的優勢。
易語言是完全面向對象的計算機語言,與VB語言有很多相似之處[7]。易語言的編譯器能夠將源代碼編譯為易語言類庫或者可執行文件,兼容Windows的所有系統,且支持DOS與Linux等不同操作系統。編譯方式主要分為普通編譯、靜態編譯以及早期的獨立編譯三種,能夠高效編譯執行。易語言屬于模塊化語言,方便直接調用編寫好的現成模塊,但同時性能受到一定影響,在傳遞過程中需要附帶各種庫文件,整體所占空間較大。
易語言的表達式包括常量、變量、立即數、表達式、方法調用以及各自的組合。每一行代碼可以由多條語句組成,語句需要以“;”結尾,按照漢語的邏輯思維進行代碼編寫,語義清晰明了。
這里使用的集成開發環境是2019年5月發布的易語言5.9版本。
C++語言完全兼容于C語言,是對C語言的補充與增強,總共融合了3種不同的計算機編程傳統。在C語言代表的過程性傳統的基礎上,C++增加了面向對象語言的傳統以及通用編程傳統。它首先考慮的是如何建立一個符合要求的對象模型,使其能夠解決與之契合的問題,然后通過引進對象的狀態信息來實現對象的控制過程,因此它也被稱為“帶類的C”[8]。標準的C++語言有以下三個重要模塊所構成:第一部分是核心語言,負責提供變量、數據類型等所有構件塊[9]。第二部分是C++標準庫,負責提供函數和編程數據結構來傳遞鏈表、數組等組件。第三部分是標準模板庫(STL),負責標準化組件,便于用戶以后直接使用。此外,配置C++的語言環境只需要文本編輯器和C++編譯器兩個基本軟件。相比于易語言,C++語言同等程序大小一般只有幾千字節,運行和使用效率大大提高。本文使用的是Visual Studio 2010作為開發環境,來實現生命游戲的可視化編程。Visual Studio是Windows平臺中使用最為廣泛的應用程序開發環境,支持用戶使用各種程序語言進行軟件開發,并支持動態編程、多核并行運算等功能。
20世紀80年代,復雜性科學被首次提出,便引起了全球科學家廣泛的關注與思考,一度被譽為“21世紀的科學”[10]。為了探索復雜性科學與復雜性系統,海內外學者提出了各種方法。其中元胞自動機(cellular automaton,CA) 因為它的簡單規則性、并行性以及有效性受到廣泛的關注與應用。
元胞自動機由元胞、規則與鄰居三部分構成,每一個元胞都有固定的位置與兩種狀態[11]。假設初始存在一個元胞群,每經歷一個時間單位,每一個元胞都會根據設定的規則,在局部也就是鄰居范圍內進行一次變化,無數個局部共同構成一個大的環境。看似簡單的規則卻很難預測大環境下最終元胞的變化,非常具備趣味性[12]。舉個例子,初始狀態為規則劃分好的正方形元胞群,形狀類似于一扇古城墻的大門,其中元胞的狀態只有黑色或者白色兩種,規則是如果一個元胞為白色,而與之相鄰的元胞為黑色,那么顏色將保持白色,否則顏色將變為黑色。于是僅僅改變水平或垂直相鄰的任意元胞,圖形的輪廓便被勾勒出來。如圖1所示,每一個元胞對應著局部的信息,都成功地表達出了整個環境狀況。

圖1 元胞演示圖
20世紀60年代末,康威實驗室推出了一款生命游戲,不僅風靡全球,更大大推動了元胞自動機的研究。生命游戲是將元胞分布在規則劃分的網格上,設置元胞周圍九宮格的大小為鄰居范圍,每一個元胞的狀態只有兩種,用二進制數來表示生或者死。每一個元胞的生命狀態由該時刻自身的狀態與下一時刻八個鄰居的元胞的狀態共同決定,并按照一定的規則進行變化。
在生命游戲中,簡單的初始狀態可以不斷變化,逐漸復雜,甚至是無限循環,最終導致了環境的多樣性與復雜性。相反,復雜混沌的初始狀態在簡單規則的作用下,可以逐漸簡化,甚至虛無[13]。
在程序設計中,采用的基本數據結構是二維矩陣,來模擬大量的元胞狀態。整個程序分為子模塊進行編寫與調用,最終按照時序進行排列。本設計中主要程序有兩部分:窗口程序集和主程序。窗口程序集主要包括窗口的啟動、各個選項按鈕的設置、讀入元胞數據以及時鐘設置等方面。整個軟件的界面如圖2所示,此狀態選擇的是隨機分布初始狀態且元胞尺寸最大。為了顯示直觀,采用白色方格來表示狀態“生”。

圖2 易語言軟件界面
在整個程序中,共有三種初始方式可供選擇。第一種是手動設置,讓用戶自由發揮,來創造獨特的圖形,例如在生命游戲中存在一種圖形稱為“滑翔機”,僅僅由5個元胞構成,周期為4,可以每4個變化就向右下角平移1格,雖然元胞的狀態已經發生變化,但元胞群還是保持著原來的形狀。手動設置如圖3所示。

圖3 滑翔機
第二種是隨機設置,可以比較真實地模擬生命游戲的變化過程,例如圖2隨機的初始狀態看上去十分混亂,經過數十次變化后,會形成穩定的狀態,如圖4所示。最終狀態由兩部分組成,一種是以“田”型圖案為代表的穩定型,一種是以“1”型圖案為代表的周期型。其中左下角的圖案稱為“脈沖星”,是一種周期為3的對稱圖形。整個過程會不斷簡化,趨于穩定。

圖4 隨機設置下的穩定狀態
第三種是圖案設置,用txt文本文件對應位置寫好圖形,1表示白色方格,0表示黑色方格,然后插入到程序中,鼠標點擊的位置表示插入圖形的左上角元胞位置。在生命游戲中,雖然元胞的變化難以預測,但是人為地利用規律也可以設置出有趣循環的圖案,筆者設置了一種初始狀態,將它稱為“八面玲瓏”,如圖5所示。

圖5 一種人為設置的有趣圖形
在圖5中心區域共有八個滑翔機,外圈的四個滑翔機按順時針方向飛行,內圈的四個按逆時針方向飛行,互不干擾。在圖形的四周設置了一些“補給倉”,滑翔機經過它們時會損失元胞、補充元胞,在改變行動軌跡的同時形狀不發生變化,在經過四分之一個周期以后,圖形中心部分整體旋轉了90°,如圖6所示,這就是人類可以利用規律來改變與創造事物。

圖6 經歷1/4周期變化后的圖形
此外,可以設置元胞的大小,因為環境的尺寸是固定的,三種大小的元胞對應的是數量不同的三種初始狀態。元胞的演化速率也可以設定,此刻采取的是520 ms。選擇好狀態后點擊“開始”,整個元胞群就會不斷地發生變化,點擊“停止”就會定格在當前狀態,點擊“復位”整個屏幕就會清空。整個軟件的流程圖如圖7所示。

圖7 軟件的流程圖
在整個程序中局部變量與全局變量都是以表格的形式顯示在代碼的開頭,當改變其名稱時,整個程序中所有的該變量都會同步變化,十分方便。與英文編程不同,易語言中每一個分支流程線是可以互相標注的,條理十分清晰。以演化規則來舉例,相關的變量、代碼設置分別如圖8、圖9所示。

圖8 相關變量的設置

圖9 元胞規則的代碼
整個程序的思路清晰簡潔,易語言可以在較短時間內編寫出一個小程序,趣味性足,入門性高。在編寫代碼的過程中,幫助功能可以提示任務的流程。同時可以調用支持庫與模塊,集成開發環境非常強大。設置初始狀態到趨于穩定的運行時間在大約為19.8 s,整體運行時間相對較長。隨著txt文本的增加和時鐘、圖片等組件的使用,易語言所占內存會不斷增加,需要進行有效地刪減。
這里選用Visual Studio 2010軟件來仿真生命游戲的整個演變過程,大致思路與易語言一樣,核心部分依舊是先判斷周圍狀態為“生”的元胞個數,統計并按照規則變化,最后再進行輸出。與易語言的窗口有所不同,選項設置在了最上方,第一個小菜單“State Selection”如圖10所示,通過鼠標選擇來進行初始化,缺少了“圖案設置”選項。此外,還包括另一個小菜單“Introduction”,進行簡單的介紹,如圖11所示。

圖10 狀態選擇菜單

圖11 介紹菜單
整個仿真的界面如圖12所示,相比于易語言,元胞與元胞之間更加清晰、直觀。利用VS2010進行程序的編寫,工作量相對比較大,主要包括頭文件、源文件以及資源文件三類,每一個選項都要設定唯一的地址,比較繁瑣。此外,設置相同初始狀態,C++的運行時間只有5.8 s,執行效率遠遠快于易語言。

圖12 VS2010仿真界面
首先漢語歷史悠久,句式、方言、多音字甚至是語調語氣都會影響句子本來的含義。計算機語言無論是漢語還是英文都需要轉化成二進制代碼傳遞給計算機,相比于英文字母,一個漢字占據兩個字節,在計算機空間與時間效率上,漢語編程相對處于劣勢,在易語言內存操作數組進行檢索,模塊化調用的關系,性能會有所提升。
其次編程起源于西方,英語編程的流通性、架構體系以及開發環境都相對完善。例如在計算機中效率最高的表達形式是三進制或者e進制,三進制更加貼近于人類的思維,是信息表達的最優定義。但是目前人類主流的表達形式依然是二進制,根本原因在于人們不想改變熟悉的環境,更不想去打破二進制的壟斷地位,權衡利弊之下選擇了維持現狀。而漢語編程走向世界面臨著相同的問題,就好比手機出現故障,調試時藍屏出現的都是英文代碼,此時用英文去恢復相對容易,漢語編程的難度可想而知。
易語言的編程頁面相對比較美觀,整體的編程邏輯思維簡潔,入門性高、學習門檻較低,可以在最短時間內進行可視化編程,對于一般初學者學習開發很有幫助。易語言的初衷是做一臺輕便的“電動車”,是大眾的定位錯誤與期望較高。易語言是基于C/C++語言開發,它的部分編譯器也是由C++編寫,因此在高級模塊上注定是有缺失的。反觀C++語言,不僅繼承了C語言的精華與優點,更增加了面向對象等特點,是企業級系統軟件的必備之選。此外,它的運行效率也遠遠高于易語言,在處理大數據運算時優勢明顯[14]。當然,編程語言的強大與否,與用戶的個人能力與算法實現也有緊密關聯。
對于計算機語言,目前關注點在于可擴展性、可書寫性、運行效率、簡易程度以及邏輯思維等。本文進行可視化編程對比,研究結果表明漢語編程在執行程序時,所占計算機內存空間較大,執行速率相對較慢。相比于英語編程,在可書寫性、簡易程度以及邏輯思維等都有一定的優勢,方便用戶在短時間上手與操作。對于編程而言,其本質應該與生命游戲相同,用最簡潔的代碼去實現一個復雜而高級的系統,本就應該具備語言無關性。最后,生命游戲是一種開放式的結局,暗示著最簡單的邏輯規則,也能創造出復雜有趣的現象,需要進行不斷地探索與發現。