C ++ è l'esempio canonico di una lingua che combina le funzioni di basso livello e di alto livello 1 . Non simula nulla, fornisce supporto nativo per quasi tutti i costrutti di alto livello che solitamente trovi in un linguaggio comune di alto livello e quasi tutti i costrutti di basso livello che trovi in C.
Ma ovviamente i termini sono molto relativi, c'era un punto nel tempo (non molto tempo fa 2 ) in cui C era considerato un linguaggio di altissimo livello. E ci sono molti altri linguaggi che offrono considerevoli funzionalità di basso livello mentre sono ancora comunemente considerati di alto livello, e viceversa, le linee sono un po 'sfocate.
Per quanto riguarda la sintassi, è qualcosa che è naturalmente influenzato dal livello di astrazione della lingua. Basso livello significa in generale :
In computer science, a low-level programming language is a programming language that provides little or no abstraction from a computer's instruction set architecture. Generally this refers to either machine code or assembly language. The word "low" refers to the small or nonexistent amount of abstraction between the language and machine language; because of this, low-level languages are sometimes described as being "close to the hardware."
Quindi, naturalmente, un linguaggio di basso livello adotta una sintassi più vicina al codice macchina, che è intrinsecamente non amichevole. Parecchi linguaggi, come C ++, hanno adottato un'ampia varietà di zucchero sintattico , come un meccanismo per rendere le cose più facili da leggere o per esprimere. Ma lo zucchero sintattico è qualcosa che ha optato per quasi tutti i linguaggi di alto livello, lo zucchero del C ++ da solo non lo rende un linguaggio di basso livello.
Per quanto riguarda la complessità di un basso e amp; linguaggio di alto livello, è anche naturale: è uno strumento con più obiettivi, ogni singolo obiettivo si aggiunge alla sua complessità. Questo è inevitabile indipendentemente dall'obiettivo. Le lingue di alto livello non sono "migliori" di quelle di basso livello, sono solo più concentrate su un unico obiettivo. Le lingue progettate con facilità di utilizzo come obiettivo principale tendono ad essere di alto livello, ma ciò è importante solo se i necessari compromessi per raggiungere l'obiettivo non influiscono sulle applicazioni.
Il livello basso o alto non ha molta importanza, le lingue sono principalmente strumenti. Dovresti scegliere quello che meglio si adatta a qualsiasi cosa tu stia costruendo in combinazione con quali abilità hai. Le lingue più diffuse sono multiuso e Turing completo , in teoria sono valide scelte per costruire quasi tutto. Non ci sono assoluti, ovviamente, puoi vincere in alcune aree se opti per un linguaggio di alto livello e in altri se opti per uno di livello inferiore, anche all'interno della stessa applicazione.
La maggior parte delle applicazioni su larga scala si mescolano e si abbinano, seguendo la mentalità del "giusto strumento per il lavoro", e questo è un approccio più efficiente, imho, che cercare di avere la tua torta e mangiarla anche tu.
1 Tuttavia, tieni presente che non esiste una risposta definitiva su ciò che è considerato una funzione di livello strettamente alto e su quella di basso livello.
2 Negli anni umani, negli anni del software era molto tempo fa ...