對新型軟體程式語言及架構的一點討論

來源:互聯網
上載者:User
程式架構與軟體、應用架構

最近一直在關注豆瓣上Zhang3關於新型程式語言研究的情況[1],及一些相關的討論。這裡有一個與我的重點領域模型與建模以及架構契合的地方,即軟體程式架構或簡單稱為“程式架構”(programming architecture)。這是一個不太常用的提法,相對於常見的軟體(系統)架構和應用架構,它更單純、狹窄。在這個範圍內,我們主要關心程式(programs)的組織架構與設計原則,相對忽略更高層次上的東西,例如組件、模組、伺服器、配置與部署等等。從另一個角度,這個話題與程式設計語言的結構和設計緊密相連。

實際上,當前主流的程式架構就是“物件導向”(OO)。我一直認為,OO原本應該是一種有特定適用範圍的架構風格。然而在近幾十年的軟體開發領域,OO被主流們推到了一般軟體架構這樣一個幾乎是至高無上的位置,甚至還進一步被當作一般問題分析與建模的基礎,乃至“哲學”。例如在MDE/MDA領域也是如此。對此,Zhang3和我一樣,屬於“不同意見者”。他對這個話題有著相當深入的分析之[2]。而他的開發計劃目標之一,就是開闢OO之外的,更合理和有力的編程技術空間:非OO的方法學和編程體系(程式設計語言及整合式開發環境IDE等)。

更經典的程式架構是 Niklaus Wirth 的“程式 = 資料結構 + 演算法”(Algorithms + Data Structures = Programs)。最近,隨著一般模型理論方面的一些進展,我“意外”地發現,這一在OO時代被認為過時的公式,恰恰揭示了軟體程式的根本結構,應是萬變不離之宗。OO也是建立於其上的;非OO的編程架構,同樣必須建立其上。但這絕對不是要回到3GL時代,需要通過新的模型與建模理論,更清楚地揭示其理論基礎和作用方式,建立新的理解和應用準則。

這正對應著現有軟體理論最蒼白的一環:在圖靈機之上,“資料結構+演算法”(還可帶上“關聯式模式”)之外,另一些重要的東西,無論在理論還是技術上。這個層次也是決定電腦從序列演算(圖靈機)變成資訊(資料的意義)處理機——電腦的關鍵。OO是當前公認的主要解決方案,但實際上它是直覺的,缺乏理論基礎的;而其它的應用程式實現?幾乎都是更加隨意、純經驗的構造。

可以清楚地看到,近二十餘年國際軟體工程主流,同樣將注意力集中到了建模與模型上,但遺憾的是,主流們同時也不容置疑地把建模與OO划上了等號,集OO方法大成的整合模組化語言UML成為絕對核心,以至於在當前幾乎所有與軟體建模相關的國際學術與技術交流中,形成了某種談建模,就必須基於UML這樣一種既狹隘,又霸道的氛圍。

另一方面,還可以看到,被稱為軟體發展一貫的主線:抽象層次升級,在CASE, 4GL等那裡開始撞牆。宣告式程式設計、函數式編程、面向方面等,各有獨特,但未現王者之相。建模成為軟體工程技術及學術界探索的焦點,其中最有代表性的是隨著對象管理組織(OMG)的模型驅動架構(MDA)浮現出來的模型驅動工程(MDE)[3],雖然國內對此重視不多,但這實際是軟體工程前沿(其它如雲,各種Web應用技術,包括SOA等與之相比,都是更加應用技術層的東西)。然而,近年對MDE的觀察讓我覺得它在某種意義上,仍然沒有突破CASE, 4GL的一些局限,很可能又在撞牆[4]。MDA剛出爐我就有這種判斷,最近一年的跟蹤以及參與到國際MDE社區中的直接交流,讓我這種看法更強了。

正因為如此,我們可以作出這樣一個判斷:當前的電腦應用建構技術,依然沒有找到最合理與基本的架構;在有堅實數學基礎的圖靈機之上,還需要一個重要的基礎層次,它同樣必須堅實地坐落在數學之上,它還沒有出現[5]。我認為,OO目前處在這個不能勝任的位置上,最終將淪為一場猴子稱大王的故事。

邏輯系統如何串連到現實世界

邏輯系統(即形式系統)是一個封閉的、自洽的符號/運算(推理)系統,其本身並不包括(決定)它的用途。換言之,一個完善的邏輯系統內部並不需要包括它與外界世界相連的固定方案。實際上,這也可以看作其稱為“形式化的”(formalized)的原因。Zhang3的基本思路,就是構造一種完全基於邏輯的非OO程式設計語言,這這一形式系統,毫無疑問、必然地,基於圖靈機,如他所說[1]:

“真實世界過於複雜,與語言的糾纏關係難以梳理,不如先退回到圖靈機所構造的確定性世界,在這個世界中探索語言的奧秘。”

這種自底向上的構造策略,很符合我的建構主義哲學。事實上,任何現代電腦程式設計語言都是在構造一個基於圖靈機的形式系統,但如何構造,途徑很多,這也就是本文所討論的程式架構問題。Zhang3在這個方面提出了獨特的想法,其中一個很重要的方面,就是拋棄目前似乎是主流的物件導向的架構(OO),而完全基於邏輯(和關係代數),遵循分析哲學中的基本原則實現。

然而,形式化構造只是這個課題一半。無論形式系統怎樣構建,最終必須以某種方式串連到現實世界,才能發揮其作用——這就是建立有意義的電腦程式重要的另一半。換言之,我們可以策略性地將形式系統建構以及它如何工作(在現實世界中)適當分離,但終究要完善地解決。Zhang3的工作無可避免地要面對這個問題,而他最近的兩篇日誌說明,對這個問題還沒有一個穩定的、滿意答案[6]。同時,雖然出發點不同,我發現有關模型與建模基本理論的研究,正包含著對這個問題的基本回答。我相信,模型與基於模型的操作是將邏輯系統串連到現實世界最基本的橋樑。要具體地建構和應用這個橋樑,就必須充分地運用我們所看到(研究中)的一般建模理論,及模型工作機制等基本原理。

Rapaport等的啟示

前面提到,Zhang3在提出的基本問題之一,是形式系統如何與現實世界聯結。從另一個角度,它也就是語言的語義問題,文法和語義關係的具體實現方式問題。再廣一點,可以追溯到經典的“意義問題”上。回到與電腦及其語言相關的領域,這同樣是長期被學術界重點研究的基礎課題之一。我發現,W.J. Rapaport 等的一些工作,可以直接與我在一般建模方面的一些進展聯絡起來,形成一個基本完整理論架構,對於本文討論的主題,同樣可以起到關鍵的指導作用。

這些工作包括對“怎樣從文法中產生語義”這一基本問題的回答[7]。Rapaport從什麼是“理解”的角度,詳細地分析了其中的文法、語義結構及關係問題。理解就是獲得語義,他認為,我們總是要基於一個域(domain)理解(解釋)另一個域。而這是一個遞迴的過程,最終總會歸結到一個域(稱為基域,base),沒有任何域來解釋它,必須基於自身(也就是文法)做出解釋,這樣就形成了一個語義解釋的連續統(continuum)[8]。他指出[7]:

當一個文法域擁有其自己的語義域,其語義解釋函數或者將記號映射到其自身,或者映射到其它記號。對前一種情況,我們通過對文法“達成習慣”來理解域。對後一種情況,若所有的記號都映射到另一個不同的記號——則此情形相當於在使用一個字典。[...]在任何情況下,我們都有封閉的意義網路——一種整體性的、“概念性角色語義”。這就是為何語義能由文法中出現的答案。

實際上,我認為,從認知主體如何理解語言的意義角度,他的方案也許還有很多爭論,但反過來,從構造一個有限/實用的形式語言系統,並關聯到問題領域(現實世界)角度,這卻給了我們很好的啟發。尤其是針對本文討論的話題,如Zhang3所明確提出的開發課題:如何在最簡單/基本的圖靈機(可將其視為最基本的文法/語義域)的基礎上,建立一個形式體系,它能夠構造出我們期望的各種複雜構造,來對應到現實世界的各種事物(語義)。從軟體工程領域提倡的“抽象層次升級”的角度看,一種自底向上的,建構性的“表達連續統”,可以看作是“抽象層次”的內涵,以此為線索,再結合我們對於一般模型理論及其工作機制的一系列新認識,就發現,不僅對於抽象層次,我們可以在這個基礎上全面地重新審視諸如4GL/DSL、或所謂“聲明性”概念背後的一些東西,對幾乎所有MDE的關鍵理論,做出更明確的解讀或梳理。由此可能實現一種架構,將4GL/DSL的某些內涵,資料庫,包括資訊科學另一個重要、活躍的領域,本體工程方面的東西,自然地聚和在一起。在這個體系中,資料結構/模型,都有特定的含義,並非(完全)等同於過去的理解,甚至對於程式、演算法這樣的基本概念也是如此。其中,我稱之為“一般建模理論”的那部分工作,最重要的貢獻之一,是將這種架構落實到嚴格的數學基礎之上,這是確保我們的理論與方案堅實、有效最關鍵的保障。(初發於此)

—-

[1] 見Zhang3:大綱:一封關於我的研究的郵件回複、第五重等。

[2] 見其物件導向的解構等文,以及關係代數與物件導向理論等。網路上waterbird (1998) 的 OO,OO以後,及其極限<1>、<2>,是我較早讀到的極具啟發性的早期討論。

[3] 初步概念參見企業工程論壇模型驅動工程(MDE):一個初步簡介等。

[4] 在Models: Execution or More及討論中,我略帶隱晦指出了這一點。大家看來在有意無意地迴避或無視,而我在其它地方看見過他們對這個問題頗強烈的否認。

[5] 這個問題本質上還與電腦架構關聯,例如可以直接聯絡到到馮·諾依曼體繫結構的瓶頸及作業系統的功能等問題,但也完全有必要和可能在當前的電腦體繫結構之下找到對應的解決方案。

[6] Zhang3的相關討論如柏拉圖的理念世界等,最近的兩篇是 一個關於形式系統的問題、實現方法的重大變化–備忘。我對此的一個初步意見,也是本文的前身,見我的豆瓣日誌:關於軟體程式架構的一些基本想法。

[7] Rapaport, W.J., “Understanding Understanding: Syntactic Semantics and Computational Cognition”, Philosophical Perspectives, Vol. 9 (1995)

[8] 這裡的連續統(continuum)概念,應該出自B. C. Smith (1987)。他從知識表達的角度研究語義問題,提出了表達系統(這裡可粗略理解為語義系統)中的對應連續統(correspondence continuum)的主張。

* Zhang3:與TY討論語義解釋連續統的問題,本文發出後所做的一次很有意思的討論。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.