如果編程語言是從象語素文字而非表音文字設計,什麼會不同?
雖然有易語言之類模仿已有編程語言的語言存在, 但不是話題主角
現在的編程語言大都是英文的拼寫, 語法加單詞加修飾符和大量空格 如果一開始是語素語言比如中文, 會有怎樣的區別? 設想而已.. 怎樣利用語素語言的特點呢?
程序設計語言的基礎是上下文無關文法和有限狀態自動機理論。這兩個都是一個數學概念,和語言是無關的。
在各種程序設計語言中,除了少數類似COBOL之類的語言以為,其他都被設計的比較形式化,符號化。所以對於漢語這類的表意文字來說,應該更有利於表示這些符號化的代碼。
如果我們看一下編譯器的前端的實現,我們可以發現,編譯器在掃描代碼的時候,會將for、while之類的各種關鍵字或者符號,轉化為一種中間表示形式,比如一個整數。那麼同樣的,這樣的整數也可以由類似「從」「當」之類的漢字得到。轉換為這種中間表示形式之後,後面的過程總的來說是不會有什麼太大的差別的。
所以只要語法可以保證沒有二義性,那麼任何語言應該都是可以被設計為變成語言的。這應該屬於猜想系列,類似於「未來的編程語言將『each object has one thread inside it』. 」這樣的觀點。
- 我不反對用中文(如函數命名)編程,雖然中文相對英文不那麼清晰,用文言文都不能夠表述好抽象的邏輯.
- 關於象語素文字的描述, wenlin的字元描述語言(CDL----Character Description Language)如圖,這是使用XML來表示字元組成和像素位置的,(XML或許不是必須的,比如REBOL語言使用BLOCK來表示XML),另外有表意文字描述序列(IDS)見http://zh.wikipedia.org/wiki/%E8%A1%A8%E6%84%8F%E6%96%87%E5%AD%97%E5%BA%8F%E5%88%97 這些都有可能涉及到傳統的訓詁學。然而這些最大的可能只是組字(見第1點), 比如做到資料庫裡面,不足以推及編程語言的程度。
- 更具理論或者說更廣泛一點的是, 圖像描述語言(Picture Description Language)以及發展成的 plex structures, 使用三組列表組成。見 http://books.google.com.hk/books?id=GfdWeTb5-8QCpg=PA53dq=plex++grammars+A.C.Shawhl=zh-CNsa=Xei=yeGJT8DnDY_MmAXY-NDfCQved=0CDoQ6AEwAQ#v=onepageq=plex%20%20grammars%20A.C.Shawf=false
- 歷史上,沈語言是由Forth改的,雖然有宣傳等什麼方面的原因,但是Forth確實對漢語編程有很多啟發(比如Forth的字是由其他字直接組合而成,而漢字由其他字作為構件組合而成,這很相似).漢語是重語義,輕文法,函數式編程重目標,輕過程. 現在更有研究後綴形式的語言和函數式語言的關係 , 比如Joy(Factor), Linear Lisp等.相對於現有的計算機體系和Lambda 邏輯, 這涉及到組合邏輯和線性邏輯, 甚至於需要改變現有的計算機結構,比如Forth和Lisp的堆棧機.
- 就Forth而言,它還受到APL(比如從右向左)和Lisp的影響,APL是面向向量的編程語言,使用各種奇形怪狀符號(見第3點),J語言(作者之一Roger Hui是一位華人)也是APL系的, 其中有一種形象的表示函數的方式:
Here t0 is the result of applying @, with a left argument of sum ( +/), and a right argument of a fork, whose rightmost element is the hook +. i. .
見 http://www.jsoftware.com/papers/elegant2.htm
- 朱邦復的漢字基因理念, 首尾拆字, 按各個字的首尾的「體用」關係再組成字或詞. 見百科 http://baike.baidu.com/view/1202307.htm#9 以及http://www.cbflabs.com/gstbook/dmgstlst.php?msg_typ=7 (會意字初稿下載: http://cbflabs.com/down/show.php?id=498down=1)漢字構形理論以及漢字構形資料庫等等。
程序設計語言是一種高度符號化的語言,其是從符號發展而來。所以說程序設計語言基本不具備誦讀的能力,不能說成是表音文字設計。只不過恰好計算機是在美國發明所以看起來好像很多英文單詞而已。
成熟的程序設計語言一般都由簡潔的符號和字母構成,這是為了便於閱讀和撰寫。就拿C#語言來說,常用的關鍵字很多都不是完整的英文單詞,如int、struct、char這些都不是英文單詞,而是高度符號化的縮寫。即使是完整的英文單詞,如for、default之類,大都也不能理解為英文的願意。
或者說以任何一種語言為基礎來設計程序設計語言,至少在現階段,其編寫的一般程序都會與自然環境下這種語言的表述方式有極大的不同。就像會英文不等於會編程一樣,有理由相信即使計算機在中國被發明,程序設計語言也不可能被設計為會中文就會編程。
可以參考數學在中文的表述,例如平方根、指數、導數、積分、等於這些概念,如果只學習中文而不學習數學概念,是不可能理解「四的平方根等於二」這樣簡單的數學表達式的。
所以,竊以為,不會有任何不同。被邀請來回答這個問題,感覺非常複雜,因為我在07年寫過的一篇博客正好可以搬過來做個現成回答,不知道邀請人是不是看過才請我來說兩句,但幾年過去,這個問題還是如此科幻,無甚可以多說,還是直接把當年那篇搬過來算了,如下:
中文編程語言和它的一條明路
今天在豆瓣小組上又看見一個「中文編程語言」——o語言,為什麼要說「又」呢,因為我還看見過「易語言」(vb控制項漢化版),「中蟒」(python的漢化版),或許在中文互聯網的哪個旮旯里還藏著什麼別的雄心勃勃要做「中國人自己的編程語言」之類的開發者。
說起來,中國人的民族自尊心從1911年以來就沒有被徹底滿足過,雖然眼看著似乎就要」大國崛起「,可國民心理還是揣著對自身民族文化的不信任和危機感,寫幾行程序都覺得有被西化的危險,中文最好,中文節省字數,中文優美,中文歷史悠久,……中國人要用中文寫程序。嗯,但漢字在計算機上沒有象形文字的特殊待 遇,也就是兩個位元組共32個bit的0/1序列,用16bit的ASCii字母和用32bit的Unicode字元對編譯器而言並無區別。按著這條國產翻 譯字幕組的道路走下去是沒希望沒出路的。我且給中文編程語言指一條明路:
首先要認清,必須揚棄喬姆斯基那套形式語言的玩意,在這個框架下 怎麼搞,中文辭彙都是字元流里的token,沒有一點象形文字的特點。要搞就搞一套模仿象形文字的形式計算體系。計算符號要可以在二維空間中按特定規則組 合,而不是一維的符號流。另外有必要證明這個二維的形式符號系統和圖靈機等價,然後中文編程語言才有了自己的理論基礎。一個Lambda演算就可以發展出 一大堆Functional Language. 一個二維形式計算機不知道可以搞出多少」中國式編程語言「,到時候編程都是論幀,不是論行。這種語言的一段獨立功能的代碼由一些隨意歪斜的線條和符號構 成,其中依稀可辯一些來自中國字的偏旁部首,這就是一幀,是程序員在手寫設備上」畫「出來的。然後一幀幀能夠連動,就構成一個程序,優勢極大,這種語言基 於圖形間的拓撲關係,容錯性大,圖形直觀,易於debug,模塊關係一目了然,易於復用。嗯,這條路雖然艱險,卻是編程語言中文化的一條光明大道啊,嘿嘿,kuso完畢
補上當年博客原文的地址:(http://npchen.blogspot.com/2007/05/blog-post.html)
博客停止更新已久,只是作個證據。#!/usr/bin/perl
#用警兮用嚴
use strict;
use warnings;
#中文是天生的優秀注釋,對吧
#如果用中文做操作符,輸入複雜,方便注釋的優點也失去了,看吧
use utf8;
our ($零,$一,$二,$三,$四) = (0,1,2,3,4);
sub 加{
my $加數 = shift;
my $被加數 = shift;
return $加數 + $被加數; #掙扎吧,在加數和和的深淵裡
#↑看,我們把知乎的代碼解釋器弄瘋了↑
}
sub 求和{
my $總和=$零;
for my $當前(@_){
$總和=加($總和,$當前); #痛苦吧,在代碼與注釋的地獄中
}
$總和;
}
print 求和($零,$一,$二,$三,$四);
#而且輸入的時候相當痛苦……
從符號的角度看,漢字要比拉丁字母看起來舒服多了,因為變化多。同樣也是因為這個原因,漢字的輸入也是個問題(對不起,我沒練過五筆輸入法)。
無意義,計算機語言說白了,就那麼幾個關鍵字,加上自己定義的變數,其內在的數據結構、演算法都是數學的核,而那些關鍵字、變數名稱使用中文還是英文還是阿拉伯文其實並沒有多大關係。
中文好處是精鍊簡潔 壞處是歧義太多 用中文非常不利於計算機辨認
我以前也想過這個問題,後來發現這個問題的問法有誤導。計算機編程語言其實與英文、中文,或者法文、西班牙文等等無關。
一個角度看,編程語言歸根結底是機器語言,也就是0、1的2進位數。最早的計算機程序是用穿孔紙帶記錄的,談不上英文還是中文。後來進步一點,用彙編語言,說是用英文其實也只是借用的符號。比如JMP表示跳轉,LR表示讀入寄存器等。
換個角度想計算機編程語言的規則,它本質上是由計算機硬體結構決定的。目前主流計算機是馮諾依曼結構,它設計有程序存儲器、線形的代碼解釋器等,所以有我們用的這樣的機器語言、彙編語言、及各種高級語言(借用英文符號,也可以借用中文、法文、西班牙文符號)。如果借用漢字來比喻2維,強調馮諾依曼機構的1維線形程序,那麼也有人在研究向量計算機結構、量子計算機結構等等。有朝一日成功實施的話,也是和英文、中文沒有什麼關係的。現在的編程語言就是語素文字啊。
比如 printf ,你愛讀成什麼都沒關係,反正這個詞的詞義是格式化輸出的意思。
這不是語素文字是什麼?初期由於分詞演算法的問題,應該還是需要分隔符的,但可能是逗號 暫時只想到這一點..
推薦閱讀:
※c++中#include <>的後面加了分號,居然仍然能正常編譯運行,為什麼?
※Linux下學編程用哪個版本的Linux環境好?
※如何編程求解 100 以內的質數?
※為什麼很多C++書籍在講字元串的時候主要使用字元數組而不是string?