Red (programming language)#Hello World!
{{short description|Computer programming language released in 2011}}
{{Infobox programming language
| name = Red
| logo = Red Language Tower Logo.png
| logo size = 160px
| logo caption =
| paradigm = Multi-paradigm: imperative, functional, symbolic
| designer = Nenad Rakočević{{cite web |title=Creator of Red |website=GitHub |url=https://github.com/dockimbel}}
| developer = Nenad Rakočević
| latest release date =March 19, 2025
| typing =
| implementations =
| dialects =
| influenced =
| license = modified BSD and Boost
| website = {{url|https://www.red-lang.org/|red-lang.org}}
| logo_alt = Red Logo (stylized Tower of Hanoi)
| year = 2011
| latest_release_version = 0.6.6{{cite web |title=Red's improvements |url=https://www.red-lang.org/2025/03/066-memory-management-improvements.html|website=red-lang|access-date=April 1, 2025}} (Beta)
| influenced_by = Rebol, Lisp, Scala, Lua
| operating_system = Linux, Windows, OS X
| file_ext = .red, .reds
}}
Red is a programming language designed to overcome the limitations of the programming language Rebol.{{cite web |title=Getting Started with GUI Programming using Red Language |url=https://www.studytonight.com/post/getting-started-with-gui-programming-using-red-programming-language |website=Studytonight |access-date=September 17, 2021}} Red was introduced in 2011 by Nenad Rakočević,{{Sfn|Balbaert|2018}} and is both an imperative and functional programming language. Its syntax and general usage overlaps that of the interpreted Rebol language.{{cite web |title=Interview with Nenad Rakocevic about Red, a Rebol inspired programming language |url=https://www.notamonadtutorial.com/interview-with-nenad-rakocevic-about-red-a-rebol-inspired-programming-language/ |website=Not a Monad Tutorial|date=28 August 2015 | access-date=August 28, 2015}}
The implementation choices of Red intend to create a full stack programming language:{{Sfn|Balbaert|2018}}{{cite web |title=6 Unusual & Groundbreaking Programming Languages to Learn in 2023|url=https://www.makeuseof.com/programming-languages-to-learn-in-2023/ |website=makeuseof.com |date=18 October 2023}} 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.{{cite news |last1=Lucas |first1=Mathis |title=Red: an imperative and functional programming language that is also a "full battery" language|url=https://programmation.developpez.com/actu/346670/Red-un-langage-de-programmation-imperatif-et-fonctionnel-et-decrit-comme-un-langage-a-pile-complete-c-est-a-dire-qu-il-peut-etre-utilise-pour-la-programmation-de-haut-niveau-et-de-bas-niveau/ |newspaper=Developpez.com |date=21 July 2023 |access-date=16 January 2023}}
- Red/System is similar to C, but packaged into a Rebol lexical structure{{snd}} for example, one would write {{Smalltalk|if x > y [print "Hello"]}} instead of {{C-lang|if (x > y) {printf("Hello\n");} }}.
- Red is a homoiconic language, which is capable of meta-programming with Rebol-like semantics.{{cite web |title=Getting Started with GUI Programming using Red Language |url=https://www.studytonight.com/post/getting-started-with-gui-programming-using-red-programming-language |website=Studytonight |access-date=September 17, 2021}}{{cite web |last=Sasu |first=Alexandru |title=Review of Red|url=https://www.softpedia.com/get/Programming/Coding-languages-Compilers/Red-Programming-Language.shtml|website=Softpedia|date=22 November 2018|access-date=February 21, 2024}} 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.{{cite web |title=Getting Started with GUI Programming using Red Language |url=https://www.studytonight.com/post/getting-started-with-gui-programming-using-red-programming-language |website=Studytonight |access-date=September 17, 2021}} It is therefore possible to cross-compile{{cite web |title=6 Unusual & Groundbreaking Programming Languages to Learn in 2023|url=https://www.makeuseof.com/programming-languages-to-learn-in-2023/ |website=makeuseof.com |date=18 October 2023}} 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".{{Cite web|url=https://www.red-lang.org/2018/12/064-simple-gc-and-pure-red-gui-console.html|title=0.6.4 Simple GC and Pure Red GUI Console|quote=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 |author=lucindamichele|access-date=2018-12-16}}
Introduction
Red was introduced in the Netherlands in February 2011 at the Rebol & Boron conference[http://www.osnews.com/story/24798/New_Red_Programming_Language_Gets_Syllable_Backend « New Red Programming Language Gets Syllable Backend »], osnews.com, May 2011. 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.[https://www.red-lang.org/2011/09/red-at-software-freedom-day-2011.html « Red Programming Language: Red at Software Freedom Day 2011 »], red-lang.org, September 14, 2011.{{cite web |title=Software Freedom Day 2011: Red programming language, a new REBOL dialect|url=https://www.youtube.com/watch?v=wgtgoliZ454 |website=YouTube | date=16 September 2011 |access-date=17 January 2023}} Rakočević is a long-time Rebol developer known as the creator of the Cheyenne HTTP server.[http://cheyenne-server.org/about.shtml « What is Cheyenne? »] Last referenced Nov 2017.
Features
Red's syntax and semantics are very close to those of Rebol.{{Sfn|Balbaert|2018}}{{cite web |title=The Dynamic Mapping Architecture |url=https://etd.ohiolink.edu/apexprod/rws_etd/send_file/send?accession=toledo1639760375713532&disposition=inline |website=OhioLINK |date=December 2021}} 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!")
Commercial applications
The following commercial applications are currently developed on Red:
- DiaGrammar[https://red-lang.org/2020/03/ «DiaGrammar»], red-lang.org, March 2020. — Live coded diagramming
- SmartXML[https://redata.dev/smartxml/ «SmartXML»], redata.dev. — XML parsing tool.
Development
Cross compilation
Red currently supports the following cross-compilation targets:{{Sfn|Balbaert|2018}}
- MS-DOS: Windows, x86, console (and GUI) applications
- Windows: Windows, x86, GUI applications
- Linux: Linux, x86
- Linux-ARM: Linux, ARMv5, armel (soft-float)
- Raspberry Pi: Linux, ARMv5, armhf (hard-float)
- FreeBSD: x86
- Darwin: OS X Intel, console (and GUI) applications
- Android: Android, ARMv5
- Android-x86: Android, x86
(Note: Presently, Red applications are 32-bit, but it is planned to switch to 64-bit in the future.{{Sfn|Balbaert|2018}})
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
{{Portal|Free and open-source software|Computer programming}}
References
{{Reflist}}
Further reading
- {{Cite book |last1=Balbaert |first1=Ivo |date=May 2018 |title=Learn Red - Fundamentals of Red|publisher=Packt Publishing|isbn=978-1789130706 |language=en}}
External links
{{commons category}}
- {{official website}}
- [https://www.red-lang.org/p/download.html Latest builds from official website]
- {{GitHub|red/Red}}
- [https://redprogramming.com/ Redprogramming.com]
- [https://helpin.red/Downloads.html/ Helpin' Red] {{Webarchive|url=https://web.archive.org/web/20210928093654/https://helpin.red/Downloads.html |date=2021-09-28 }}
{{Programming languages}}
Category:Programming languages
Category:Systems programming languages
Category:Extensible syntax programming languages
Category:Domain-specific programming languages
Category:High-level programming languages
Category:Homoiconic programming languages
Category:Procedural programming languages
Category:Cross-platform free software
Category:Cross-platform software
Category:Free and open source compilers
Category:Free and open source interpreters
Category:Software using the BSD license
Category:Software using the Boost license