Les HLL nous donnent la capacité d'utiliser l'abstraction pour construire des algorithmes dans une représentation proche de l'anglais.
Il existe des critères utilisés pour sélectionner le HLL approprié aux tâches requises. Ceux-ci peuvent inclure l'extensibilité, le coût, la flexibilité, l'efficacité, la portabilité et la maintenabilité.
Les HLL sont conçus pour remplir un objectif, qui peut être généraliste, orienté web, orienté objet ou orienté programmation parallèle, entre autres.
Les HLL sont livrés avec des interfaces de programmation d'applications (API) qui contiennent des outils et des objets utiles pour les programmer en fonction de leur objectif.
Les HLL ont différentes approches d'implémentation. Celles-ci varient de compilées à interprétées en passant par hybrides.
Les IDE sont des environnements structurés contenant des outils ciblés pour la programmation de différents HLL.
Tous les HLL ont des types de données, soit primitifs, soit complexes, qui forment le domaine des types de données légaux qu'ils reconnaissent.
Tous les HLL ont des opérateurs qui représentent l'ensemble légal des opérations pouvant être effectuées sur les types de données, telles que l'addition ou l'affectation.
Les HLL prennent en charge les variables, appelées conteneurs, qui peuvent contenir les valeurs légales des types de données HLL et les littéraux, qui sont une représentation en langage clair de ces valeurs.
Les HLL ont des règles pour les identifiants, qui sont des noms définis par l'utilisateur pour des éléments du langage tels que les variables, les constantes et les fonctions.
Les HLL permettent la documentation, généralement sous forme de commentaires, afin que les programmeurs connaissent un programme.
Les HLL fournissent des structures de données, telles que les tableaux, qui sont des conteneurs pour stocker plusieurs valeurs.
Les HLL ont des constructions pour le flux de contrôle qui dictent le chemin d'exécution du code, généralement des instructions conditionnelles et des constructions d'itération.
Les HLL fournissent les moyens de modulariser, généralement sous la forme de fonctions.
Une pile d'appels ou pile d'exécution est la structure de données qui contrôle l'exécution d'un programme.
La plupart des HLL fournissent les moyens de gérer et de récupérer des erreurs d'exécution, un processus appelé gestion des exceptions.
Les HLL peuvent gérer les entrées et sorties interactives de l'utilisateur ainsi que celles des fichiers.
La programmation fonctionnelle est un paradigme de langage déclaratif où les programmes sont construits en composant et en appliquant des fonctions ; certaines de ses caractéristiques sont implémentées dans des langages impératifs.
La programmation orientée objet (POO) est un paradigme basé sur les classes et les objets et est largement implémentée dans de nombreux HLL.
Le degré de support de l'encapsulation, de l'héritage et du polymorphisme est indicatif du degré d'orientation objet d'un HLL.
La concurrence est le comportement d'un HLL lorsqu'il peut exécuter des sections de son propre code en multitâche, donnant l'illusion d'une exécution simultanée.
Le parallélisme est le comportement d'un HLL lorsqu'il peut exécuter simultanément des sections de son propre code, nécessitant plusieurs cœurs ou processeurs.
Les langages de script sont des HLL qui sont généralement interprétés mais conservent de nombreuses fonctionnalités des langages compilés et sont souvent utilisés pour la programmation web.
Les compilateurs sont l'outil général utilisé pour implémenter le processus de traduction du code source vers un autre langage qui est soit du langage machine, soit plus proche du langage d'assemblage.
Les interpréteurs suivent les mêmes processus que les compilateurs avec des différences dans le timing des phases de traduction.
Le processus de compilation est divisé en étapes distinctes : un frontal (analyse de code), une partie médiane optionnelle (optimisation de code) et un dorsal (génération de code). Ces tâches peuvent être effectuées en seulement deux étapes : frontal et dorsal.
De nombreux compilateurs génèrent du langage d'assemblage soit comme leur sortie (nécessite un assemblage séparé), soit comme la sortie d'une étape (assemblage effectué dans le cadre de la compilation).
Un éditeur de liens ou chargeur-éditeur de liens est utilisé pour assembler des morceaux de code compilés séparément pour l'exécution finale.
La gestion de l'exécution est gérée par un système d'exécution qui est très conscient de la fonctionnalité du compilateur afin de permettre l'utilisation de fonctionnalités telles que le ramasse-miettes, la gestion des exceptions, et la concurrence ou le parallélisme.
La gestion de l'exécution peut être gérée par des machines virtuelles qui fournissent des environnements d'exécution qui sont des émulations de l'architecture informatique.
L'optimisation de code et l'amélioration de code sont des caractéristiques hautement souhaitables de l'implémentation de programme.