Wednesday, April 19, 2017

Racket

"Racket (formerly PLT Scheme) is a general purpose, multi-paradigm programming language in the Lisp-Scheme family. One of its design goals is to serve as a platform for language creation, design, and implementation.[7][8] The language is used in a variety of contexts such as scripting, general-purpose programming, computer science education, and research.

The platform provides an implementation of the Racket language (including a sophisticated run-time system,[9] various libraries, JIT compiler, and more) along with a development environment called DrRacket (formerly named DrScheme) written in Racket itself.[10] The IDE and an accompanying programming curriculum is used in the ProgramByDesign outreach program, an attempt to turn computing and programming into "an indispensable part of the liberal arts curriculum".[11][12] The core language is known for its extensive macro system which enables the creation of embedded and domain-specific languages, language constructs such as classes or modules, and separate dialects of Racket with different semantics.[13][14][15][16]

The platform distribution is free and open-source software distributed under the GNU Lesser General Public License (LGPL) license.[17] Extensions and packages written by the community are uploaded to Racket's centralized package catalog.

Racket's core language includes macros, modules, lexical closures, tail calls, delimited continuations,[30] parameters (fluid variables), software contracts,[31] green and OS threads,[32][33][34] and more. The language also comes with primitives, such as eventspaces and custodians, which control resource management and enables the language to act like an operating system for loading and managing other programs.[9] Further extensions to the language are created with the powerful macro system, which together with the module system and custom parsers can control all aspects of a language.[35] Unlike programming languages that lack macro systems, most language constructs in Racket are written on top of the base language using macros. These include a mixin class system,[14] a component (or module) system as expressive as ML's,[15] and pattern matching.

In addition, the language features the first contract system for a higher-order language.[36] Racket's contract system is inspired by the Design by Contract work for Eiffel and extends it to work for higher-order values such as first-class functions, objects, reference cells, and so on. For example, an object that is checked by a contract can be ensured to make contract checks when its methods are eventually invoked.

Racket's compiler is a bytecode compiler that translates to an internal bytecode format that is run by the Racket virtual machine. On x86 and PowerPC platforms, the bytecode is further compiled using a JIT compiler at runtime.

Since 2004, the language has also shipped with PLaneT, a package manager that is integrated into the module system so that third-party libraries can be transparently imported and used. Additionally, PLaneT has a built-in versioning policy to prevent dependency hell.

The feature that distinguishes Racket from other languages in the Lisp family is its integrated language extensibility. Racket's extensibility features are built into the module system to allow context-sensitive and module-level control over syntax.[16] For example, the #%app syntactic form can be overridden to change the semantics of function application. Similarly, the #%module-begin form allows arbitrary static analysis of the entire module.[16] Since any module can be used as a language, via the #lang notation, this effectively means a programmer can control virtually any aspect of the language.

The module-level extensibility features are combined with a Scheme-like hygienic macro system, which provides more features than Lisp's S-expression manipulation system,[39][40] Scheme 84's 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 languages 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 dialects. This includes Typed Racket—a statically typed dialect of Racket that eases the migration from untyped to typed code,[41] and Lazy Racket—a dialect with lazy evaluation.[42] Other dialects include FrTime (functional reactive programming), Scribble (documentation language),[43] Slideshow (presentation language),[44] and several languages for education.[45][46] Racket's core distribution provides libraries to aid the process of constructing new programming languages."


 http://racket-lang.org/

https://en.wikipedia.org/wiki/Racket_%28programming_language%29

Racket Packages - https://pkgs.racket-lang.org/



No comments:

Post a Comment