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;16 years ago (2008-01-29)
Stable release
3.2 / 28 October 2018;6 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]

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

Timeline of LISP Dialects

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
  XLISP
  T
  Chez Scheme
  Emacs Lisp
  AutoLISP
  PicoLisp
  Gambit
  EuLisp
  ISLISP
  OpenLisp
  PLT Scheme   Racket
  newLISP
  GNU Guile
  Visual LISP
  Clojure
  Arc
  LFE
  Hy
  Chialisp

Related Research Articles

A "Hello, World!" program is generally a simple computer program that emits to the screen a message similar to "Hello, World!". A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a sanity check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it.

<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 the late 1950s, it 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. 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-American computer scientist, writer, entrepreneur and investor. His work has included the programming language Arc, the startup Viaweb, co-founding the 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.

DOT is a graph description language, developed as a part of the Graphviz project. DOT graphs are typically stored as files with the .gv or .dot filename extension — .gv is preferred, to avoid confusion with the .dot extension used by versions of Microsoft Word before 2007. dot is also the name of the main program to process DOT files in the Graphviz package.

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, primarily designed to provide easy keyboard shortcuts or hotkeys, fast macro-creation and software automation to allow users of most computer skill levels to automate repetitive tasks in any Windows application. It can easily extend or modify user interfaces. The installation package includes an extensive help file; 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 an easy-to-read markup language. 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">Scala (programming language)</span> General-purpose programming language

Scala is a strong statically typed high-level general-purpose programming language that supports both object-oriented programming and functional programming. Designed to be concise, many of Scala's design decisions are intended to address criticisms of Java.

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

Racket is a general-purpose, multi-paradigm programming language. The Racket language is a modern dialect of Lisp and a descendant of Scheme. It is designed as a platform for programming language design and implementation. In addition to the core Racket language, Racket is also used to refer to the family of programming languages and set of tools supporting development on and with Racket. Racket is also used for scripting, computer science education, and research.

QuickCheck is a software library, 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.

<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 programming language Lisp 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 GNU Emacs, directly descended from the original, is ongoing; its latest version is 29.4 , released June 2024.

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 (programming language)</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 system 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.