# Qore (linguagem de programação)

Qore é uma linguagem de programação dinâmica interpretada, de alto nível, de uso geral, com colector de lixo e com capacidade para incorporação de código e isolamento de processos com tipificação forte opcional. Também permite múltiplos fios de execução e escalabilidade de multiprocessamento simétrico (SMP).
A linguagem Qore é única porque é uma linguagem interpretada com capacidade para múltiplos fios de execução (o que significa que mais do que uma parte do mesmo código pode ser executada ao mesmo tempo), tem gestão automática de memória (ou seja, os programadores não precisam de reservar e libertar memória explicitamente), é compatível com o padrão RAII (Aquisição de Recurso é Inicialização) através de destrutores para gestão de recursos baseada em alcance e permite programação com segurança no tratamento de excepções. Isto deve-se à implementação exclusiva de colecta pronta, ou colecta de lixo determinística, da linguagem Qore.

## Scripts Qore

Os scripts Qore têm geralmente as seguintes extensões:
* .q: para scripts Qore
* .qm: para módulos do utilizador Qore
* .qtest: para scripts de teste Qore
Os scripts executáveis Qore em sistemas operativos do tipo Unix começam normalmente com uma linha mágica para especificar a localização do interpretador:
#!/usr/bin/env qore

## Sintaxe

A sintaxe da linguagem Qore é inspirada nas seguintes linguagens de programação, com as quais partilha semelhanças:
* Perl: sem a etiqueta %new-style, a sintaxe da Qore é muito semelhante à do Perl; a expressão foreach, os operadores splice, push, pop, chomp, as expressões regulares compatíveis com Perl5, entre outros
* Java: com a etiqueta %new-style, o código Qore parece-se mais ao do Java; a palavra-chave synchronized, o operador instanceof, a codificação de objectos e classes
* C++: herança múltipla, tratamento de excepções, métodos estáticos, métodos abstractos
* D: as expressões on_exit, on_success, e on_error facultam funcionalidade de reconhecimento de excepções semelhante a scope(exit), scope(failure), permitindo que código de limpeza com reconhecimento de excepções seja colocado junto ao código que precisa de limpeza
* Haskell: os operadores map, foldl, foldr, e select

## Tipos de dados

Os tipos básicos incluem: boolean, string, integer, float, date, binary, list, hash (vectores associativos), e object, bem como code para código usado como tipo de dados.

## Múltiplos fios de execução

Apesar de ser uma linguagem interpretada, a Qore foi concebida para permitir múltiplos fios de execução como princípio fundamental de desenho. Todos os elementos da Qore são seguros do ponto de vista dos fios de execução e, em geral, a linguagem foi concebida tendo em vista a escalabilidade de multiprocessamento simétrico (SMP). Uma vez que todos os elementos da linguagem foram feitos para permitir múltiplos fios de execução, os programas e scripts da Qore não têm de se limitar a um subconjunto das funcionalidades da Qore, razão pela qual também não há um trinco de interpretador global.
A funcionalidade de fios de execução na linguagem Qore é facultada pela biblioteca de fios de execução POSIX (POSIX Threads) do sistema operativo.

## Colecta de lixo

A linguagem Qore tem uma abordagem única de colecta de lixo chamada colecta pronta, que permite que os destrutores corram assim que os objectos saiam do alcance, mesmo que tenham referências recursivas para si mesmos. Isto permite que a Qore seja compatível com o padrão RAII bem como gestão de memória automática com colecta de lixo.

## Incorporação de código e isolamento de processos

A Qore foi concebida para permitir a lógica de incorporação e isolamento de processos nas aplicações; isto aplica-se também quer às aplicações escritas na linguagem Qore, quer às aplicações que usam a API pública de C++ da biblioteca da Qore. Ao usar a classe Program, que representa um contentor lógico com controlos de isolamento de processos, objectos discretos podem ser criados e destruídos em tempo de execução contendo código incorporado para estender ou modificar o comportamento da aplicação como o utilizador desejar.

## Biblioteca de tempo de execução

A biblioteca de tempo de execução da Qore permite mapeamento de dados, API para comunicação com bases de dados (incluindo API de alto nível para operações SQL, gestão de esquemas e operações de administração de base de dados), API clientes e implementações de infraestrutura de servidores para muitos protocolos, incluindo HTTP, REST, WebSocket, chamadas de procedimento remoto (RPC) e muitos protocolos de formato de ficheiros e de intercâmbio de dados e de ficheiros.

## Testes

A Qore permite testes através do módulo QUnit que facilita os processos de testes automáticos e integração contínua para o código escrito em linguagem Qore.

## Disponibilidade

O repositório Git da Qore está alojado no GitHub Os pacotes binários estão disponíveis em RPM, MacPorts e em FreeBSD Ports, assim como para outros sistemas operativos, incluindo o Microsoft Windows. O sítio colaborativo da Qore tem mais informação (em inglês) na secção General Source and Download Info.