# REBOL

REBOL (Relative Expression Based Object Language ) é uma linguagem de programação multi-plataforma, multiparadigma, de intercâmbio de dados e dinâmica concebida originalmente por Carl Sassenrath para comunicações de rede e computação distribuída.
REBOL introduz o conceito de dialetos: pequena, otimizada, linguagem de domínio específico para o código e dados, que também é a propriedade mais notável do idioma de acordo com seu criador:
- Carl Sassenrath
REBOL tem sido usada para programar aplicações para a Internet tanto do lado do cliente quanto do lado do servidor, aplicações em bancos de dados, software utilitários e aplicações de multimídia.

## História

Primeiramente lançado em 1997, REBOL foi concebido durante um período de 20 anos por Carl Sassenrath, o arquiteto e principal desenvolvedor do AmigaOS, com base em seu estudo de semântica denotacional e utilizando conceitos de programação Lisp, Forth, Logo e Self.
REBOL 2, o interpretador, que se tornou o núcleo das edições estendidas dos interpretadores, foi lançado em 1999.
REBOL/Command, que acrescentou a criptografia forte e acesso a ODBC, foi lançado em Setembro de 2000.
REBOL/View foi lançado em abril de 2001, acrescentando capacidades gráficas em cima do núcleo da linguagem.
REBOL/IOS, um ambiente de colaboração extensível construído com REBOL foi lançado em agosto de 2001.
REBOL/SDK, fornecendo opções de kernels para ir contra vinculações, bem como um pré-processador, foi lançado em Dezembro de 2002.
REBOL 3, a versão mais recente do interpretador REBOL, está atualmente em desenvolvimento. Versões alpha estão sendo liberados ao público desde Janeiro de 2008.

## Dialetos

Os dialetos REBOL, hoje populares como linguagens de domínio específico, são micro-linguagens otimizadas para uma finalidade específica. Dialetos podem ser usados para definir regras de negócio, interfaces gráficas ou seqüências de painéis durante a instalação de um programa. Os usuários podem definir seus próprios dialetos, reutilizando quaisquer palavras REBOL existentes e dando-lhes um significado específico nesse dialeto. Dialetos são linguagens interpretadas por funções de processamento de blocos REBOL de uma maneira específica.
Um exemplo das habilidades de dialetos de REBOL pode ser visto com a palavra return. No data exchange dialect (dialeto de troca de informações) return é apenas uma palavra, não tendo qualquer significado específico. No dialeto do dialect (dialeto de fazer), return é uma variável global referindo-se a uma função nativa passando de volta o valor resultante da função. no visual interface dialect (VID), return é uma palavra reservada fazendo com que o mecanismo de layout, simule um carriage return, movendo a "caneta de renderização" até o início da próxima linha.
O interpretador REBOL com capacidades gráficas tem de compreender e interpretar um grupo de dialetos para realizar sua tarefa. A tabela abaixo apresenta as mais importantes em ordem de importância
| Nome do dialeto | Interpretado por | Propósito |
| Dialeto para troca de dados | | representa os dados e metadados; plataforma comum de dialetos REBOL |
| Dialeto Do | função do | programação |
| Dialeto Parse | função parse | pattern matching |
| Dialeto de especificação de funções | função make | Definição de funções; programação funcional |
| Dialeto de especificação de objetos | função make | Definição/herança de objetos; programação baseada em protótipos |
| Dialeto interface visual (VID) ou RebGUI | função layout ou função display | especifica graphical user interface |
| Dialeto de desenho | função view | define elementos gráficos (linhas, polígonos, etc.) |
| Dialeto para especificação de scripts | função do | definição de scripts |
| Dialeto para políticas de segurança | função secure | especifica políticas de segurança |

## Sintaxe

A sintaxe da REBOL é de formato livre, não exigindo posicionamento específico. No entanto, a indentação é recomendada para melhor transmitir a estrutura do texto para leitores humanos.
As propriedades sintáticas de dialetos diferentes podem ser diferentes. A plataforma comum para todos os dialetos REBOL é o dialeto de troca de dados; outros dialetos são geralmente derivados a partir dele. Além de ser uma plataforma comum para todos os dialetos, o dialeto de troca de dados é usado diretamente para representar os dados e metadados, preencher estruturas de dados, enviar dados através de Internet, e salvá-los no armazenamento de dados.
Diferentemente de C ou outras linguagens de programação o dialeto de troca de dados não é constituído por declarações, comandos, expressões ou palavras-chave. Um dialeto de troca de dados válido de fluxo de texto é uma estrutura de dados em árvore que consiste em blocos (o bloco da raiz está implícito, subblocos são delimitados por colchetes), tipos parens (delimitados por parêntesis), strings (delimitadas por aspas ou chaves adequados para strings multi-linhas; notação com Acento circunflexo é usada para caracteres não imprimíveis), url's, endereços de e-mail, arquivos, trilhas ou outros valores compostos. Ao contrário dos blocos ALGOL, os blocos REBOL são valores compostos semelhantes aos citados expressões-s do Lisp.
Blocos, bem como parens podem conter outros valores compostos (Um bloco pode conter subblocos, parens, strings, ...) ou valores escalares como palavras, palavras tipo set-words (palavras com sufixo de dois pontos), palavras tipo get-words (palavras prefixadas por dois pontos), palavras tipo lit-words (palavras prefixadas por apóstrofes), números, moeda, caracteres, etc, separados por espaços em branco. Note que os caracteres especiais são permitidos em palavras, por isso a+b é uma palavra ao contrário de a + b, que é uma seqüência de três palavras separadas por espaços.
Comentários podem aparecer após um ponto e vírgula até o fim da linha.