Qore (linguaggio di programmazione) - Qore (programming language)
| Paradigma | multi-paradigma : thread-safe / parallela / memoria condivisa , funzionale , imperativo , orientato agli oggetti ( basato sulle classi ), procedurale , funzionale |
|---|---|
| Progettato da | David Nichols |
| Sviluppatore | David Nichols |
| Rilascio stabile |
0.9.4.2
/ 27 marzo 2020
|
| Disciplina di digitazione | Dinamico, opzionalmente forte |
| Linguaggio di implementazione | C++ , Pthread |
| OS | Multipiattaforma |
| Licenza | Licenza MIT , GNU General Public License , GNU Lesser General Public License |
| Estensioni dei nomi dei file |
.q, .qm,.qtest
|
| Sito web | www |
| Influenzato da | |
| Perl , D , C++ , Java | |
Qore è un linguaggio di programmazione dinamico interpretato , di alto livello , di uso generale , con raccolta di rifiuti , con supporto per l'incorporamento di codice e il sandboxing con tipizzazione forte opzionale e un focus sul supporto fondamentale per il multithreading e la scalabilità SMP.
Qore è unico perché è un linguaggio di scripting interpretato con supporto fondamentale per il multithreading (il che significa che più di una parte dello stesso codice può essere eseguita contemporaneamente) e inoltre perché è dotato di gestione automatica della memoria (il che significa che i programmatori non devono allocare e memoria libera in modo esplicito) supportando anche l' idioma RAII con distruttori per la gestione delle risorse basata sull'ambito e la programmazione sicura dalle eccezioni . Ciò è dovuto all'implementazione unica della raccolta di prompt di Qore per la garbage collection .
Script Qore
Gli script Qore hanno in genere le seguenti estensioni:
-
.q: per gli script Qore -
.qm: per moduli utente Qore -
.qtest: per gli script di test Qore
Gli script eseguibili Qore su sistemi operativi simili a Unix inizieranno in genere con un hashbang per specificare il nome del file dell'interprete come segue:
#!/usr/bin/env qore
Sintassi
La sintassi di Qore è simile e ispirata ai seguenti linguaggi di programmazione:
-
Perl : senza
%new-style, la sintassi di Qore è molto simile a Perl ; leforeachdichiarazioni,splice,push,pop,chompgli operatori, le espressioni regolari compatibili con Perl5, e altro ancora -
Java : con
%new-style, il codice Qore sembra più simile a Java ; lasynchronizedparola chiave, l'instanceofoperatore, l'implementazione dell'oggetto e della classe - C++ : ereditarietà multipla, gestione delle eccezioni, metodi statici, metodi astratti
-
D : le istruzioni
on_exit,on_success, eon_errorforniscono funzionalità di riconoscimento delle eccezioni simili a D'sscope(exit),scope(failure), consentendo di posizionare il codice di pulizia sensibile alle eccezioni accanto al codice che richiede la pulizia -
Haskell : i
map,foldl,foldr, eselectoperatori con valutazione pigra degli operatori funzionali e degli elenchi e delle dichiarazioni
Tipi di dati
I tipi di base includono: boolean, string, integer, float, date, binary, list, hash(array associativi) e object, nonché il codice codeper il codice utilizzato come tipo di dati.
Sono supportati anche tipi complessi come hash<string, bool>, list<string>, reference<list<string>>nonché hash type-safe .
Multithreading
Nonostante sia un linguaggio interpretato, Qore è stato progettato per supportare il multithreading come principio di progettazione fondamentale. Tutti gli elementi di Qore sono thread-safe e il linguaggio in generale è stato progettato tenendo presente la scalabilità SMP. Poiché tutti gli elementi del linguaggio sono stati progettati per supportare il multithreading, i programmi e gli script Qore non devono limitarsi a un sottoinsieme delle funzionalità di Qore, motivo per cui non esiste un blocco dell'interprete globale in Qore.
La funzionalità di threading in Qore è fornita dalla libreria di thread POSIX del sistema operativo .
Raccolta dei rifiuti
Qore offre un approccio unico alla raccolta dei rifiuti chiamato raccolta di prompt che consente di eseguire immediatamente i distruttori quando gli oggetti escono dall'ambito, anche se hanno riferimenti ricorsivi a se stessi. Ciò consente a Qore di supportare l' idioma RAII e di eseguire anche la gestione automatica della memoria raccolta inutilizzata.
Supporto per l'incorporamento del codice e il sandboxing
Qore è stato progettato per supportare la logica di incorporamento e sandboxing nelle applicazioni; questo vale anche per le applicazioni scritte in Qore e per le applicazioni che utilizzano l'API C++ pubblica della libreria Qore. Utilizzando la Programclasse che rappresenta un contenitore logico con controlli sandbox, è possibile creare e distruggere oggetti discreti in fase di esecuzione contenenti codice incorporato per estendere o modificare il comportamento dell'applicazione in modi definiti dall'utente.
Libreria di runtime
La libreria di runtime standard di Qore supporta la mappatura dei dati, le API per la comunicazione con i database (incluse le API di alto livello per le operazioni SQL, la gestione dello schema e le azioni DBA), le API client e le implementazioni dell'infrastruttura server per molti protocolli inclusi HTTP , REST (con convalida dello schema REST/ la generazione di codice compresa Swagger supporto), client / server SOAP supporto (compreso il codice e la generazione del messaggio), WebSocket , protocolli RPC , API connettore generici , le API di mappatura dei dati generici , e molti formati di file e protocolli di file e di scambio dati e altro ancora.
test
Qore supporta i test tramite il modulo QUnit che facilita i test automatizzati e i processi di integrazione continua per il codice scritto in Qore.
Disponibilità
Il repository Git (software) di Qore è ospitato su GitHub . I pacchetti binari sono disponibili come RPM , in MacPorts e in FreeBSD Ports così come per altri sistemi operativi, incluso Microsoft Windows ; vedere Informazioni generali sulla fonte e sul download sul wiki di Qore per ulteriori informazioni.
Riferimenti
link esterno
- Sito ufficiale
- Wiki di Qore ( github.com )
- Qore per il programmatore Perl ( houston.pm.org )
- openSUSE ( software.opensuse.org )
- NetBSD ( ftp.netbsd.org )
- FreeBSD ( portsmon.freebsd.org )