為什麼幾乎每個編程語言都有減法,減不就等於+(-n),減法不是一種冗餘的操作么?

問這個問題是因為我在設計一個以最小精簡無冗餘為原則的計算機語言


很顯然,a-b比a+(-b)的可讀性更強,需要敲的字元也少。

語法上冗不冗餘,對編程語言來說其實並不一定是要放在首位的,只要這種冗餘還能帶來別的好處(如可讀性、易用性),又不會帶來不能容忍的壞處。

很常見的例子是在很多語言中都存在著一些語法糖(Syntactic sugar,http://en.wikipedia.org/wiki/Syntactic_sugar)。語法糖本身並沒有讓語言能夠實現更多的功能,而只是讓語言變得「更好用」了而已。

一門高級編程語言被發明出來一般是想讓程序員的生活變得更美好的。竊以為,一切沒有讓程序員的生活變得更美好的編程語言都是不好的編程語言。當然眾口難調啦,一門讓程序員A痛不欲生的語言也許會讓程序員B覺得這個語言還挺coolnice的。


減法當然是一種冗餘

但是說到設計語言,如果精簡到極致就不怎麼是」語言「了,而變成了一種計算模型


你是在寫圖靈機的模擬器么 或許你可以參考下Brainfuck這個語言


對。不但如此,幾乎每個編程語言最後都會編譯成二進位的機器碼,所以其實所有的編程語言都是冗餘的,都是忽悠人騙錢用的。


如果執著於冗餘來說,基本上高於機器語言的任何語言本省就是一種冗餘

編程語言是方便人於機器交流的一種工具,而不是機器自己的語言


在設計精簡的編程語言時,還要考慮語言的易用性。

幾乎所有的語言設計者都在為使自己語言的核心變的小巧而努力,但在核心之外,又需要提供強大的API,可能臃腫但卻提高了易用性。設計編程語言好比設計一個倒立的金字塔,最底層的核心必須要有良好的立足點,才能支撐其不斷向上擴充。為了得到這個良好的立足點,則需要仔細地權衡這個語言需要什麼,不需要什麼。


冗餘是為了便於用戶的理解和使用,這也是開發高級語言的原因。


那還要什麼for、while、break、continue,直接goto不就好了。


反問一個問題,為什麼程序語言需要乘法,你自己一次一次往上「加」不就夠了么


嗯,乘除也是冗餘的,一個只需要循環加,一個只需要累加到溢出,循環也是冗餘的,goto就夠了,else也是冗餘的,,,,,,,


推薦閱讀:

編譯器優化做指令調度時是怎麼考慮不同的微架構下對同一個指令的執行周期數是不同的?
為什麼北航軟院(5大雙一流軟工之一)每年招幾千個非全日制(雙證)?
如何看待「大部分程序員只會寫三年代碼」的說法?
利用hexo搭建自己的博客,為什麼沒有識別出markdown語法?
為什麼Windows可以運行在不同的硬體環境下?

TAG:設計 | 編程語言 | 計算機科學 | 計算機語言 | 計算機組成原理 |