地理計(jì)算語言,為大眾賦能地理智慧。 ——DAS Team 地理計(jì)算語言(G語言)是新型地理計(jì)算模式的核心。在傳統(tǒng)的程序開發(fā)領(lǐng)域,編程語言是一種人與計(jì)算機(jī)溝通的工具,具有嚴(yán)密的語法規(guī)則和完整的編譯環(huán)境。這種機(jī)器思維的門檻使得程序開發(fā)并非易事,程序開發(fā)人員需經(jīng)過長期的訓(xùn)練方能具備機(jī)器思維能力。G語言出現(xiàn)的初衷就是降低使用者(開發(fā)者)的應(yīng)用難度,讓不熟悉軟件開發(fā)和GIS軟件使用的人都能完成地理分析。 高級(jí)編程語言的分類 G語言本質(zhì)上屬于編程語言。目前流行的高級(jí)編程語言有幾十種之多,大體可分為以下四類: 命令式語言 這種編程語言是基于動(dòng)作的語言,以馮·諾伊曼計(jì)算機(jī)體系結(jié)構(gòu)為背景。機(jī)器語言及匯編語言是最早的命令式語言。在這種語言中,計(jì)算機(jī)被看做是動(dòng)作的序列,程序就是用語言提供的操作命令編寫的一個(gè)操作序列。用命令式程序設(shè)計(jì)語言編寫程序,就是描述解題過程中每一步的過程,程序的運(yùn)行過程就是問題的求解過程,因此也稱為過程式語言。 目前流行的大多數(shù)語言都是這一類型,如 Fortran、Pascal、Cobol、C、C++、Basic、Ada、Java、C# 等,此外,各種腳本語言也被看作是此種類型。 ▲ VB語言 函數(shù)式語言 這是一種非馮·諾伊曼式的程序設(shè)計(jì)語言,其主要成分是原始函數(shù)、定義函數(shù)和函數(shù)型。這種語言具有較強(qiáng)的組織數(shù)據(jù)結(jié)構(gòu)的能力,可以把某一數(shù)據(jù)結(jié)構(gòu)(如數(shù)組)作為單一值處理;可以把函數(shù)作為參數(shù),其結(jié)果也可為函數(shù),這種定義的函數(shù)稱為高階函數(shù),程序就是函數(shù),程序作用在結(jié)構(gòu)型數(shù)據(jù)上,產(chǎn)生結(jié)構(gòu)型結(jié)果,從根本上改變了馮·諾伊曼式語言的“逐詞”工作方式。這種語言非常適合于進(jìn)行人工智能等工作的計(jì)算。 典型的函數(shù)式語言有 Lisp、Haskell、ML、Scheme 、F#等。 ▲ Haskell語言 邏輯式語言 這是一種面向演繹推理的邏輯型程序設(shè)計(jì)語言,其語義基礎(chǔ)是基于一組已知規(guī)則的形式邏輯系統(tǒng)。這種語言主要用在專家系統(tǒng)的實(shí)現(xiàn)中,最著名的邏輯式語言是 Prolog。 ▲ Prolog語言 面向?qū)ο笳Z言 這種語言是一類以對(duì)象作為基本程序結(jié)構(gòu)單位的程序設(shè)計(jì)語言,用于描述的設(shè)計(jì)是以對(duì)象為核心,而對(duì)象是程序運(yùn)行時(shí)刻的基本成分。語言中提供了類、繼承等成分,有認(rèn)識(shí)性、多態(tài)性、類別性和繼承性四個(gè)主要特點(diǎn)。目前主流的編程語言都提供面向?qū)ο蟮闹С?,但有些語言是直接建立在面向?qū)ο蠡灸P蜕系模Z言的語法形式就是基本對(duì)象操作,主要的純面向?qū)ο笳Z言是 Smalltalk。 ▲ Smalltalk語言 高級(jí)編程語言的局限性 編程語言發(fā)展到目前,盡管從第一代機(jī)器語言到現(xiàn)在的高級(jí)語言已取得了長足的進(jìn)步,但也應(yīng)該看到能夠真正掌握編程技能解決問題的畢竟是少數(shù)人。用編程語言開發(fā)自己需要的系統(tǒng)以解決工作、學(xué)習(xí)和生活上的問題,對(duì)大多數(shù)人來說仍然是件非常困難的事。這說明:編程語言的大眾化工作任重而道遠(yuǎn)。 分析深層次的原因會(huì)發(fā)現(xiàn),目前的編程語言從本質(zhì)上講仍然是一種機(jī)器思維的語言,其基本特征就是邏輯嚴(yán)密,而人們?nèi)粘=涣鞯淖匀徽Z言盡管有邏輯性,但不嚴(yán)密。為此,對(duì)于初學(xué)編程的用戶來說,他們必須通過大量的學(xué)習(xí)和訓(xùn)練才能將自然思維轉(zhuǎn)化為機(jī)器思維,也就是說他們需要去學(xué)習(xí)特定的程序語言,記憶一些固定、嚴(yán)格的語法規(guī)則,學(xué)習(xí)用軟件工程的方法將現(xiàn)實(shí)的需求轉(zhuǎn)換為程序描述,需要考慮如何設(shè)計(jì)系統(tǒng),如何選擇組件,如何讓不同的組件協(xié)調(diào)工作。這種由自然思維模式到機(jī)器思維模式的轉(zhuǎn)變,對(duì)大多數(shù)人來說具有很大的挑戰(zhàn)性,這就導(dǎo)致大部分用戶雖然經(jīng)過一段時(shí)間的訓(xùn)練,還是不能通過編程語言來開發(fā)系統(tǒng)、解決問題。 綜上所述,目前的編程語言仍然是一種機(jī)器思維語言,若不從根本上改變這種狀況,編程對(duì)大多數(shù)人來說仍然是一個(gè)遙不可及的夢(mèng)。 最終用戶編程 所謂最終用戶編程就是讓沒有軟件開發(fā)基礎(chǔ)的用戶運(yùn)用他們自己的領(lǐng)域知識(shí)去開發(fā)軟件,最終用戶既是開發(fā)者也是使用者,他們對(duì)自己的需求是最明確的,不會(huì)存在溝通的問題。采用最終用戶編程所開發(fā)的程序是最終用戶自己所能理解和看懂的,在軟件維護(hù)過程中,最終用戶也就能了解整個(gè)軟件的不足,縮短維護(hù)周期。 此外,在傳統(tǒng)軟件開發(fā)過程中,軟件供不應(yīng)求是另一個(gè)長期面臨的問題,軟件的開發(fā)速度和生產(chǎn)率永遠(yuǎn)達(dá)不到用戶的需要。由于最終用戶編程能讓更多的用戶自行開發(fā)自己需要的軟件,這會(huì)使軟件開發(fā)的速度提高、周期縮短。 目前,面向最終用戶編程有程序合成(Program Synthesis)、模型驅(qū)動(dòng)(Model Driven Development)、簡(jiǎn)捷編程(Sloppy Programming)以及領(lǐng)域特定語言(Domain-Specific Language)四種方法。其中,領(lǐng)域特定語言(Domain Specific Language,DSL)是針對(duì)某一特定領(lǐng)域具有受限制表達(dá)性的一種編程語言,其基本思想是“求專不求全”。與一般通用編程語言不同,其目標(biāo)范圍不是涵蓋一切軟件問題,而是專門針對(duì)某一特定問題的計(jì)算機(jī)語言。領(lǐng)域特定語言的首要目的是使程序盡可能地接近業(yè)務(wù)領(lǐng)域中的問題,從而消除不必要的間接性和復(fù)雜性。由于領(lǐng)域特定語言針對(duì)特定領(lǐng)域,它能更簡(jiǎn)潔、清晰、系統(tǒng)地描述需求的意圖,從而提高開發(fā)效率,使開發(fā)過程更加輕松。 DSL的最大特點(diǎn)是該語言是一種描述性的語言,只是說明想要什么,而不像通用編程語言(如C,Python)那樣,要詳細(xì)寫出一步步如何做和實(shí)現(xiàn)。Debasish Ghosh總結(jié)了兩點(diǎn)領(lǐng)域特定語言與通用編程語言的差異。 第一、DSL為用戶提供了更高層次的抽象,這使得用戶不用去關(guān)心諸如特殊的數(shù)據(jù)結(jié)構(gòu)或低層次實(shí)現(xiàn)等細(xì)節(jié),而僅僅去著手解決當(dāng)下的問題即可。 第二、DSL對(duì)于其關(guān)注的領(lǐng)域提供了有限的詞匯,它不用像通用編程語言那樣為特定的建模領(lǐng)域提供額外的幫助。 以上這兩點(diǎn)使得DSL更合適非程序員的領(lǐng)域?qū)<沂褂?。也正是這些特性,通過DSL能在更高抽象級(jí)直觀地表達(dá)應(yīng)用問題,能在領(lǐng)域級(jí)完成需求確認(rèn),實(shí)現(xiàn)有效的復(fù)用。同時(shí),又能通過工具支持和領(lǐng)域知識(shí)復(fù)用,使許多從規(guī)范說明到可執(zhí)行代碼的轉(zhuǎn)換任務(wù)能實(shí)現(xiàn)自動(dòng)化,讓先進(jìn)技術(shù)能在更廣范圍內(nèi)使用,避免因開發(fā)人員技能水平差異帶來大的起伏,從而顯著提高軟件開發(fā)效率和質(zhì)量,加快產(chǎn)品開發(fā)速度,滿足應(yīng)用多變的需求。 DSL相關(guān)的研究已經(jīng)持續(xù)了較長一段時(shí)間,并取得了一定的研究成果,主要的DSL有:
▲ CSS語句 ▲ SQL語句 G語言的設(shè)計(jì)思想 面向不具備編程能力的業(yè)務(wù)用戶 通常,編程語言的目標(biāo)群體為程序員(使用C#或VB.net)或具有一定編程能力的業(yè)務(wù)人員(使用Python或R語言),而G語言的目標(biāo)群體是那些不具備編程能力的大部分業(yè)務(wù)人員。對(duì)于這些用戶,只要熟悉自己的業(yè)務(wù),對(duì)GIS有基本的了解,即可應(yīng)用G語言解決地理計(jì)算問題。 易于掌握 既然G語言的用戶群體為不具備編程能力的業(yè)務(wù)人員,為了減少他們學(xué)習(xí)G語言的難度,G語言的語法規(guī)則應(yīng)簡(jiǎn)潔明了、易于學(xué)習(xí)、便于記憶,以便他們能夠快速理解和掌握。 可讀性 G語言應(yīng)提供足夠多的信息,以保證業(yè)務(wù)人員能夠?qū)λ褂没蛱幚淼牡乩碛?jì)算任務(wù)從方法、模型到參數(shù)含義都能夠有充分的理解,便于知識(shí)的共享與傳播。 過程可追溯性 為了保證地理計(jì)算的質(zhì)量,G語言需要提供一系列的手段,以保證地理計(jì)算過程的可驗(yàn)證和可追溯性。 表格式計(jì)算 為了降低普通業(yè)務(wù)人員使用G語言的難度,G語言在形式上利用Word文檔中的表格進(jìn)行地理計(jì)算過程的表達(dá)。換句話說,使用G語言編程只需要人們按照G語言的簡(jiǎn)單規(guī)則填寫表格即可。 平臺(tái)無關(guān)性 G語言應(yīng)是一種跨越GIS平臺(tái)的地理計(jì)算過程描述語言,雖然具體的地理計(jì)算是通過現(xiàn)有GIS平臺(tái)來實(shí)現(xiàn),但GIS語言中所使用的關(guān)鍵詞與具體的GIS平臺(tái)無關(guān),任何GIS平臺(tái)只要實(shí)現(xiàn)了G語言所設(shè)定的關(guān)鍵詞即可使用G語言進(jìn)行地理計(jì)算。對(duì)于不同的GIS平臺(tái)(如ESRI的ArcGIS或超圖的SuperMap),只要利用這些平臺(tái)所提供的二次開發(fā)庫實(shí)現(xiàn)了G語言ArcGIS版本或SuperMap版本的解釋器,就可以利用G語言完成各種地理計(jì)算。這樣,對(duì)于普通業(yè)務(wù)人員來說,若想進(jìn)行地理計(jì)算,只需掌握G語言而無需掌握GIS平臺(tái)的具體操作,這無疑會(huì)降低學(xué)習(xí)GIS的成本和應(yīng)用門檻。 ▲ G語言地理計(jì)算任務(wù)描述 G語言的基本術(shù)語 由于G語言主要是面向最終用戶的領(lǐng)域特定語言,該語言的使用者為最終用戶,而最終用戶通常沒有編寫程序的經(jīng)驗(yàn),傳統(tǒng)編程語言中的術(shù)語,如過程、函數(shù),語句等對(duì)他們來說是難以理解的,為此,在G語言中采用地理工程、地理計(jì)算任務(wù)和地理計(jì)算項(xiàng)等面向業(yè)務(wù)領(lǐng)域、易于理解的概念或術(shù)語,方便使用。 地理計(jì)算工程 指一項(xiàng)涉及地理空間分析與研究的復(fù)雜計(jì)算項(xiàng)目,如國土空間規(guī)劃“雙評(píng)價(jià)”、雙評(píng)估,各類環(huán)境評(píng)價(jià)等。從程序設(shè)計(jì)角度來看,G語言中的地理計(jì)算工程相當(dāng)于傳統(tǒng)編程語言中的應(yīng)用程序項(xiàng)目。 地理計(jì)算任務(wù) 對(duì)于一項(xiàng)地理計(jì)算工程來說,由于涉及內(nèi)容較多,通常將其按專業(yè)或處理分析相關(guān)性將一項(xiàng)地理計(jì)算工程劃分為若干地理計(jì)算任務(wù),以便地理計(jì)算工作合理、有序地開展。如對(duì)于國土空間規(guī)劃“雙評(píng)價(jià)”來說,將其可分為土地資源評(píng)價(jià)、水資源評(píng)價(jià)等20多個(gè)計(jì)算任務(wù)。地理計(jì)算任務(wù)的概念對(duì)應(yīng)于傳統(tǒng)編程語言中的過程或函數(shù)。 地理計(jì)算任務(wù)組 為了方便對(duì)地理計(jì)算任務(wù)的管理,可將地理計(jì)算任務(wù)劃分為若干地理計(jì)算任務(wù)組,如在國土空間規(guī)劃“雙評(píng)價(jià)”中,將20多個(gè)地理計(jì)算任務(wù)劃分為單項(xiàng)評(píng)價(jià),集成評(píng)價(jià),綜合評(píng)價(jià)、對(duì)比分析等多個(gè)組。地理計(jì)算任務(wù)組的概念對(duì)應(yīng)于傳統(tǒng)編程語言中由函數(shù)構(gòu)成的模塊。 地理計(jì)算項(xiàng) 對(duì)于一個(gè)地理計(jì)算任務(wù)來說,它是由若干地理計(jì)算項(xiàng)組成的,每個(gè)地理計(jì)算項(xiàng)可以單獨(dú)完成一項(xiàng)空間分析工作,如緩沖區(qū)分析,疊置分析,矢量數(shù)據(jù)柵格化等。從程序設(shè)計(jì)角度來看,G語言中的地理計(jì)算項(xiàng)相當(dāng)于傳統(tǒng)編程語言中的執(zhí)行語句。 ▲ G語言基本術(shù)語的關(guān)系 |
|