從編譯原理上講,未來可能會出現既友好又高性能的高級語言嗎?
就是說,會不會有高手從編譯原理的角度,對高級語言的底層實現逐步性能優化,讓java或者python能夠在不改變對用戶的優良特性情況下,也能夠有更好的運行效率?
另外,從理論上能夠像分析演算法時間複雜度那樣,證明某種語言的實現機制的運行性能上限是多少嗎?PS:高級語言的運行庫有可能通過專用晶元來硬體實現從而提升高級語言運行效率嗎?
謝邀,但我不是專業人員。
不過Java的執行效率似乎沒有很差吧。當然啦,你要說Java不友好我也沒話說,確實本身有一些缺陷。但是能被黑成「民工語言」,至少說明它在執行效率和開發效率上的trade-off上,碾壓了大票語言。另外一點,很多程序員總是太高估語言之間執行效率的差距,而低估自己編碼水平和編譯器優化之間的差距。為什麼會有用react比原生Web API快,用elm比原生API快這種說法?不是他們真比原生快,它們本身也只是原生API的封裝。是大部分人沒這個能力或者精力去做把原生API調用管理到那個程度。
看你要求到什麼程度如果你要讓python做到C差不多的效率,基本是不可能的,這是動態語言特性決定語言領域很多特性和性能是有矛盾的,就像《垃圾收集》這本書里強調的,「世界上沒有銀彈」一般的看法是,在保證足夠易用性的前提下盡量優化性能,或保證足夠性能的情況下盡量把程序員解放出來個人覺得,在一個語言本身和它的native擴展(如java的jni)之間做工作,讓他倆結合起來更方便,降低這方面的門檻,就已經很不錯了,因為我們可以逐個模塊改為native實現,達到一個整體的最高效率,至於說能不能有優化器自動做到很強性能,可能特定場景有,但應該不是一般性的
Rust啊。Rust獨闢蹊徑的「所有權」概念,解決了沒有GC下的內存回收/管理難題,加強了編譯期防護。
Julia!類Python的語法,接近C的速度
rust
Scala既友好,又能利用JVM的高性能
目前來說是lua,lua可以調用c庫,用lua寫代碼,把不夠快的部分改成c。另外,c/c++可以內嵌lua,luajit才200多k,2.0.0才50k,2.1.0-beta3不到300k。nodemcu物聯網平台用lua作為開發語言,小到可以放到低成本(十幾元)物聯網平台裡面。openresty把lua放到了nginx,在nginx空間里執行腳本,性能是php-fpm的幾十倍。還有很多遊戲引擎嵌入了lua,幾乎是標配。而且luajit可以多開,即在你的程序裡面可以想開幾個就開幾個,你每個線程開一個,開他1000線程,也是可以的。而python,java虛擬機只能開一個。luajit跟c交互的時候,每個函數都帶一個虛擬機指針,因此很容易多申請一個虛擬機。lua的缺陷是社區沒有python強大,luarock裡面的庫跟pip的沒法比。
我們雖然不能提高語言的執行速度,但是可以強行減少執行所用時間啊。
所以我選 halang(
連花括弧要不要換行都能分兩派打起來,這還是用的同一種語言啊,所以你怎麼判斷一門語言的友好性是不是對方眼裡的傻x設計。
如果不用到處都是指針的數據結構的話,Rust挺符合要求。不過「友好」是相對的。
已經出來了Lisp
1 有無數的編譯器開發人員一直在優化編譯器,像Python Java一直在沒改變上層語言特性的情況下一直在優化
2有3 軟體基於硬體 你難道見過基於Windows優化的CPU,基於3dmax優化的顯卡?一個基於Java優化的硬體:GCC說 我壓力賊大===============≠===============回答你的題目:肯定會出現,但是能不能火不知道。Java js這麼多坑不也是照樣火么Lisp
高性能已經不是追求方向,易用性和拓展性才是!
JavaScript就是個很好的例子
和編譯原理無關,其實這是個邏輯問題,並不是技術問題。
對任意一個任務,無論是交給機器還是交給人執行。
如果描述得越詳細,執行者也就能夠排除越多的可能性,做更多的優化。
譬如對 小明 說:「晚上我要盒杠苯。」, 對小紅 說:「今晚8點,去買盒杠苯送給我,我在天上人間666號房間。」
我理解你說的「友好」、「高級」,是指抽象程度更高,更接近人類日常的交流方式。
毫無疑問,第一種表達對發出命令的人更「友好」。但是在 小明 和 小紅看來,第二種表達方式更「友好」
再多說一下AI對人類語言理解的問題。
人類的交流方式實際上包含了大量的隱含信息和模糊、不確定的表達,以至於人類之間產生錯誤理解也是司空見慣的事情。
拿上面的例子來說,在一個AI的資料庫中,可能有1000種東西的名字叫 杠苯,這個時候AI就要猜了:晚上要,盒裝,在天上人間,嗯....應該是那個杠苯。這看起來很符合邏輯,但是誰又能確定AI猜的杠苯究竟是不是你要的杠苯? 人類自己都往往不能準確理解人類的語言。
隨著你越來越多的信息被機器記錄、分析,可以肯定,將來機器一定會比你身邊的任何一個人類能更準確地「理解」你那些模糊的「友好的」表達。
解釋器的存在,使得不可能有新的解釋性語言達到像C語言一樣的效率,C語言的執行是翻譯成二進位代碼的程序指令直接執行,解釋性語言呢?因為解釋器也需要運行,原程序代碼在cache中的命中率會降低,加上解釋翻譯等行為的時間,速度怎麼都不會超過像C這樣的編譯型語言。
Golang比Python強大的庫. 直接調用Github比C快的編譯速度.比dotNet好的GC.不會一回收啥都沒了還有一個Google親爹和社區
推薦閱讀:
※不學習編譯原理對於CS專業的學生有多大的損失?
※C++ 中的左值、右值、左值引用、右值引用、引用分別是什麼,有哪些關係?
※對於LLVM之類的編譯器是如何實現在構造SSA形式的IR的時候,計算出def-use鏈?