Meilleure réponse
Cela dépend de ce que vous entendez par «programmation système» et «meilleur».
Par exemple, ATS (http://www.ats-lang.org/) peut répondre à tous vos critères et plus encore – cest « un langage sûr avec des fonctionnalités de concurrence de haut niveau, la prise en charge mais pas le mandat dun style, et de très bonnes performances. Même si cest lun des meilleurs sur papier, ce nest peut-être pas « meilleur », car il ny a pas assez de gens qui lutilisent et il semble « différent ».
Dans lautre sens, C est horrible pour diverses raisons. La gestion manuelle de la mémoire est une énorme source de bogues et encore plus difficile à corriger dans un contexte simultané. En restant conceptuellement proche du métal, vous navez pas la possibilité de abstrait de manière à vous permettre de produire du code de travail plus rapidement, et il vous encourage à écrire les choses à un niveau difficile à paralléliser. Dun autre côté, cest peut-être le meilleur langage de programmation système si vous avez besoin de fonctionner sur du matériel où les autres compilateurs sont rares, ou si vous avez besoin dembaucher des programmeurs du noyau.
Bien que cela me fasse mal de le dire, parce que je suis fondamentalement en désaccord avec plusieurs aspects de sa conception, vous pouvez jeter un œil à Go. Il semble que leurs critères de conception correspondent assez bien à vos exigences.
Réponse
Il semble que ce que vous recherchez soit un «langage» qui vous donne à la fois des abstractions pour ne pas avoir à vous inquiéter sur les subtilités impliquées (cest-à-dire pas besoin de créer une concurrence à partir de zéro), mais aussi dêtre performant et économique en ressources. Et comme cest la tâche du système, il devrait être en mesure de se lier directement à tout le matériel. Donc, vous voulez quelque chose où la plupart des tâches lourdes sont déjà réglées (soit dans les idiomes du langage, soit dans les bibliothèques disponibles, ou peut-être les deux). Il faudrait également un compilateur natif au lieu dune VM.
Si cela est le cas, je ne suis certainement pas sûr du « meilleur ». Il existe de nombreuses alternatives, même la plupart des petits groupes que je connais. Si vous voulez « vraiment » arriver au « meilleur », vous devez générer une liste de toutes les langues – sans aucune idée préconçue. Ensuite, commencez à affiner par omission – ie passez en revue toutes les exigences et omettez (ou du moins déplacez-vous plus bas dans la liste) celles où le langage (ou ses outils) sont moins que suffisants pour lexigence.
Les exigences dabstraction supprimeraient très probablement C et son acabit dans la liste, peut-être que les nouvelles mises à jour de C ++ le maintiennent toujours en marche.
Toutes les VM échoueraient probablement sous un aspect ou un autre (notez pas nécessairement mais vous auriez besoin dun moyen de fabrication / conversion dau moins des parties de celui-ci en natif). Donc, ceux Java / PVM / DotNet / etc. une famille de langues peut également être omise.
Les liens matériels peuvent en supprimer un certain nombre, mais notez qu’il n’est pas impossible d’utiliser plus d’une langue (ou famille de langues) pour se déplacer cette exigence. Par exemple, il est même impossible d’utiliser C pour toute la pile de tâches système – au moins certaines des parties de démarrage de tous les systèmes sont écrites en assemblage, puis de nombreux systèmes sont écrits à un niveau plus élevé au-dessus du Portions « C ». Dans la plupart des cas, il sagit simplement dutiliser ce qui est déjà fait et / ou dy ajouter en utilisant le mieux adapté aux endroits où ils sintègrent. Donc vous pouvez probablement (dans le même esprit) obtenir une bibliothèque / un « plugin » qui permet à nimporte quelle langue daffecter directement le matériel. La question de savoir si cela supprime alors des choses comme les performances ou l’économie des ressources est une autre question qui nécessiterait des tests et une réflexion combinée alternative (par exemple, créez-vous une routine d’accès au disque atomique en C qui est appelée à partir d’un «thread» d’acteur en Lisp et peut entraîner une surcharge chaque appel atomique utilise ses propres ressources et éventuellement les performances sont perdues à cause des appels CFFI).
Et puis léléphant blanc (et la principale raison pour laquelle C est si omniprésent) sont des exemples: cest beaucoup plus difficile pour essayer quelque chose dans un autre langage où les échantillons sont difficiles à trouver ou même inexistants. Il est toujours extrêmement difficile dêtre le premier à le faire plutôt que de faire la même chose, seulement « à votre façon ».
Si vous suivez cette voie, vous « élimineriez probablement très rapidement de gros morceaux de cette énorme liste de langues. Laction la plus fastidieuse serait détudier chaque langue pour savoir comment elle se compare aux autres pour chacune des exigences. Cest pourquoi la plupart ne sembêteraient pas et restez avec quelque chose comme C même si (à long terme) cela peut signifier quils « seraient capables de faire quelque chose de » mieux « plus rapidement.