Red — это язык программирования, разработанный для преодоления ограничений языка программирования Rebol . [3] Red был представлен в 2011 году Ненадом Ракочевичем, [4] и является как императивным , так и функциональным языком программирования. Его синтаксис и общее использование совпадают с синтаксисом и общим использованием интерпретируемого языка Rebol. [5]
Выбор реализации Red направлен на создание языка программирования полного стека : [4] [6] Red может использоваться для программирования крайне высокого уровня ( DSL и GUI ), а также для программирования низкого уровня ( операционные системы и драйверы устройств ). Ключевым моментом подхода является то, что язык состоит из двух частей: Red/System и Red . [7]
if x > y [print "Hello"]
if (x > y) {printf("Hello\n");}
Red стремится оставаться независимым от любого другого набора инструментов ; он сам генерирует код. [3] Поэтому можно кросс-компилировать [6] программы Red с любой поддерживаемой платформы на любую другую с помощью переключателя командной строки. И Red, и Red/System распространяются как программное обеспечение с открытым исходным кодом по измененной лицензии BSD . Библиотека времени выполнения распространяется по более либеральной лицензии Boost Software License .
Начиная с версии 0.6.4 Red включает в себя сборщик мусора «Simple GC». [9]
Red был представлен в Нидерландах в феврале 2011 года на конференции Rebol & Boron [10] его автором Ненадом Ракочевичем. В сентябре 2011 года язык программирования Red был представлен более широкой аудитории во время Дня свободы программного обеспечения 2011. [11] [12] Ракочевич — давний разработчик Rebol, известный как создатель HTTP-сервера Cheyenne . [13]
Синтаксис и семантика Red очень близки к Rebol . [4] [14] Как и Rebol, он активно поддерживает метапрограммирование и предметно-ориентированные языки ( DSL ) и поэтому является высокоэффективным инструментом для диалектизации (создания встроенных DSL). Red включает диалект под названием Red/System, язык уровня C, который предоставляет возможности системного программирования. [7] Red легко интегрируется с другими инструментами и языками в виде DLL (libRed) и очень легкий (около 1 МБ). Он также может кросс-компилироваться для различных платформ (см. раздел «Кросс-компиляция» ниже) и создавать пакеты для платформ, которым они требуются (например, .APK на Android). [7] Red также включает полностью реактивную кросс-платформенную систему GUI, основанную на базовом движке реактивного потока данных, диалект 2D-рисования, сопоставимый с SVG, поддержку макросов во время компиляции и выполнения и более 40 стандартных типов данных.
Ниже приведен список целей Реда, представленный в День свободы программного обеспечения 2011 года: [11] [12]
В настоящее время на Red разрабатываются следующие коммерческие приложения:
Разработку Red планируется осуществить в два этапа:
В настоящее время Red поддерживает следующие цели кросс-компиляции: [4]
(Примечание: в настоящее время приложения Red являются 32-битными, но в будущем планируется переход на 64-битную версию. [4] )
Программа «Hello, World!» в красном:
Красный [ Название: "Простой скрипт Hello World" ] напечатайте "Hello, World!"
ВАЖНО: Это примеры синтаксиса. Пока Red не получит поддержку 64-битной архитектуры , пример целого числа очень быстро переполнит 32-битное целое число. Изменение на `float!` позволит продвинуться дальше, но они просто показывают синтаксис языка.
Ниже приведен пример факториала в красном цвете:
Красный [ Название: «Факториальный скрипт» ] ; Примечание: Название необязательно.factorial: func [ x [ integer! ] ; Указание типа аргумента в Red необязательно ][ либо x = 0 [ 1 ][ x * factorial x - 1 ] ]
Ниже приведен тот же пример факториала в Red/System (в этом очень простом случае исходный код очень похож на версию Red):
Красный /Система [ Название: "Факториальный скрипт" ]factorial: func [ x [ integer! ] ; Это обязательно в Red/System return: [ integer! ] ; Это обязательно в Red/System ][ либо x = 0 [ 1 ][ x * factorial x - 1 ] ]
Основная функция 0.6.4 — это то, что мы называем Simple GC (Garbage Collector). Более продвинутый GC планируется в будущем