為什麼國內創造不出很棒的編程語言?

現在主流的編程語言大概都出自國外吧,日本都可以創造出Ruby這樣的流行語言,而作為有如此之多編程從業者的中國為何都是在使用別人創造的語言?難道國人創造不出流行的編程語言嗎?還是說國內的大牛都沒有這個興趣?(我說的是創造哈,像鳥哥這樣改造語言的大神不算哈。。 逃)


發明一個新語言的商業目的是什麼?通常都是一個新的領域,你哪怕給舊的語言寫library也解決不了問題。譬如說google發明go——微軟的.net肯定是不可能用的,那他沒有辦法給google喜歡的C++/Java開發(語法糖那樣的)庫來解決問題,只能去發明go。因為寫法很不一樣,模擬不出來。因為語法是很容易影響一個程序員的精神面貌的。

誰叫VC++的co_await還沒進標準是吧?要是那個時候C++有co_await,就沒有go什麼事了,好好寫一個調度程序,語法模擬成channel一樣就是一個下午的事情。語法是很重要的。

如果一門語言的語法不適合某個問題,那程序員基本不會去選擇好好的解決這個問題,而是挑選在這個語言下最舒服的方法來解決這個問題,哪怕這個方法其實並不好。人就是普遍有這樣的毛病,所以語法才很重要。因此在類似的情況下,只要滿足我方政治目的和意識形態的所有語言都不好用,那就去發明一個新的。

那為啥國內就沒有發明出好用的語言呢?因為我們都不去創造新領域,不會遇到這種問題的。不過至少我們已經慢慢創造出那麼一兩個流行的庫了,這是一個好的現象。


我不覺得語言有國籍,Ruby 不是日本的,只是作者是日本人而已。

如果 Ruby 沒有相關的社區,沒有 Ruby on Rails (本體),一個光禿禿的語言,除了編程語言愛好者誰會去用?如果考慮到社區,那麼編程語言更是百家飯混血兒。

開源是這個世界最有共產浪漫的事情了,不是有句話嗎,共產主義者沒有國籍,改一改,開源項目也不應該有國籍。


==== 翻車 =====

謝謝各位拍搬磚的童鞋。

囧了,之前看群里說RED,都以為只國人搞的,

我看了一眼GitHub,作者在廈門,

有點想當然了,或許不是個根正苗紅的中國人。

枉我傳教一波,

對被騙去點star的童鞋表示道歉。

囧,作為補償,

待我去重新找個根正苗紅有潛力的語言來傳教。

=============

桶子們吶,要加油了,

巴西佬都出倆語言了,

我大亞洲才出一個ruby怎麼行。


我國的教育環境和就業環境,都沒有刺激創造新的編程的動力,不過我也不覺得這是什麼壞事,與其用「如果-是」去代替「if-else」,還不如用現成的編程語言來做點實際有意義的事情。

即使將來國內創造出了有影響力的編程語言,我相信那也絕不會是用中文關鍵字。


能用庫解決的,就別瞎寫編譯器。新搞出來的語言,誰有精力給你配齊那一大堆質量合格的庫去。


大公司沒動力研發新的語言,個人沒能力寫出來非常強大的語言,但在細分領域還是有一些個人編程語言大放異彩,比如我們學校用的CovScript編程語言( http://covscript.org ),還有我們群裡面的GPU編程語言Dmsl,LISP方言Lice,類似於Kotlin的Krine。群里正在開發的語言有Cm(進度較快),CKX(進度一般),Dragon(接近棄坑)。


外行人對編程最大的幾個誤解:

  1. 寫著英文注釋的都是老外貢獻的代碼
  2. 設計一門新的編程語言很難
  3. 現有編程語言一經發明就是今天這樣完善的

實際上你隨便找個有計算機專業的大學都能找到幾個技術宅可以寫出吊打 Ruby 早期版本的語言,然而並沒有什麼卵用。

社區才是編程語言的真正父母,創始人不過是做了一個人工授精而已。沒有活躍的社區持續貢獻代碼進行完善以適應各式各樣的應用環境,再優秀的設計理念都會胎死腹中。

看看 Linux 內核補丁貢獻數量的排名,國人排名不低的,我記得在前五。

說明國內組建社區的條件是有的。

但是,誰牽頭這是一個問題。

國內現在沒有具備舉世公認的公信力的軟體基金會發起新語言,也沒有哪個像谷歌這樣擁有一群腦殘粉的企業發起新語言,說白了沒有一股力量能凝聚起國人都來參與一個新的編程語言的開發。

那肯定是搞不了的。


應該是沒有跟上時代潮流……

「很棒的語言」必定要解決一些特定的問題。

我覺得這個問題以後應該會由 @大笨蛋千里冰封 以及她裙里的大佬們來解決 (o^?^o)


怎麼會?

我都能造出很棒的malt(霧)

國內主要是兩點

1. 沒錢拿,不重視

2. 開源環境惡劣

各大開源協議形同虛設

歡聲笑語打出GG


不需要創造。因為漢字就已經有最棒的編程語言了,只是解釋器還沒人寫出來

之前那篇寫的有點太匆忙了 為什麼你應該用中文寫程序 那裡面舉的例子不好,這裡重新舉過

左目(array(T), T) --&> [首, 項].
左目(array(T), T) --&> [末, 項].

左目(X, Z) --&>
右目(雙目(X1, Y1, Z1), 左目(X, Z)),
雙目(X1, Y1, Z1).

左目(X, Z) --&>
右目(左目(X1,Z1), 左目(X, Z)),
左目(X1, Z1).

左目(X, Z) --&>
左目(X, X1),
雙目(X1, Y1, Z),
左目(X, Y1).

右目(雙目(T,T,T), 左目(array(T),T)) --&> [相].
右目(雙目(T,T,T), 左目(T,T)) --&> [自].

右目(左目(X,Z), 左目(array(X), array(Z))) --&> [各].

雙目(int, int, int) --&> [加].
雙目(int, int, int) --&> [乘].

析(S, R) :-
string_chars(S, L),
apply(R, [L, []]).

看結果

?- 析("相加", 左目(X,Z)).
X = array(int),
Z = int .

?- 析("首項加末項", 左目(X,Z)).
X = array(int),
Z = int .

?- 析("各自乘", 左目(X,Z)).
X = Z, Z = array(int) .

這樣的語言的parser需要tokenizer, grammer analyzer, type inference三重融合才行

下面是群嘲時間,連unification都不會,沒資格談語言。


有個邏輯關係倒置的原因,不是xx出不了很棒的yy,而是在很多對xx有意見的人眼裡,只要是xx出的yy,都不是很棒的,現實是,一個語言棒不棒很大程度不是由於它本身,而是所在的環境,就說現在流行的這些語言,槽點也是很多的,而作者不同很大程度會影響其評價,記得以前有人提意見說go語言沒有泛型,gg的大佬反駁一句為啥要泛型,馬上就有腦殘粉跟進說泛型不重要什麼的,而後面go自己說計劃弄泛型,馬上又有腦殘粉說人家這是進步

而另一個現實是,一個語言棒不棒並沒有統一的評判標準,很大程度是主觀,客觀的話就看廣泛程度?那如同很多答主提到的,時間積累不夠也是沒辦法的事情


編程語言是一種工具,沒有特別的必要的話,重複製造同類的工具並不比使用工具製造產品更有意義。


謝邀。

我也很好奇,按理說要搞個語言也是有可能的。但不管怎樣,易語言也應該算?

大概是維護一門編程語言是一個比較長期及需要較大投入的事情,是一件頗具挑戰的任務吧。除了創造,推廣也是一個硬骨頭。技術能力、環境氛圍、時間分配、效益平衡、組織能力、表達能力、知識水平等等都可能是參考因素。想想艱巨程度是蠻大的~

還有,已經有這麼多語言了,國內編程界天天吵吵嚷嚷「哪個語言好」已經夠煩了,甚至同一語言的不同框架間都能吵得不可開交,估計就沒必要再多一個輪子了吧?此外,兩片嘴皮子吧啦吧啦開火車、放衛星,今天這樣、明天那樣,眼高手低,啥事也堅持不住——這樣的人也是有的……

像大師級人物打造的Go語言都有那麼多的槽點,何況是你寫的語言,還沒走出去,估計就被噴倒在門口了……


首先看看現狀:中國人在IT技術上是跟隨者而非領導者,當然我們可以說是後發優勢。後發優勢的意思是:我雖然落後,但是我可以通過模仿借鑒快速的提升。甚至在某些基礎設施的建設上,可以優先使用先進理論,沒有歷史包袱。

插一句,這個後發優勢在語言的生態建設中非常明顯,越是後發明的語言,他的生態建設阻力就約小,比如Perl的CPAN當時是最強的生態,別的語言還停留在拷貝代碼的階段。後來Ruby也效仿了Perl,最後成為新語言的標配。JavaScript語言在設計當初有很多的坑,後來為了填坑,但又為了發展,出了很多以其他語言來看很詭異的設計。比如「 function* 」,比如遲遲沒有落地的模塊和import

看看現在中國的手機支付我們已經走在了世界,那按照道理,我們應該在語言設計上後發優勢呀?

後來者是落後的,資源,注意力有限,首先應該的是去把表面的短板,或者是核心的痛點給解決,只能集中力量先解決這些問題。比如糧食短缺,那麼我們就應該先利用現有的技術,把糧食產量搞上去,質量的問題可以緩緩,因為讓老百姓填飽肚子是第一步。沒有汽車,我們先仿製,安全問題基本過關就行,因為生產大量依賴運輸。

所以,在社會發展程度上,我們仍然有很多地方需要追趕發達國家。所以我們在基礎學科的建設上,基本上都是為了國家目標而存在的,就是我們存在什麼短板,核心難題,就要多花資源和力氣去研究。越是基礎的東西,研究周期和投入就越大。

這就好比有錢人家庭可以選擇的東西很多,大可以花時間精力投入到藝術等對普通人價值不大的領域,而窮人則必須選擇適用性廣泛的領域,比如搬磚,程序員,首先保證自己的生存,買套房子什麼的,進行財富的積累。

拿這兩個類比計算機行業的話,大家可以看到,底層工具的發展,通常由兩種組織完成,一種是學術領域的組織,另一種則是大公司,尤其是上市公司的研究機構去推動。在發達國家,學術機構本來就站在學術領域的前沿,加上良好的社會保障和福利,讓精英們有很多精力和機會去嘗試突破。

而發達國家的公司規模也是巨大的,往往在商業上已經在世界佔據領先位置,規模是非常巨大的,此時,對於基礎理論的一點點突破,都可以形成巨大的效應,比如一個演算法的改進,可以節省或者多賺幾個億。或者基礎工具的改進可以幫助他們極大提升自己的商業地位(比如瀏覽器),那麼大公司就有非常大的動力去做基礎設施的改進。語言工具是一種非常容易影響到上層應用的東西,如果抓住了標準,則就有非常大的話語權,所以Google搞V8,搞Go,其實都有著非常明確的商業目的。

反觀國內的大公司,雖然有那麼幾個已經名列前茅,但論業務規模跟Google Facebook等,還是有些差距的。而且他們服務於國內的用戶,更多的是在業務領域的創新,這方面的事情還遠遠沒有結束。

綜上所述,從國內的大環境、學術機構和公司的性質、目前的條件等各方面來講,語言工具都不會是一個非常需要大力投入的領域。但是我們可以看到,也不是完全沒有這方面的成績。像鳥哥惠新宸參與開發了PHP7,易語言,按鍵精靈這些也同樣是探索。

然而在我們的國家變成發達國家的那一天,語言工具會不會變成一個類似於圓珠筆的珠子那樣的工具?相關技術已經非常穩定成熟,市場也非常固定,我們並不是沒有這種技術,只是在全球化的時代,像圓珠筆芯都完全可以通過進口解決,自由開放的語言工具,為什麼就非得自搞一套呢?

P.S. 過幾十年的編程語言,是不是還是現在的方式呢?


編程語言棒不棒,一是要看作者努力,找到一個好的切入點,

二是得有一個熱點領域或產品引爆這門語言的流行,所以也要考慮歷史的進程.

有時往往跟作者預估還不一樣,就是突然火了這個感覺

如lua.出發點做很小的嵌入式產品腳本,但是很方便集成C/C++之中,居然在遊戲中作腳本流行起來.後來作為iOS平台唯一可熱更新的腳本語言,這就被欽點了.

第三,經過幾十年發展,一般領域的語言解決方案很成熟了, 很少有一種是硬上作為全領域開發語言的出現,這樣代價巨大,(C#有這MS這種大金主除外), 新的語言往往是在特定的領域解決一些具體問題,因此需要他是行業專家+計算機專家. 這樣的人本來就很少.

比如Python 出發點,為了經常使用給matlab進行科學運算的,提供一個開源的免費方案,因此他的語法跟matlab很象, 強大運算符和近似於偽代碼的編寫,方便非IT的科學工作者進行運算. 因此積累大量演算法和數值運算庫,

這樣在金融和人工智慧,這一些積累的庫就爆發了,然後python變得很流行了.

第四,成功開源語言,往往需要作者有超然的地位,是一個不歸屬作何一個大公司,而生活有來源的IT專家來開發,這樣才不會被其它大公司所抵制, 而且中國這樣人才一般是被某個大公司收羅了.


知識產權保護不利是一個因素,搞基礎研究投入大,周期長,產出少也是因素。


新語言打算解決什麼問題呢?

新語言打算解決多少人的問題呢?


易語言,還有按鍵精靈腳本,其實也是很不錯的。要命的就是它們都需要會中文才能寫得好,這難住了絕大多數老外。

不知道老外用什麼東西做外掛?


國內的人,首先要解決的是生存問題,往往生存問題都很擔憂。


其實國外也沒什麼新的顛覆性語言,因為傳統語言解決了99%的計算機問題.

除非計算機有全新的框架出現,大家回到同一個起跑線才需要新的計算機語言.


推薦閱讀:

一般編程語言都是英文的,大家對中文編程有什麼樣的看法,中文編程有哪些優劣勢?
為什麼目前流行的編程語言都是很早以前就發明的?
如果計算機是由中國人發明的,那麼編程時寫代碼會是全中文嗎?
有哪些講編程範式的好書或好文?
Lua 的 table 索引默認從 1 開始,這樣做有什麼好處?

TAG:互聯網 | 編程語言 | 編程 | 計算機 | 計算機網路 |