Arc

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

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

歷史

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). 

外部链接

特征
 
对象系统
  • Common Lisp对象系统(CLOS)
  • CommonLoops英语CommonLoops
  • Flavors英语Flavors (programming language)
实现英语Programming language implementation
Common
Lisp
  • Allegro Common Lisp英语Allegro Common Lisp
  • Armed Bear Common Lisp英语Armed Bear Common Lisp(ABCL)
  • CLISP
  • Clozure CL
  • CMU Common Lisp(CMUCL)
  • Corman Common Lisp英语Corman Common Lisp
  • Embeddable Common Lisp(ECL)
  • GNU Common Lisp(GCL)
  • LispWorks英语LispWorks
  • Macintosh Common Lisp英语Macintosh Common Lisp
  • Mocl英语Mocl
  • Poplog英语Poplog
  • Steel Bank Common Lisp(SBCL)
  • Symbolics Common Lisp英语Genera (operating system)
  • Bigloo英语Bigloo
  • Chez Scheme
  • Chicken
  • Gambit
  • Gauche英语Gauche (Scheme implementation)
  • GNU Guile
  • Ikarus英语Ikarus (Scheme implementation)
  • IronScheme英语IronScheme
  • JScheme
  • Kawa英语Kawa (Scheme implementation)
  • Larceny
  • MIT/GNU Scheme
  • Racket
  • RScheme英语RScheme
  • Scheme 48
  • SCM
  • SIOD
  • STklos英语STklos
  • TinyScheme
  • Ypsilon英语Ypsilon (Scheme implementation)
  • OpenLisp英语OpenLisp
  • Easy-ISLisp
未标准化
 
  • Arc
  • AutoLISP
  • BBN LISP
  • Clojure
  • Dylan
  • Emacs Lisp
  • EuLisp英语EuLisp
  • Franz Lisp
  • GOAL英语Game Oriented Assembly Lisp
  • Hy
  • Interlisp英语Interlisp
  • 知识工程环境英语Knowledge Engineering Environment
  • LispKit
  • *Lisp英语*Lisp
  • Le Lisp
  • LFE英语LFE (programming language)
  • Lisp Machine Lisp英语Lisp Machine Lisp
  • Maclisp
  • MDL英语MDL (programming language)
  • MLisp英语MLisp
  • MultiLisp英语MultiLisp
  • newLISP
  • NIL英语NIL (programming language)
  • PC-LISP英语PC-LISP
  • PicoLisp
  • Portable Standard Lisp英语Portable Standard Lisp
  • RPL英语RPL (programming language)
  • S-1 Lisp英语S-1 Lisp
  • SKILL
  • Spice Lisp英语Spice Lisp
  • T英语T (programming language)
  • Zetalisp英语Zetalisp
Logo
  • MSWLogo英语MSWLogo
  • NetLogo
  • StarLogo英语StarLogo
  • UCBLogo英语UCBLogo
  • Common Lisp界面管理器英语Common Lisp Interface Manager
  • McCLIM英语McCLIM
  • Genera英语Genera (operating system)
  • Scsh英语Scsh
  • Lisp机器
  • TI Explorer英语TI Explorer
  • Space-cadet键盘英语Space-cadet keyboard
实践
社群
技术标准
  • Scheme实现要求英语Scheme Requests for Implementation
  • Common Lisp HyperSpec英语Common Lisp HyperSpec
  • X3J13英语X3J13
教育
图书
教程
  • ProgramByDesign英语ProgramByDesign
组织
商业
  • 苹果公司
  • BBN
  • Harlequin英语Harlequin (software company)
  • Lucid Inc.英语Lucid Inc.
  • Symbolics英语Symbolics
  • Xanalys英语Xanalys
教育
人士
 
Common
Lisp
  • Scott Fahlman英语Scott Fahlman
  • Richard P. Gabriel英语Richard P. Gabriel
  • Philip Greenspun英语Philip Greenspun
  • David A. Moon英语David A. Moon
  • Kent Pitman英语Kent Pitman
  • Guy L. Steele Jr.
  • Daniel Weinreb英语Daniel Weinreb
Logo
  • 分类 语言
  • 分类 家族
  • 列表级条目 列表英语List of Lisp-family programming languages