Red is a next-generation programming language strongly inspired by Rebol, but with a broader field of usage thanks to its native-code compiler, from system programming to high-level scripting and cross-platform reactive GUI, while providing modern support for concurrency, all in a zero-install, zero-config, single 1MB file!
Red Rebol Other
Failed to load latest commit information.
bridges FEAT: merged code into internal series! datatype Jul 16, 2015
build FEAT: use DirectWrite to draw Text in BASE face when possible Jul 24, 2016
docs DOCS: adds system/cpu/overflow? description. Aug 1, 2016
environment FIX: issue #2166 (lexer.red converts 2147483648 to -2147483648) Aug 11, 2016
modules/view FIX: base face disappear when restore from minimized state Aug 19, 2016
quick-test TESTS: Added generator for tests for both lexer.r and lexer.red Jul 10, 2016
runtime FIX: issue #2162 (Write/info crashes when a custom header is used) Aug 13, 2016
system FIX: issue #2135 (Printing of float values with high exponent is broken) Aug 7, 2016
tests TESTS: Added tests to float-test.red to replace float-auto-test.red Aug 22, 2016
utils FIX: completes fix for issue #2125. Jul 23, 2016
.appveyor.yml FIX: renaming appveyor config file. Jul 2, 2016
.gitattributes [GIT] Adding .gitattributes because come files are in the GitHub stil… Mar 23, 2015
.travis.yml FEAT: remove Travis build environment dependency on rebol.com. Jul 31, 2016
BSD-3-License.txt DOCS: Reflow long lines in the license text Jul 6, 2011
BSL-License.txt FEAT: moved BSL license file to root folder. Oct 27, 2012
README.md FEAT: added link for Travis Jul 7, 2016
boot.red FEAT: enables functions to be used as reactions. May 31, 2016
compiler.r FIX: issue #2152 (Red doesn't raise a error on function definition wi… Aug 5, 2016
lexer.r FEAT: fallback to float values when failing to load an overflowing in… Aug 1, 2016
red.r FIX: Red runtime compilation crashing on macOS < 10.8 Aug 4, 2016
run-all.r TESTS: split extra tests in run-all so that some run before the main … Jul 24, 2015
usage.txt Merge remote-tracking branch 'refs/remotes/red/master' into add-cli-t… Mar 28, 2016
version.r REL: 0.6.1 - Reactive programming Jun 29, 2016

README.md

Join the chat at https://gitter.im/red/red Travis build Build status

Red Programming Language

Red is a new programming language strongly inspired by Rebol, but with a broader field of usage thanks to its native-code compiler, from system programming to high-level scripting, while providing modern support for concurrency and multi-core CPUs.

Red has its own complete cross-platform toolchain, featuring two compilers, an interpreter and a linker, not depending on any third-party library, except for a Rebol2 interpreter, required during the bootstrap phase. Once complete, Red will be self-hosted.

The Red software stack also contains another language, Red/System, which is a low-level dialect of Red. It is a limited C-level language with a Red look'n feel, required to build Red's runtime library and be the target language of Red's compiler. More information at red-lang.org.

Making a Red "Hello World"

The Red toolchain comes as a single one-megabyte executable file that you can download from here for the big-3 platforms.

  1. Put the downloaded red binary in the working folder.

  2. In a code or text editor, write the following Hello World program:

    Red [
        Title: "Simple hello world script"
    ]
    
    print "Hello World!"
    
  3. Save it under the name: hello.red

  4. From a terminal (works from DOS too), run it with:

    $ red hello.red
    
  5. You should see the Hello World! output.

  6. Want to generate a compiled executable from that program?

    $ red -c hello.red
    $ ./hello
    
  7. Want to cross-compile to another supported platform?

    $ red -c -t Windows hello.red
    $ red -c -t Darwin hello.red
    $ red -c -t Linux-ARM hello.red
    

The command-line options are:

red [options] [file]

[file]

Any Red or Red/System source file. If no file and no option is provided, the graphical console will be launched. If a file with no option is provided, the file will be simply run by the interpreter (it is expected to be a Red script with no Red/System code).

[options]

--cli                          : Run the command-line REPL instead of the
                                 graphical console.

-c, --compile                  : Forces generation of an executable in
                                 the working folder.

-d, --debug, --debug-stabs     : Compile source file in debug mode. STABS
                                 is supported for Linux targets.

-dlib, --dynamic-lib           : Generate a shared library from the source
                                 file.

-h, --help                     : Output this help text.

-o <file>, --output <file>     : Specify a non-default [path/][name] for
                                 the generated binary file.

-r, --no-runtime               : Do not include runtime during Red/System
                                 source compilation.

-t <ID>, --target <ID>         : Cross-compile to a different platform
                                 target than the current one (see targets
                                 table below).

-v <level>, --verbose <level>  : Set compilation verbosity level, 1-3 for
                                 Red, 4-11 for Red/System.

-V, --version                  : Output binary version string.

--red-only                     : Stop just after Red-level compilation.
                                 Use higher verbose level to see compiler
                                 output. (internal debugging purpose)

Cross-compilation targets:

MSDOS        : Windows, x86, console (+ GUI) applications
Windows      : Windows, x86, GUI applications
WindowsXP    : Windows, x86, GUI applications, no touch API
Linux        : GNU/Linux, x86
Linux-ARM    : GNU/Linux, ARMv5, armel (soft-float)
RPi          : GNU/Linux, ARMv5, armhf (hard-float)
Darwin       : MacOSX Intel, console-only applications
Syllable     : Syllable OS, x86
FreeBSD      : FreeBSD, x86
Android      : Android, ARMv5
Android-x86  : Android, x86

Note: Running the Red toolchain binary from a $PATH currently requires a wrapping shell script (see relevant tickets: #543 and #1547.

Running the Red REPL

  1. Just run the red binary with no option to access the REPL.

    -=== Red Console alpha version ===-
    (only ASCII input supported)
    
    red>>
    
  2. You can use it to test rapidly some Red code:

    red>> 1 + 2
    == 3
    
    red>> inc: func [n][n + 1]
    == func [n][n + 1]
    
    red>> inc 123
    == 124
    

Notes:

  • On Windows, the REPL runs by default in GUI mode. To run it in the command line, invoke the red binary as red --cli.
  • Wine has some issues with the GUI-Console. Install the Consolas font to fix the problem.

Running Red from the sources

The compiler and linker are currently written in Rebol. Please follow the instructions for installing the compiler toolchain in order to run it from sources:

  1. Clone this git repository or download an archive (ZIP button above or from tagged packages).

  2. Download a Rebol interpreter suitable for your OS: Windows, Linux (or Linux), Mac OS X, FreeBSD, OpenBSD, Solaris

  3. Extract the rebol binary, put it in root folder, that's all!

  4. Let's test it: run ./rebol, you'll see a >> prompt appear. Windows users need to double-click on the rebol.exe file to run it.

  5. From the REBOL console type:

    >> do/args %red.r "%tests/hello.red"
    

The compilation process should finish with a ...output file size message. The resulting binary is in the working folder. Windows users need to open a DOS console and run hello.exe from there.

To see the intermediary Red/System code generated by the compiler, use:

    >> do/args %red.r "-v 2 %tests/hello.red"

You can also compile the Red console from source:

    >> do/args %red.r "%environment/console/console.red"

Note: the -c argument is not necessary when launching the Red toolchain from sources, as the default action is to compile the input script (the binary form default action is run the input script through the interpretor).

Contributing

If you want to contribute code to the Red project be sure to read the guidelines first.

It is usually a good idea to inform the Red team about what changes you are going to make in order to ensure that someone is not already working on the same thing. You can reach us through the mailing-list or our chat room.

Satisfied with the results of your change and want to issue a pull request on Github?

Make sure the changes pass all the existing tests, add relevant tests to the test-suite and please test on as many platforms as you can. You can run all the tests using (from Rebol console, at repository root):

    >> do %run-all.r

Anti-virus false positive

Some anti-virus programs are a bit too sensitive and can wrongly report an alert on some binaries generated by Red, if that happens to you, please fill a ticket here, so we can report the false positive.

License

Both Red and Red/System are published under BSD license, runtime is under BSL license. BSL is a bit more permissive license than BSD, more suitable for the runtime parts.