Arc是一種程式語言,LISP方言英語dialect (computing)之一,由保羅·格雷厄姆羅伯特·泰潘·莫里斯設計,2008年釋出第一個正式版本。

Arc
編程範型多范型函數式編程過程式編程反射
設計者保羅·格雷厄姆羅伯特·泰潘·莫里斯
面市時間2008年1月29日,​16年前​(2008-01-29
型態系統動態強型別
操作系統跨平台,在Racket編譯器上運行
許可證Perl基金會的Artistic License 2.0
文件擴展名.arc
網站http://arclanguage.org/
啟發語言
LISP
影響語言
Anarki、HL

歷史

2001年,保羅·格雷厄姆宣布正在製作一個名為「Arc」的新的Lisp方言英語dialect (computing)。多年以來,他已撰寫數篇文章描述該語言的特點與目標,並且Y Combinator的一些內部項目已經用Arc編寫,最受關注的是Hacker News網絡論壇和新聞聚合程序。Arc本身以Racket編寫。[2]

在論文「Being Popular」[3]中,格雷厄姆描述了他對該語言的一些目標。雖然許多目標非常普遍(「Arc應該是可hack」、「它應該是良好的函式庫」),但也確實提供了一些細節。例如,他認為一門語言的簡練很重要:

It would not be far from the truth to say that a hacker about to write a program decides what language to use, at least subconsciously, based on the total number of characters he'll have to type. If this isn't precisely how hackers think, a language designer would do well to act as if it were.

他還表示,一種語言只能實現少量的「公理」,即使這意味着語言可能沒有大型組織想要的功能,比如面向對象程序設計(OO)。事實上,格雷厄姆認為OO是沒有用的,因為它的方法和模式只是「好的設計」,並且他看到用於實現OO的語言特性部分存在謬誤。[4][5]Arc於2008年推出,Graham表示其優勢之一是其簡潔性。[6]

Lisp程序員之間的一個爭議是,該種語言的S-表達式是否及應在多大程度上應該用其他形式的語法來補充。格雷厄姆認為當純粹的S表達式過於冗長的情況下,應該使用額外的語法,他說:「我不認為我們應該在宗教上反對引入語法到Lisp。」格雷厄姆也認為,應該給程序員一個好的性能分析器解決方案來解決效率問題。[7]

反響

在2008年發布後,Arc產生了多種反應,有人稱它只是Lisp或Scheme的一個擴展,而不是一個獨立的編程語言。其他人則稱讚Arc拆去了Lisp非必要的東西。Arc發布不久後,它被移植到JavaScript,以及被一個基於EclipseIDE「Schemescript」支持。[8]

範例

Arc的Hello world程式碼:

 (prn "Hello, World")

保羅·格雷厄姆(Paul Graham)使用了一個程序來說明Arc的簡潔性。[9]它產生一個表單,包含一個字段,url"/said"。提交表單後會被帶到一個帶有「click here」鏈接的頁面,該頁面本身則會帶回包含原來輸入字段值的頁面。

(defop said req
  (aform [onlink "click here" (pr "you said: " (arg _ "foo"))]
    (input "foo") 
    (submit)))

版本

官方版本

Arc的第一個公開發布版本出現於2008年1月29日,[10]Racket(那時為「PLT-Scheme」)實現。該版本以.tar壓縮包形式發布,包含Arc的Racket源代碼。一份教程[11] and a discussion forum[12]同時可用。論壇使用也本身以Arc編寫Hacker News程序。

非官方版本

由於官方Arc分支發展緩慢,部分Arc社區的成員已開啟非官方代碼庫存放非官方的修訂、擴展和庫。其中之一是Anarki[13] permitted[14] anyone to submit changes to the project. 社區管理的wiki[15]是比官方網站更好的信息來源。[來源請求]

Rainbow[16]是以Java實現的一個Arc。

Arcadia[17]是以C語言實現的一個Arc。

參考資料

  1. ^ Arc Forum: Tell Arc: Arc 3.2. Arclanguage.org. [2018-11-07]. (原始內容存檔於2021-01-23). 
  2. ^ Arc Programming Language. GitHub. [2017-04-11]. (原始內容存檔於2017-05-07). 
  3. ^ Graham, Paul. Being Popular. [2017-04-11]. (原始內容存檔於2017-05-02). 
  4. ^ Graham, Paul. Why Arc Isn't Especially Object-Oriented. [2013-01-23]. (原始內容存檔於2013-06-26). 
  5. ^ Graham, Paul. Arc FAQ. [2013-01-23]. (原始內容存檔於2013-06-26). 
  6. ^ Arc Makes Programs Shorter. Linux magazine. [2017-04-11]. (原始內容存檔於2018-12-05).  參數|newspaper=與模板{{cite web}}不匹配(建議改用{{cite news}}|website=) (幫助)
  7. ^ Five Questions About Language Design. [2017-04-11]. (原始內容存檔於2017-04-20). 
  8. ^ Web pioneer hits critics with Lisp gauntlet. The Register. UK. 2008-02-07 [2017-04-11]. (原始內容存檔於2017-08-10). 
  9. ^ Graham, Paul. Take the Arc Challenge. [2017-04-11]. (原始內容存檔於2017-03-28). 
  10. ^ Graham, Paul. Arc's Out. [2017-04-11]. (原始內容存檔於2017-03-21). 
  11. ^ Tutorial, Arc, Y combinator, [2017-04-11], (原始內容存檔於2014-06-01) .
  12. ^ Arc Forum. Arc language. [2017-04-11]. (原始內容存檔於2011-07-25). 
  13. ^ Anarki. Arc language. GitHub. [2017-04-11]. (原始內容存檔於2017-09-14). 
  14. ^ Announcement: anarki is no longer world-committable. Arc Forum. Arc language. [2017-04-11]. (原始內容存檔於2015-03-07). 
  15. ^ Arc Lang Wiki. Sites. Google. [2017-04-11]. (原始內容存檔於2016-12-04). 
  16. ^ Rainbow. Conanite. GitHub. [2017-04-11]. (原始內容存檔於2018-06-11). 
  17. ^ Arcadia. Kimtg. GitHub. [2017-04-11]. (原始內容存檔於2018-06-11). 

外部連結