Red (programming language)

This is an old revision of this page, as edited by Nelsonkam (talk | contribs) at 21:50, 19 September 2014 (Features). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Red is both an imperative and functional programming language introduced in 2011 by Nenad Rakocevic. Its syntax and general usage directly overlaps with that of the interpreted Rebol language (which was introduced in 1997). Yet the implementation choices of Red were geared specifically to overcoming limitations of Rebol, creating what Rakocevic calls 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).

Red
Red Logo (stylized Tower of Hanoi)
Paradigmimperative, functional, symbolic
Designed byNenad Rakocevic
DeveloperNenad Rakocevic
First appeared2011
Stable release
0.4.3 / August, 2014
Preview release
03b0983 / 16-Sep-2014
OSLinux, Windows, OS X, Syllable
Licensemodified BSD license
Filename extensions.red, .reds
Websitewww.red-lang.org
Influenced by
Rebol, Scala, Lua

Key to the approach is that the language has two parts: Red/System and Red. The former (Red/System) is similar to C, but packaged into a Rebol lexical structure (e.g. one would write "if x > y [print {Hello}]" instead of "if (x > y) {printf("Hello\n");}"). Red itself is a homoiconic language capable of meta-programming, whose semantics are more similar to Rebol's. Its runtime library is written in Red/System, and uses a hybrid approach: it compiles what it can deduce statically, has a just-in-time compiler for cases that can make use of it, and falls back onto an embedded interpreter when neither of those approaches will suffice.

Red seeks to remain independent of any other toolchain, and thus does its own code generation. It's 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.

Language schema

 

Introduction

The Red programming language was presented during the Software Freedom Day 2011[1];[2] giving to its author a large audience; the video is still on the SFD homepage since September 2011. Rakocevic is also the joint winners of the Rebol of the Year 2011 election.[3] Red was first introduced in the Netherlands on February 2011 at the Rebol & Boron conference[4] by its author, who is also known to be the creator of the Cheyenne HTTP server.[5]

Features

Red's syntax and semantics is very close to those of Rebol. Like Rebol, it strongly supports metaprogramming (DSL) and is therefore a highly efficient tool for dialecting. Red/System, which provides system programming facilities also supports some concurrent programming features like task and data parallelism. Red is easily in embeddable ("Think Lua") and very lightweight (not more than a megabyte).

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. Intial phase : Red and Red/System compilers written in Rebol
  2. Bootstrap phase : Red/System compiler, Red compiler, Red JIT-compiler rewritten in Red.

Cross Compilation

As of version 0.4.3, Red supports the following cross-compilation targets :

  • MSDOS : Windows, x86, console (+ GUI) applications
  • Windows : Windows, x86, GUI applications
  • Linux : GNU/Linux, x86
  • Linux-ARM : GNU/Linux, ARMv5, armel (soft-float)
  • RaspberryPi : GNU/Linux, ARMv5, armhf (hard-float)
  • Darwin : Mac OS X Intel, console-only applications
  • Syllable : Syllable OS, x86
  • Android : Android, ARMv5
  • Android-x86 : Android, x86

Hello World

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

Factorial Example

The following is a factorial example in Red :

Red [Title: "A factorial script"]

factorial: func [
	x [integer!]
][
	if x = 0 [return 1]
	return x * factorial (x - 1)
]

The following is a factorial example in Red/System :

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

factorial: func [
	x [integer!]
    return: [integer!]
][
	if x = 0 [return 1]
	return x * factorial (x - 1)
]

See also

References

  1. ^ « Red », softwarefreedomday.eu, september 14, 2011.
  2. ^ « Red Programming Language: Red at Software Freedom Day 2011 », red-lang.org, september 14, 2011.
  3. ^ « Red & Rebol DevCon Winter 2012 », devcon, winter 2012.
  4. ^ « New Red Programming Language Gets Syllable Backend », osnews.com, May 2011.
  5. ^ « Red Alert! », syllable.org, May 2011.