Racket (programming language): Difference between revisions

Content deleted Content added
Codeofdusk (talk | contribs)
m Fix the definite article
Integrated Language Extensibility and Macros: heading caps and misuse of bold
Line 109:
At the end of 2014, much of Racket's code was moved into a new packaging system separate from the main code base. This new packaging system is serviced by a client program named ''raco''. The new package system provides fewer features than PLaneT; a blog post by Jay McCarthy on the Racket blog explains the rationale for the change and how to duplicate the older system.<ref>{{cite web |url=http://blog.racket-lang.org/2014/12/the-racket-package-system-and-planet.html |title=The Racket package system and Planet}}</ref>
 
===Integrated Languagelanguage Extensibilityextensibility and Macrosmacros===
{{See also|Racket features#Language Extensions|l1=Racket language extensions}}
 
Line 116:
The module-level extensibility features are combined with a [[Scheme (programming language)|Scheme]]-like hygienic macro system, which provides more features than [[Lisp (programming language)|Lisp's]] s-expression manipulation system,<ref name='you-want-it-when'>{{cite conference |last=Flatt |first=Matthew |url=http://www.cs.utah.edu/plt/publications/macromod.pdf |title=Composable and Compilable Macros, You Want it When? |book-title=International Conference on Functional Programming |year=2002}}</ref><ref>Flatt, Culpepper, Darais, Findler, [http://www.cs.utah.edu/plt/publications/jfp12-draft-fcdf.pdf Macros that Work Together; Compile-Time Bindings, Partial Expansion, and Definition Contexts]</ref> Scheme 84's [[Hygienic macro|hygienic]] extend-syntax macros, or [[R5RS]]'s [[syntax-rules]]. Indeed, it is fair to say that the macro system is a carefully tuned [[application programming interface]] (API) for [[compiler]] extensions. Using this compiler API, programmers can add features and entire [[___domain-specific language]]s in a manner that makes them completely indistinguishable from built-in language constructs.
 
The '''macro''' system in Racket has been used to construct entire language [[dialect (computing)|dialects]]. This includes Typed Racket, which is a gradually typed dialect of Racket that eases the migration from [[dynamically typed|untyped]] to typed code,<ref>{{cite conference |last1=Tobin-Hochstadt |first1=S. |last2=Felleisen |first2=M. |title=The Design and Implementation of Typed Scheme |book-title=Principles of Programming Languages |year=2008}}</ref> Lazy Racket—a dialect with [[lazy evaluation]],<ref>{{cite conference |last1=Barzilay |first1=E. |last2=Clements |first2=J. |title=Laziness Without All the Hard Work: Combining Lazy and Strict Languages for Teaching |book-title=Functional and Declarative Programming in Education |year=2005}}</ref> and Hackett, which combines Haskell and Racket.<ref name="Alexis Kings Blog">{{cite web | title=The Hackett Programming Language | website=Alexis King's Blog | url=https://lexi-lambda.github.io/hackett/ | access-date=16 June 2019}}</ref> The pedagogical programming language [[Pyret]] was originally implemented in Racket.<ref name="The Pyret Crew 2011">{{cite web | author=The Pyret Crew | title=The Pyret Code; or A Rationale for the Pyret Programming Language | website=Pyret | date=24 May 2011 | url=http://pyret.org/pyret-code/index.html | access-date=16 June 2019}}</ref><ref name="Index of / 2017">{{cite web | title=Programming and Programming Languages | website=Index of / | date=20 September 2017 | url=https://papl.cs.brown.edu/2017/ | access-date=16 June 2019}}</ref>
 
Other dialects include FrTime ([[functional reactive programming]]), Scribble (documentation language),<ref>{{cite conference |last1=Flatt |first1=M. |last2=Barzilay |first2=E. |last3=Findler |first3=R. B. |title=Scribble: Closing the Book on Ad Hoc Documentation Tools |book-title=International Conference on Functional Programming |year=2009}}</ref> Slideshow ([[slide show|presentation]] language),<ref>{{cite conference |last1=Findler |first1=R. B. |last2=Flatt |first2=M. |title=Slideshow: Functional Presentations |book-title=International Conference on Functional Programming |year=2004}}</ref> and several languages for education.<ref name="functional-io">{{cite conference |last1=Felleisen |last2=Findler |last3=Flatt |last4=Krishnamurthi |first1=M. |first2=R. B. |first3=M. |first4=S. |title=A Functional I/O System (or Fun for Freshman Kids) |url=http://www.ccs.neu.edu/scheme/pubs/icfp09-fffk.pdf |book-title=International Conference on Functional Programming |year=2009}}</ref><ref>{{cite journal |title=The Structure and Interpretation of the Computer Science Curriculum |last1=Felleisen |last2=Findler |last3=Flatt |last4=Krishnamurthi |first1=M. |first2=R. B. |first3=M. |first4=S.|journal=Journal of Functional Programming |volume=14 |issue=4 |pages=365–378 |url=http://www.ccs.neu.edu/scheme/pubs/fdpe2002-fffk.pdf |year=2004|doi=10.1017/S0956796804005076 }}</ref>