2010-08-04 120 views
2

我最近一直在玩Clojure,它讓我思考......語言必須具備哪些功能?

在編程語言之前,您會考慮使用它嗎?一個語言會讓你注意並觀察它,這是什麼?

立即想到的事情是可用的工具。我發現有一個非常好的調試器,分析器和可能的REPL都使得使用更愉快的語言。

+1

一點思考後,我決定投票關閉這個問題。這只是太模糊了,這裏的答案並不是真的對任何人都有用。 (我知道,我也發佈了一個通用答案)。但是,如果縮小一點,我認爲這會是一個很好的問題。 – 2010-08-05 04:15:30

回答

5

它覺得我還有前閱讀本地方,但我同意100%

  1. 做出愚蠢的東西容易
  2. 使硬的東西可能
+0

你是否想過「簡單的事情應該很容易,而且應該是可行的。」拉里沃爾?我也同意,但無可否認,這是一個荒謬的通用要求。 – delnan 2010-08-04 22:59:15

+0

這就是它。通用是的,但老實說,OP的例子是「好的調試器,分析器和可能的REPL」。和大多數的答案在這裏:) – 2010-08-04 23:11:44

3

你在看什麼對於編程語言之前,你會考慮使用它的選擇?

圖靈完全是我需要的(儘管不是充分);)

是什麼樣的語言,這將使你採取通知,並考慮呢?

那麼,簡潔和可讀性可能是我的兩個主要因素。我也喜歡豐富的類型系統。

+0

哇,歧視。 ;) – 2010-08-04 21:39:11

2

我想要的是一種不礙事的編程語言。它應該讓我考慮手頭的問題,而不是如何用語言編寫它。

+0

所以你喜歡高級語言。 :D不幸的是,他們在設計上傾向於緩慢而不那麼強大。 – 2010-08-04 22:48:55

+0

@Razor Storm:我不認爲這是「按設計」。我認爲沒有足夠的時間和精力讓他們變得更快更強大,就這些。當然,JavaScript代碼無法與手寫和完全優化程序集的速度相匹配,但最終我們會達到無關緊要的程度,因爲這裏會有用於JavaScript/Python/<插入語言的虛擬機>這對於99%的任務來說足夠快。 – 2010-08-05 04:06:56

+0

@Razor Storm:另外,還有很多高級語言(主要是功能類語言),它們在設計上其實很快。例如,Haskell甚至可以在某些情況下與C++競爭,特別是涉及到並行時。 – 2010-08-05 04:10:45

2

我不是一個「語言怪胎」,所以當我去尋找一種新語言時,通常是因爲我已經知道的任何語言在某種程度上都不是我需要解決的問題的最佳選擇 - 因此,我用新語言尋找的主要內容是直接解決當前問題的功能。

除此之外,好的工具支持幾乎是一個普遍的要求。

3
  1. 高階函數
  2. 類型推斷(首選)或動態類型
  3. 模式匹配是好的,但不是絕對的要求
  4. 同樣爲良好的元編程工具
+1

一隻小鳥告訴我,有人喜歡OCaml或F#.. :) – Jack 2010-08-04 23:27:59

1

在你考慮使用它之前,你從編程語言中尋找什麼?

該語言應該對處理我遇到的任務/問題有用。別的都無所謂。

想一想 - 如果由於某種原因無法使用語言來解決問題,那麼可讀性,完整性,庫,IDE,類型系統和語言功能的可用性有什麼意義?

+0

問題是,這些事情意味着你可能會使用該語言來解決你的問題 - 而缺乏這些功能使它可能你將無法解決你的問題,或者至少會更困難。 – 2010-08-05 00:02:54

+0

@Chris Dodd:我不這麼認爲。我還沒有完成至少兩種語言的學習(兩種功能都很棒),因爲它們對於我遇到的任務沒有用處。另外,不管你最喜歡的語言有多棒,如果它沒有被廣泛使用,你會遇到麻煩 - 缺少庫,並且獲得與該語言相關的編程工作將很困難。有很多人很少使用語言。並沒有那麼好,但廣泛採用的語言。因此,「沒有別的事情」。 – SigTerm 2010-08-05 01:05:23

0

這取決於什麼語言將被用於。 此外,「功能」可以在問題中更好地定義。

功能的範圍可以從「面向對象」,以「動態」,以「JIT編譯」,以「強類型」等

0

讓語言有一個體面的外交功能接口,使得它可以使用在其世界之外定義的庫。 (我說「語言」是因爲我希望有一種方法可以做到這一點,而不是幾次,每次執行一次。)因此,可以輕鬆地將語言與現有代碼(操作系統,GUI,高級數學庫,等等),並開始工作,做有用的事情。沒有,語言只能是玩具;我不使用BrainF ** k來做任何相關的事情,這並不是因爲它不是圖靈完備的,而是因爲它不能用圖靈完備性來做任何事情。

命名子程序(函數,過程,等等)是一種-的必要了。

0

首先,語言應該給我建,我可以在合理的時間(其中的「合理」的確切值取決於它是多麼強大和通用),這讓我有效地解決問題,繞到我的頭(在大腦週期和打字工作方面,而不是CPU週期),一旦我可以處理它們。換句話說,給我越來越高的抽象,直到他們讓我的頭部爆炸,然後停止。

當然,我更喜歡的概念,我已經熟悉了很好的實現。例如,Python對迭代器有很大的支持,並且通過添加生成器和生成器表達式來擴展概念(list/dict/set comprehension只是生成器的語法糖)。沒有這種強大的迭代器(或根本沒有!)的語言更好地爲我提供了一種同樣或更強大的方式來使用數據結構(例如,遞歸+模式匹配可以消耗鏈表,並且在走樹時非常方便),或者顯示我一種具有不同要求的編程方法/領域(爲此語言反過來又是一個很好的解決方案)。我需要有效編程的東西包括一流的函數和某種多態性(最好是參數多態性,但我可以與OOP +標稱值相稱)。亞型多態如果我必須),理想情況下包括泛型(再次,我是一個參數多態的巨大愛好者)。