Red (programming language)

Red is a programming language designed to overcome the limitations of the programming language Rebol.[3] Red was introduced in 2011 by Nenad Rakočević, and is both an imperative and functional programming language. Its syntax and general usage overlaps that of the interpreted Rebol language.[4]

Red
Red Logo (stylized Tower of Hanoi)
Paradigmimperative, functional, symbolic
Designed byNenad Rakočević[1]
DeveloperNenad Rakočević
First appeared2011
Stable release
0.6.4[2] (Alpha) / December 7, 2018
OSLinux, Windows, OS X, Syllable
Licensemodified BSD and Boost
Filename extensions.red, .reds
Websitewww.red-lang.org
Influenced by
Rebol, Scala, Lua

The implementation choices of Red intend to create a full stack programming language: Red can be used for extremely high-level programming (DSLs and GUIs) as well as low-level programming (operating systems and device drivers). Key to the approach is that the language has two parts: Red/System and Red.

  • Red/System is similar to C, but packaged into a Rebol lexical structure  for example, one would write if x > y [print "Hello"] instead of if (x > y) {printf("Hello\n");}.
  • Red is a homoiconic language[3] capable of meta-programming, with Rebol-like semantics. Red's runtime library is written in Red/System, and uses a hybrid approach: it compiles what it can deduce statically and uses an embedded interpreter otherwise. The project roadmap includes a just-in-time compiler for cases in between, but this has not yet been implemented.

Red seeks to remain independent of any other toolchain; it does its own code generation.[3] It is therefore possible to cross-compile Red programs from any platform it supports to any other, via a command-line switch. Both Red and Red/System are distributed as open-source software under the modified BSD license. The runtime library is distributed under the more permissive Boost Software License.

As of version 0.6.4 Red includes a garbage collector "the Simple GC".[2]

Red Language architecture schema

Introduction

Red was introduced in the Netherlands in February 2011 at the Rebol & Boron conference[5] by its author Nenad Rakočević. In September 2011, the Red programming language was presented to a larger audience during the Software Freedom Day 2011.[6] Rakočević is a long-time Rebol developer known as the creator of the Cheyenne HTTP server.[7]

Features

Red's syntax and semantics are very close to those of Rebol.[8] Like Rebol, it strongly supports metaprogramming and domain-specific languages (DSLs) and is therefore a highly efficient tool for dialecting (creating embedded DSLs). Red includes a dialect called Red/System, a C-level language which provides system programming facilities. Red is easy to integrate with other tools and languages as a DLL (libRed) and very lightweight (around 1 MB). It is also able to cross-compile to various platforms (see Cross Compilation section below) and create packages for platforms that require them (e.g., .APK on Android). Red also includes a fully reactive cross-platform GUI system based on an underlying reactive dataflow engine, a 2D drawing dialect comparable to SVG, compile-time and runtime macro support, and more than 40 standard datatypes.

Goals

The following is the list of Red's Goals as presented on the Software Freedom Day 2011:

  • Simplicity ("An IDE should not be necessary to write code.")
  • Compactness ("Being highly expressive maximizes productivity.")
  • Speed ("If too slow, it cannot be general-purpose enough.")
  • Be "Green", Have a Small Footprint ("Because resources are not limitless.")
  • Ubiquity ("Spread everywhere.")
  • Portability, Write once run everywhere ("That's the least expected from a programming language.")
  • Flexibility ("Not best but good fit for any task!")

Development

Red's development is planned to be done in two phases:

  1. Initial phase: Red and Red/System compilers written in Rebol 2
  2. Bootstrap phase: Red and Red/System compilers complemented by a Red JIT-compiler, all written in Red

Cross compilation

Red currently supports the following cross-compilation targets:

(Note: This list will increase with time and should therefore be considered as incomplete.)

Hello World!

Red [Title: "Simple hello world script"]
print "Hello World!"

Factorial example

IMPORTANT: These are intended as syntax examples. Until Red has 64-bit support, the integer example will overflow a 32-bit integer very quickly. Changing that to `float!` will go farther, but these are merely to show the syntax of the language.

The following is a factorial example in Red:

Red [Title: "A factorial script"]  ; Note: The title is optional.

factorial: func [
	x [integer!]  ; Giving the type of an argument in Red is optional
][
	either x = 0 [1][x * factorial x - 1]
]

The following is the same factorial example in Red/System (in this very simple case, the source code is very similar to Red's version):

Red/System [Title: "A factorial script"]

factorial: func [
	x       [integer!]                   ; This is compulsory in Red/System
	return: [integer!]                   ; This is compulsory in Red/System
][
	either x = 0 [1][x * factorial x - 1]
]

See also

References

  1. "Creator of Red".
  2. lucindamichele. "0.6.4 Simple GC and Pure Red GUI Console". Retrieved 2018-12-16. The main feature for 0.6.4 is what we call the Simple GC (Garbage Collector). A more advanced GC is planned for the future
  3. "Getting Started with GUI Programming using Red Language". Studytonight. Retrieved September 17, 2021.
  4. "Interview with Nenad Rakocevic about Red, a Rebol inspired programming language". Not a Monad Tutorial. Retrieved August 28, 2015.
  5. « New Red Programming Language Gets Syllable Backend », osnews.com, May 2011.
  6. « Red Programming Language: Red at Software Freedom Day 2011 », red-lang.org, September 14, 2011.
  7. « What is Cheyenne? » Last referenced Nov 2017.
  8. "The Dynamic Mapping Architecture". OhioLINK. December 2021.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.