用哪些編程語言寫出的代碼,讀著能感受到美?

看到一份雷人編程語言大全(http://coolshell.cn/articles/4458.html),如果有網上現成的文章那麼最好了。那麼,有哪些漂亮的編程語言呢?特別是冷僻的那些語言當中。答案可否加上典型例子?

補:希望了解各位的觀點。關於美的定義,個人認為是,可讀性上友好,擁有某強大特性。


編程語言的漂亮或者「美」是千差萬別的。每個人的審美標準不一樣,環肥燕瘦很難評斷。試舉幾個大部分人都會喜歡的特性,有一個或幾個這些特性的語言會很漂亮,但有時候「特性太多」本身就是一種醜陋。

  • Reflection 、Meta-programming[1] :不細分數據和指令,程序可以在運行時自我察覺、並且自我修改。個人認為這是最重要的美學特徵。幾乎所有基於虛擬機實現的語言都有這個特徵(但不是說必須由虛擬機實現),只是語法的優雅與否區別。Reflection 的寫法參見 [2], Io 的寫法比 Lua 漂亮,Lua 的寫法又比 Perl、PHP、Obj-C 之類漂亮。但是對於許多語言來說,寫法也是可以改變的,這就是它的美。
  • 高階函數、匿名函數、閉包[3]:函數可以作為值使用,也就是說函數可以接收函數作為參數,也可以返回函數作為返回值。可以在需要函數的時候當場寫一個出來,不用起名字。可以在函數里定義函數。函數可以在脫離它被創建的環境之後繼續使用它需要的值。這些特性都使得程序的抽象層次變得更高。Python,Ruby,Perl,Lua,Haskell,Scheme,都可以,只是寫法有區別。加上 map / filter / reduce 這樣的函數加持,許多循環的寫法都可以省去了。
  • 一切都是對象:典型的比如 Ruby,3.times { puts "yo!" }。不過有時候這個特性會被濫用,這大概是最便於濫用的特性,因為寫起來很爽。
  • 實用的容器類型:Set、Array、Dictionary 這樣的類型都應該內建。或者 Lua 的萬用 table 類型這樣的機制。當然還有 String。
  • 簡約實用的語法糖:比如在可以省去括弧的時候省去括弧。這不是所有人都覺得美,當然。
  • 簡潔和易讀:大部分人愛上 Python 都是因為它強制縮進帶來的易讀性。Coffee script 比純 Javascript 更受歡迎也是因為它的簡潔。
  • 內在的一致性。有時候遇到一種語言的新特性你會心想說「這寫法太怪了」。這說明它的語法風格沒有盡量保持一致。
  • 支持 List Comprehension。
  • 被集成到系統之中不會造成太多污染 [4]。

[1] http://en.wikipedia.org/wiki/Metaprogramming

[2] http://en.wikipedia.org/wiki/Reflection_(computer_science)

[3] http://en.wikipedia.org/wiki/First-class_function

[4] http://techsingular.net/?p=1598


最近在學 Common Lisp,感覺它很漂亮。


小眾但是強大的語言: Factor http://factorcode.org/

受Joy, Forth, Lisp, Self這些(小眾)語言的影響,尤其是Joy和Self,如果不在後面加上language, google都搜索不到,Factor也是這樣

強大:

1. 如果說Smalltalk是細胞,那這門語言說的是就是DNA, Dominikus Herzberg, Tim Reichert的論文 Concatenative Programming: An Overlooked Paradigm in Functional Programming -中提到

Pattern Recognition Agents

The input to Concat can be viewed as a static butpossibly very long sequence of words and quotations. Substitution rules and function definitions could beviewed as agents working on the input. Each agenthas some sensors that allow the agent to recognizea set of specific subsequences of words/quotationssomewhere in a program. If a pattern is recognized,the agent takes the input sensed, transforms it into anew sequence of words and quotations and replacesthe input by the transformation.Essentially, there is a pool of agents ready to pro-cess any subsequence they find a match for. Thismodel has some similarities with biochemical pro-cesses

2. DSL遠超眾多語言

3. 庫多, Game Web GUI ,一圖以概之


scheme.

simple is beatiful.


贊同@濤吳

這裡提問者作為外行搜羅的關於語言的對比:

不同語言怎樣計算 PI http://rosettacode.org/wiki/Pi


不同語言完成相同任務(目錄) http://rosettacode.org/wiki/Category:Programming_Tasks


若干種語言教程 repl.it


更多未整理

http://hi.baidu.com/jiyinyiyong/blog/item/09ecff1fed3f41c8ac6e75bb.html

https://plus.google.com/100168721734212748375/posts/1mkrhwavSqd

因為厭煩花括弧的緣故, 個人偏愛:

CoffeeScript 舒服就是了 http://jaigouk.com/docs/004_step.html

MoonScript 比前者更漂亮 http://moonscript.org/

Stylus 對比 CSS http://learnboost.github.com/stylus/docs/css-style.html

Clojure 看這串代碼的時候 http://sqlkorma.com/docs

Jade 簡練 https://github.com/visionmedia/jade#readme

Genie 語法比 Python 輕, 運行又更快 https://live.gnome.org/Genie

Haskell 優雅, 可特性太複雜 http://learnyouahaskell.com/higher-order-functions#function-application

Io 教程很漂亮 http://www.iolanguage.com/scm/io/docs/IoGuide.html


C++,一門語言包羅了如此多的范型、特性,卻毫無違和感


我認為的漂亮並非是語法好看,而是其概念和邏輯的優雅

所以我首先推薦Smalltalk,

被公認為歷史上第二個面向對象的程序設計語言,和第一個真正的集成開發環境(IDE)

其語法概念非常精鍊,只有Object和Object之間的message(也就是方法),他幾乎沒有關鍵詞,如果說有,大約是3個,nil self之類的

Ruby也借鑒了很多Smalltalk的概念,但並不能做到如此高度的統一

Smalltalk對其它眾多的程序設計語言的產生起到了極大的推動作用,主要有:Objective-C,Actor,Java和Ruby等。90年代的許多軟體開發思想得利於Smalltalk,例如設計模式、敏捷編程和重構等。

其次是Smalltalk的工具非常完善,他的虛擬機就是他的機器,他的庫就是這個虛擬機上的操作系統,操作系統就是開發人員的IDE,而開發人員則是在虛擬機里進行對各個對象的修改。

大家可以下載Squeak玩一玩 http://squeak.org 尤其可以體驗一下裡面的E-Toy


舉個例子

把諸如 1, 2, 3, 4, 5, 6, 7, 8, 9 這樣的數列中3的倍數取出來,生成另一個數列。如果用 Python,可以這麼寫:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [i for i in a if i % 3 == 0]

這是 Python 最初讓我感到驚艷的地方


首先我覺得這個問題是一個有點糟糕的問題,不同人的審美標準不同,像我有個朋友就是認為那些寫得滿篇指針在我看來完全沒有可讀性的代碼是世界上最優美的。因為代碼的可讀性好不一定就能說他漂亮,像並不是所有認為漂亮的設計都是極簡主意的設計。

而且這個東西比較因人而異,很多人認為Haskell很美,但是我也可以寫得完全沒有可讀性:

stationDepartures id sc=map ((s1,list)-&>(stationName $ (stationMap $ system sc) Map.! s1,list)) ( Map.toList (Map.fromListWith (++) (map (((s1,s2),(d,start,dur))-&>(s2,[start])) (Map.toList (Map.filterWithKey ((s1,s2) _ -&>s1==id) (Map.unions (List.map times (Map.elems $ schedule sc))))))))

然後如果以程序員寫代碼的心態來衡量一個代碼是不是漂亮的話,應該包括三部分。

  1. 接近自然語言,最好是面對對象的。

  2. API設計的優雅,命名規範合理。保證你在寫程序的過程中完全可以猜出來API的命名。

  3. 每行代碼都要有效率。

如果非要說一種語言是不是優美的話,可以看社區。有些社區在致力於把他們所支持的語言改進的漂亮,例如Python,有些語言乾脆出生起就背負了漂亮語言的稱號,例如Ruby。


編程語言的漂亮或者「美」是千差萬別的。每個人的審美標準不一樣,環肥燕瘦很難評斷。試舉幾個大部分人都會喜歡的特性,有一個或幾個這些特性的語言會很漂亮,但有時候「特性太多」本身就是一種醜陋。Reflection、Meta-programm...


我挺Python,巨劍無鋒,大巧不工。


在任何時候不阻止人用最漂亮的方法表達邏輯的語言就是最漂亮的。當然這是一個不可能達到的目標,只是我們可以無限的靠近他。於是在這裡我舉出我心目中的三個最漂亮的語言:

C++

Haskell

Ruby


perl 靈活,簡潔,符合人類語言表達的習慣,秉承「有多種方式可以解決一個問題」 而非推薦「最佳的解決方案」,強調靈活性,條條大路通羅馬,使「不可能解決的事情變的可能」,使」難解決的事情變的容易解決」。可以試試,相信對你的思維靈活性還是又幫助的。


FORTRAN

簡就是美


嘿嘿,我斗膽寫個C++,坐等被噴。C++的特性太多,想要融會貫通,只能步步為營一個特性一個特性地學習研究推演。從特性池中找到自己的風格。


最漂亮的是自己最熟悉的語言。


分頁阅读: 1 2