Arc (programming language)

Last updated
Arc
Paradigms Multi-paradigm: functional, meta, procedural
Family Lisp
Designed by Paul Graham
Developers Paul Graham, Robert Morris,
Arc community
First appeared29 January 2008;15 years ago (2008-01-29)
Stable release
3.2 / 28 October 2018;4 years ago (2018-10-28) [1]
Typing discipline Dynamic
Implementation language Racket
Platform IA-32, x86-64
OS Linux
License Artistic License 2.0
Filename extensions .arc
Website arclanguage.org
Major implementations
Arc, Anarki, Arcadia, Rainbow
Influenced by
Lisp, Scheme

Arc is a programming language, a dialect of the language Lisp, developed by Paul Graham and Robert Morris. It is free and open-source software released under the Artistic License 2.0.

Contents

History

In 2001, Paul Graham announced that he was working on a new dialect of Lisp named Arc. Over the years since, he has written several essays describing features or goals of the language, and some internal projects at Graham's startup business incubator named Y Combinator have been written in Arc, most notably the Hacker News web forum and news aggregator program. Arc is written in Racket. [2]

19581960196519701975198019851990199520002005201020152020
 LISP 1, 1.5, LISP 2(abandoned)
  Maclisp
  Interlisp
  MDL
  Lisp Machine Lisp
  Scheme  R5RS R6RS R7RS small
  NIL
  ZIL (Zork Implementation Language)
  Franz Lisp
  Common Lisp  ANSI standard
  Le Lisp
  MIT Scheme
  T
  Chez Scheme
  Emacs Lisp
  AutoLISP
  PicoLisp
  Gambit
  EuLisp
  ISLISP
  OpenLisp
  PLT Scheme   Racket
  GNU Guile
  Visual LISP
  Clojure
  Arc
  LFE
  Hy

Motives

In the essay Being Popular [3] Graham describes a few of his goals for the language. While many of the goals are very general ("Arc should be hackable", "there should be good libraries"), he did give some specifics. For example, he believes it is important for a language to be terse:

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.

He also stated that it is better for a language to only implement a small number of axioms, even when that means the language may not have features that large organizations want, such as object-orientation (OO). Further, Graham thinks that OO is not useful as its methods and patterns are just "good design", and he views the language features used to implement OO as partly mistaken. [4] [5] At Arc's introduction in 2008, Graham stated one of its benefits was its brevity. [6]

A controversy among Lisp programmers is whether, and how much, the s-expressions of the language should be complemented by other forms of syntax. Graham thinks that added syntax should be used in situations where pure s-expressions would be overly verbose, saying, "I don't think we should be religiously opposed to introducing syntax into Lisp." Graham also thinks that efficiency problems should be solved by giving the programmer a good profiler. [7]

Reception

When released in 2008, Arc generated mixed reactions, with some calling it simply an extension to Lisp or Scheme and not a programming language in its own right. Others applauded Arc for stripping Lisp down to bare essentials. Shortly after its release, Arc was ported to JavaScript, and was being supported by Schemescript, an integrated development environment (IDE) based on Eclipse. [8]

Examples

Hello world in Arc :

(prn"Hello, World")

To illustrate Arc's terseness, Graham uses a brief program. It produces a form with one field at the url "/said". When the form is submitted, it leads to a page with a link that says "click here", which then leads to a page with the value of the original input field. [9]

(defopsaidreq(aform[onlink"click here"(pr"you said: "(arg_"foo"))](input"foo")(submit)))

Versions

Official version

The first publicly released version of Arc was made available on 29 January 2008, [10] implemented on Racket (named PLT-Scheme then). The release comes in the form of a .tar archive, containing the Racket source code for Arc. A tutorial [11] and a discussion forum [12] are also available. The forum uses the same program that Hacker News does, and is written in Arc.

Unofficial versions

Due to lack of updates in the official Arc branch, some members of the Arc community started their own repositories with unofficial modifications, extensions, and libraries. One version, Anarki, [13] permitted [14] anyone to submit changes to the project and has a community managed wiki. [15]

Rainbow [16] is an implementation of Arc in Java.

Arcadia [17] is an implementation of Arc in C.

Arc++ [18] is an implementation of Arc in C++.

Related Research Articles

<span class="mw-page-title-main">Lisp (programming language)</span> Programming language family

Lisp is a family of programming languages with a long history and a distinctive, fully parenthesized prefix notation. Originally specified in 1960, Lisp is the second-oldest high-level programming language still in common use, after Fortran. Lisp has changed since its early days, and many dialects have existed over its history. Today, the best-known general-purpose Lisp dialects are Common Lisp, Scheme, Racket and Clojure.

<span class="mw-page-title-main">Ruby (programming language)</span> General-purpose programming language

Ruby is an interpreted, high-level, general-purpose programming language which supports multiple programming paradigms. It was designed with an emphasis on programming productivity and simplicity. In Ruby, everything is an object, including primitive data types. It was developed in the mid-1990s by Yukihiro "Matz" Matsumoto in Japan.

<span class="mw-page-title-main">Paul Graham (programmer)</span> English programmer, venture capitalist, and essayist

Paul Graham is an English computer scientist, essayist, entrepreneur, investor, and author. He is best known for his work on the programming language Lisp, his former startup Viaweb, co-founding the influential startup accelerator and seed capital firm Y Combinator, his essays, and Hacker News.

Programming languages can be grouped by the number and types of paradigms supported.

Greenspun's tenth rule of programming is an aphorism in computer programming and especially programming language circles that states:

Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.

<span class="mw-page-title-main">AutoHotkey</span> Automation-focused scripting language for Windows

AutoHotkey is a free and open-source custom scripting language for Microsoft Windows, initially aimed at providing easy keyboard shortcuts or hotkeys, fast macro-creation and software automation that allows users of most levels of computer skill to automate repetitive tasks in any Windows application. User interfaces can easily be extended or modified by AutoHotkey. The AutoHotkey installation includes its own extensive help file, and web-based documentation is also available.

<span class="mw-page-title-main">Markdown</span> Plain text markup language

Markdown is a lightweight markup language for creating formatted text using a plain-text editor. John Gruber created Markdown in 2004 as a markup language that is easier to read in its source code form. Markdown is widely used for blogging and instant messaging, and also used elsewhere in online forums, collaborative software, documentation pages, and readme files.

<span class="mw-page-title-main">Racket (programming language)</span> Lisp dialect

Racket is a general-purpose, multi-paradigm programming language and a multi-platform distribution that includes the Racket language, compiler, large standard library, IDE, development tools, and a set of additional languages including Typed Racket, Swindle, FrTime, Lazy Racket, R5RS & R6RS Scheme, Scribble, Datalog, Racklog, Algol 60 and several teaching languages.

Programming languages are used for controlling the behavior of a machine. Like natural languages, programming languages follow rules for syntax and semantics.

QuickCheck is a software library, specifically a combinator library, originally written in the programming language Haskell, designed to assist in software testing by generating test cases for test suites – an approach known as property testing.

libffi is a foreign function interface library. It provides a C programming language interface for calling natively compiled functions given information about the target function at run time instead of compile time. It also implements the opposite functionality: libffi can produce a pointer to a function that can accept and decode any combination of arguments defined at run time.

<span class="mw-page-title-main">Clojure</span> Dialect of the Lisp programming language on the Java platform

Clojure is a dynamic and functional dialect of the Lisp programming language on the Java platform.

Emacs, originally named EMACS, is a family of text editors that are characterized by their extensibility. The manual for the most widely used variant, GNU Emacs, describes it as "the extensible, customizable, self-documenting, real-time display editor". Development of the first Emacs began in the mid-1970s, and work on its direct descendant, GNU Emacs, is ongoing; its latest version is 29.1, released July 2023.

Mustache is a web template system with implementations available for ActionScript, C++, Clojure, CoffeeScript, ColdFusion, Common Lisp, Crystal, D, Dart, Delphi, Elixir, Erlang, Fantom, Go, Haskell, Io, Java, JavaScript, Julia, Lua, .NET, Objective-C, OCaml, Perl, PHP, Pharo, Python, R, Racket, Raku, Ruby, Rust, Scala, Smalltalk, Swift, Tcl, CFEngine, and XQuery.

The table shows a comparison of functional programming languages which compares various features and designs of different functional programming languages.

<span class="mw-page-title-main">LFE (programming language)</span>

Lisp Flavored Erlang (LFE) is a functional, concurrent, garbage collected, general-purpose programming language and Lisp dialect built on Core Erlang and the Erlang virtual machine (BEAM). LFE builds on Erlang to provide a Lisp syntax for writing distributed, fault-tolerant, soft real-time, non-stop applications. LFE also extends Erlang to support metaprogramming with Lisp macros and an improved developer experience with a feature-rich read–eval–print loop (REPL). LFE is actively supported on all recent releases of Erlang; the oldest version of Erlang supported is R14.

<span class="mw-page-title-main">Hy</span> Dialect of the Lisp programming language designed to interact with Python

Hy is a dialect of the Lisp programming language designed to interact with Python by translating s-expressions into Python's abstract syntax tree (AST). Hy was introduced at Python Conference (PyCon) 2013 by Paul Tagliamonte. Lisp allows operating on code as data (metaprogramming), thus Hy can be used to write domain-specific languages.

<span class="mw-page-title-main">Nim (programming language)</span> Programming language

Nim is a general-purpose, multi-paradigm, statically typed, compiled high-level systems programming language, designed and developed by a team around Andreas Rumpf. Nim is designed to be "efficient, expressive, and elegant", supporting metaprogramming, functional, message passing, procedural, and object-oriented programming styles by providing several features such as compile time code generation, algebraic data types, a foreign function interface (FFI) with C, C++, Objective-C, and JavaScript, and supporting compiling to those same languages as intermediate representations.

References

  1. "Arc Forum: Tell Arc: Arc 3.2". Arclanguage.org. Retrieved 2018-11-07.
  2. "Arc Forum: install". Arclanguage.org. Retrieved 2018-11-07.
  3. Graham, Paul (May 2001). "Being Popular". PaulGraham.com. Retrieved 2018-12-05.
  4. Graham, Paul. "Why Arc Isn't Especially Object-Oriented". PaulGraham.com. Retrieved 2018-12-05.
  5. Graham, Paul. "Arc FAQ". PaulGraham.com. Retrieved 2018-12-05.
  6. Huber, Mathias (2008-02-08). "Arc Makes Programs Shorter". Linux Magazine. Lawrence, Kansas: Linux New Media USA. Retrieved 2018-11-25.
  7. Graham, Paul (May 2001). "Five Questions About Language Design". PaulGraham.com. Retrieved 2018-12-05.
  8. "Web pioneer hits critics with Lisp gauntlet". The Register. UK. 2008-02-07.
  9. Graham, Paul (February 2008). "Take the Arc Challenge". PaulGraham.com. Retrieved 2018-12-05.
  10. Graham, Paul (29 January 2008). "Arc's Out". PaulGraham.com. Retrieved 2018-12-05.
  11. "Arc Tutorial". Paul Graham. Retrieved 2018-12-05..
  12. "Arc Forum". Arc language.
  13. Rapp, Kenneth (kennethrapp) (14 November 2018). "Anarki". GitHub. Retrieved 2018-12-05.
  14. Agaram, Kartik (akkartik) (27 May 2013). "Announcement: anarki is no longer world-committable". Arc Forum. Arc language. Retrieved 2018-12-05.
  15. "Arc Lang Wiki". Sites. Retrieved 2018-12-05.
  16. Dalton, Conan (conanite) (12 October 2010). "Rainbow". GitHub. Retrieved 2018-12-05.
  17. Kim, Taegyoon (kimtg) (19 August 2018). "Arcadia". GitHub. Retrieved 2018-12-05.
  18. Kim, Taegyoon (kimtg) (13 August 2023). "Arcpp". GitHub. Retrieved 2023-08-13.