Arc (programming language): Difference between revisions

Content deleted Content added
m ref
Stylewiki (talk | contribs)
specify Arc has been ported to Common Lisp
 
(176 intermediate revisions by 100 users not shown)
Line 1:
{{Short description|Open-source programming language}}
{{Distinguish|ARC Macro Language}}
{{Infobox programming language
| name = Arc
| logo = <!-- Filename only -->
| paradigm = [[multi-paradigm programming language|multi-paradigm]]: [[functional programming|functional]], [[procedural programming|procedural]], [[Reflection (computer science)|reflective]]
| logo caption =
| generation =
| screenshot = <!-- Filename only -->
| release date = 29 January 2008
| screenshot caption =
| designer = [[Paul Graham]], [[Robert Morris]]
| paradigm paradigms = [[multiMulti-paradigm programming language|multiMulti-paradigm]]: [[functionalFunctional programming|functional]], [[procedural programmingMetaprogramming|proceduralmeta]], [[ReflectionProcedural (computer science)programming|reflectiveprocedural]]
| developer = [[Paul Graham]], [[Robert Morris]]
| family = [[Lisp (programming language)|Lisp]]
| latest release version =
| designer = [[Paul Graham]], [[Robert(programmer)|Paul MorrisGraham]]
| latest release date =
| developers = Paul Graham, Robert Morris,<br />Arc [[Community of practice|community]]
| typing = [[Type system|dynamic]], [[Strongly-typed programming language|strong]]
| released = {{Start date and age|2008|01|29|df=yes}}
| implementations =
| latest release version = 3.2
| dialects =
| latest release date = {{Start date and age|2018|10|28|df=yes}}<ref>{{cite web |url=http://arclanguage.org/item?id=20772 |title=Arc Forum: Tell Arc: Arc 3.2 |website=Arclanguage.org |access-date=2018-11-07}}</ref>
| influenced_by =
| latest preview version =
| influenced =
| latest preview date = <!-- {{Start date and age|201Y|MM|DD|df=yes}} -->
| typing = [[Dynamic typing|Dynamic]]
| scope =
| programming language = [[Racket (programming language)|Racket]], [[Common Lisp (programming language)|Common Lisp]]
| platform = [[IA-32]], [[x86-64]]
| operating system = [[Linux]]
| license = [[Artistic License]] 2.0
| file ext = .arc
| file format = <!-- or: | file formats = -->
| website = {{URL|arclanguage.org}}
| implementations = Arc, Anarki, Arcadia, =Rainbow
| dialects =
| influenced by = [[Lisp (programming language)|Lisp]], [[Scheme (programming language)|Scheme]]
| influenced =
}}
 
'''Arc''' is a [[programming language]], a [[Dialect (computing)|dialect]] of the language [[Lisp (programming language)|Lisp]], currently developed by [[Paul Graham (programmer)|Paul Graham]] and [[Robert Tappan Morris|Robert Morris]]. It is [[free and open-source software]] released under the [[Artistic License]] 2.0.
 
== History ==
In 2001, Paul Graham announced <ref>[http://www.paulgraham.com/arcll1.html Arc at 3 Weeks (Paul Graham)]</ref> that he was working on a new [[Dialect (computing)|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 company|startup]] [[business incubator]] named [[Y Combinator]] have been written in Arc, most notably the [[Hacker News]] web forum and <ref>[http://news aggregator program.ycombinator.com HackerArc Newsis written in [[Racket (programming language)|Racket]].</ref>{{cite web forum|url=http://arclanguage.org/install and|title=Arc newsForum: aggregatorinstall program|website=Arclanguage.org |access-date=2018-11-07}}</ref>
 
==Motives==
In the essay ''Being Popular ''<ref>[{{cite web |url=http://www.paulgraham.com/popular.html Essay:|title=Being Popular] |last=Graham |first=Paul |date=May 2001 |website=PaulGraham.com |access-date=2018-12-05}}</ref> 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 [[Library (computing)|libraries]]"), he did give some specifics. For instanceexample, he believes that it is important for a language to be terse:
<blockquote>{{Quote |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. </blockquote>}}
 
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-oriented programming|object-orientation]] (OO). In factFurther, Graham feelsthinks that object-orientationOO is not useful as OOits methods and [[Software design pattern|patterns]] are just "good design,", and he seesviews the language features used to implement OO as partiallypartly mistaken.<ref>[{{cite web |url=http://www.paulgraham.com/noop.html |title=Why Arc Isn't Especially Object-Oriented] |last=Graham |first=Paul |website=PaulGraham.com |access-date=2018-12-05}}</ref><ref>[{{cite web |url=http://www.paulgraham.com/arcfaq.html |title=Arc FAQ] |last=Graham |first=Paul |website=PaulGraham.com |access-date=2018-12-05}}</ref> At Arc's introduction in 2008, Graham stated one of its benefits was its brevity.<ref>{{cite magazine |last=Huber |first=Mathias |date=2008-02-08 |url=http://www.linux-magazine.com/Online/News/Arc-Makes-Programs-Shorter |title=Arc Makes Programs Shorter |magazine=Linux Magazine |___location=Lawrence, Kansas |publisher=Linux New Media USA |access-date=2018-11-25}}</ref>
 
A controversy among Lisp programmers is ifwhether, and how much, the [[Ss-expressionsexpression]]s of the language should be complemented by other forms of [[syntax]]. Graham feelsthinks that additionaladded syntax should be used in situations where pure Ss-expressions would be overly verbose, saying, "I don't think we should be religiously opposed to introducing syntax into Lisp." Graham also feelsthinks that efficiency problems should be solved by giving the programmer a good [[PerformanceProfiling analysis(computer programming)|profiler]].<ref>{{cite web |url=http://www.paulgraham.com/langdes.html |title=Five Questions About Language Design |last=Graham |first=Paul |date=May 2001 |website=PaulGraham.com |access-date=2018-12-05}}</ref>
 
=== Reception ===
The first publicly released version of Arc was made available on Tuesday, 29 January 2008<ref>[http://paulgraham.com/arc0.html Arc's Out (29 January 2008)]</ref>. The release comes in the form of a .tar archive, containing the mzscheme source code for Arc. A tutorial <ref>[http://ycombinator.com/arc/tut.txt tutorial]</ref> and a discussion forum<ref>[http://arclanguage.org/forum discussion forum]</ref> are also available. The forum is copied from news.ycombinator.com and is written itself in Arc.
When released in 2008, Arc generated mixed reactions, with some calling it simply an extension to Lisp or [[Scheme (programming language)|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 (software)|Eclipse]].<ref>{{cite web |url=https://www.theregister.co.uk/2008/02/07/lisp_arc_challenge/ |title=Web pioneer hits critics with Lisp gauntlet |website=The Register |date=2008-02-07 |place=[[United Kingdom|UK]]}}</ref>
 
== Examples ==
The initial version has caused some controversy, notably by not supporting any other [[character set]] than [[ASCII]], and shipping with a built-in web application library that bases its layout on [[Table (HTML)|HTML tables]]. This, combined with the [[hype]] surrounding Arc and its generally slow development pace, has gathered some unfavorable comments<ref>[http://reddit.com/r/programming/info/6710p/comments/ Reddit: Arc's Out]</ref>.
[["Hello, World!" program|Hello world]] in Arc :
<syntaxhighlight lang="lisp">
(prn "Hello, World")
</syntaxhighlight>
 
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.<ref>{{cite web |url=http://www.paulgraham.com/arcchallenge.html |title=Take the Arc Challenge |last=Graham |first=Paul |date=February 2008 |website=PaulGraham.com |access-date=2018-12-05}}</ref>
== The Unofficial Fork ==
<syntaxhighlight lang="lisp">
Due to the slow development of the official Arc branch, the Arc community has started its own unofficial fork, sometimes referred to as Anarki. Anarki was started to continue development after many members of the community came to feel that the development of Arc centralized under Paul Graham had become stagnant. The Anarki version of Arc has two branches: a stable branch that stays as close to official distribution as possible, with just bug fixes and minor feature additions; and an experimental branch which has much more drastic modifications and additions to Paul Grahams version.
(defop said req
(aform [onlink "click here" (pr "you said: " (arg _ "foo"))]
(input "foo")
(submit)))
</syntaxhighlight>
 
==Versions==
Note that this is not a formal forking of Arc, there is still a desire to keep just one version of Arc; but at the same time, the community wanted to see development on Arc continue, which didn't appear to be happening, as Paul Graham was not giving any guidance or commentary to the community about the roadmap for Arc.
 
===Official version===
The first publicly released version of Arc was made available on Tuesday, 29 January 2008,<ref>[{{cite web |url=http://www.paulgraham.com/arc0.html |title=Arc's Out (|last=Graham |first=Paul |date=29 January 2008)] |website=PaulGraham.com |access-date=2018-12-05}}</ref> implemented on [[Racket (programming language)|Racket]] (named PLT-Scheme then). The release comes in the form of a [[Tar (computing)|.tar]] archive, containing the mzschemeRacket [[source code]] for Arc. A tutorial <ref>[{{cite web |url=http://ycombinatorwww.com/arcarclanguage.org/tut.txt tutorial]|title=Arc Tutorial |author=<!-- Unstated. --> |date=<!-- Unstated. --> |website=Paul Graham |access-date=2018-12-05}}.</ref> and a discussion forum<ref>[{{cite web |url=http://arclanguage.org/forum discussion|title=Arc forum]Forum |website=Arc language}}</ref> are also available. The forum isuses copiedthe fromsame news.ycombinator.comprogram that [[Hacker News]] does, and is written itself in Arc.{{citation needed|date=June 2025}}
 
== The= Unofficial Forkversions ===
Due to lack of updates in the official Arc branch, some members of the Arc [[Community of practice|community]] started their own repositories with unofficial modifications, extensions, and libraries. One version, ''Anarki'',<ref>{{cite web |url=https://github.com/arclanguage/anarki |title=Anarki |last=Rapp |first=Kenneth (kennethrapp) |date=14 November 2018 |website=GitHub |access-date=2018-12-05}}</ref> permitted<ref>{{cite web |url=http://arclanguage.org/item?id=17707 |title=Announcement: anarki is no longer world-committable |last=Agaram |first=Kartik (akkartik) |date=27 May 2013 |website=Arc Forum |publisher=Arc language |access-date=2018-12-05}}</ref> anyone to submit changes to the project and has a community managed wiki.<ref>{{cite web |url=https://sites.google.com/site/arclanguagewiki |title=Arc Lang Wiki |author=<!-- Unstated. --> |date=<!-- Unstated. --> |website=Sites |access-date=2018-12-05}}</ref>
 
''Rainbow''<ref>{{cite web |url=https://github.com/conanite/rainbow |title=Rainbow |last=Dalton |first=Conan (conanite) |date=12 October 2010 |website=GitHub |access-date=2018-12-05}}</ref> is an implementation of Arc in [[Java (programming language)|Java]].
 
''Arcadia''<ref>{{cite web |url=https://github.com/kimtg/Arcadia |title=Arcadia |last=Kim |first=Taegyoon (kimtg) |date=19 August 2018 |website=GitHub |access-date=2018-12-05}}</ref> is an implementation of Arc in [[C (programming language)|C]].
 
''Arc++''<ref>{{cite web |url=https://github.com/kimtg/Arcpp |title=Arcpp |last=Kim |first=Taegyoon (kimtg) |date=13 August 2023 |website=GitHub |access-date=2023-08-13}}</ref> is an implementation of Arc in [[C++]].
 
===Timeline of LISP Dialects===
{{Lisp}}
 
==References==
{{Reflist|264em}}
 
==External links==
*{{Official website|arclanguage.org}}
* [http://news.ycombinator.com/item?id=32766 Latest news from Y Combinator]
* [http://www.arclanguage.org/tut.txt Arc websiteTutorial]
*{{GitHub|arclanguage/anarki|Anarki}}
* [http://www.paulgraham.com/arcfaq.html Arc FAQ]
 
* [http://arcfn.com/ arcfn.com], documentation / discussion on arc and anarki
{{Lisp programming language}}
* [http://practical-scheme.net/wiliki/arcxref practical-scheme.net/wiliki/arcxref] an arc wiki
* [http://www.paulgraham.com/hundred.html The Hundred-Year Language], an essay
 
[[Category:Dynamically- typed programming languages]]
[[Category:Functional languages]]
[[Category:Lisp programming language family]]
[[Category:Cross-platform free software]]