Migliore risposta
Dipende da cosa intendi per “programmazione di sistema” e “migliore”.
Ad esempio, ATS (http://www.ats-lang.org/) può soddisfare tutti i tuoi criteri e altro ancora: “è un linguaggio sicuro con funzionalità di concorrenza di alto livello, supporto ma non mandato di una funzionalità stile e prestazioni molto buone. Anche se è uno dei migliori sulla carta, potrebbe non essere “il migliore”, perché non ci sono abbastanza persone che lo usano e sembra “diverso”.
Nellaltra direzione, C è orribile per una serie di motivi. La gestione manuale della memoria è unenorme fonte di bug e ancora più difficile da correggere in un ambiente simultaneo. Rimanendo concettualmente vicino al metallo, ti lascia senza la possibilità di astratto in modi che ti consentono di produrre codice funzionante più velocemente e ti incoraggia a scrivere cose a un livello difficile da parallelizzare. Daltra parte, potrebbe essere il miglior linguaggio di programmazione di sistemi se è necessario eseguire su hardware in cui gli altri compilatori sono scarsi o se è necessario assumere programmatori del kernel.
Anche se mi fa male dirlo, poiché sono fondamentalmente in disaccordo con diversi aspetti del suo design, potresti dare unocchiata a Go. Sembra che i loro criteri di progettazione siano abbastanza in linea con le tue esigenze.
Risposta
Sembra che quello che stai cercando sia un “linguaggio” che ti dà entrambe le astrazioni di cui non devi preoccuparti sulle complessità coinvolte (cioè non cè bisogno di costruire la concorrenza da zero), ma anche ad alte prestazioni ed economico in termini di risorse. E poiché è un compito di sistema dovrebbe essere in grado di collegarsi direttamente a tutto lhardware. qualcosa in cui la maggior parte del lavoro pesante è già risolto (o negli idiomi della lingua o nelle librerie disponibili, o forse entrambi). Inoltre, sarebbe necessario un compilatore nativo invece di una VM.
Se questo è il caso in cui non sono assolutamente sicuro del “migliore”. Ci sono molte alternative, anche molte del piccolo gruppo che conosco. Se vuoi “veramente” ottenere il “meglio” devi generare un elenco di tutte le lingue – senza preconcetti. Quindi inizia a raffinare per omissione – ad es. passare attraverso tutti i requisiti e omettere (o almeno spostarsi più in basso nellelenco) quelli in cui il linguaggio (oi suoi strumenti) non sono adeguati al requisito.
I requisiti di astrazione molto probabilmente rimuoverebbero C e è simile alla lista, forse i nuovi aggiornamenti a C ++ lo mantengono ancora in esecuzione però.
Tutto basato su VM probabilmente fallirebbe in un aspetto o nellaltro (nota non necessariamente ma avresti bisogno di un modo di fare / convertire almeno porzioni di esso in nativo). Quindi quelli Java / PVM / DotNet / ecc. anche la famiglia di linguaggi può essere probabilmente omessa.
I collegamenti hardware possono rimuoverne parecchi, sebbene si noti che non è impossibile usare più di una lingua (o famiglia di lingue) per spostarsi questo requisito. Ad esempio, è persino impossibile usare C per lintero stack di attività di sistema – almeno alcune delle parti di avvio in tutti i sistemi sono scritte in assembly, e poi molti sistemi sono scritti in più alto livello sopra il Porzioni “C”. Nella maggior parte dei casi è una situazione in cui si usa semplicemente ciò che è già stato fatto e / o si aggiunge ad esso usando il più adatto per quei posti in cui si adattano. Quindi si può probabilmente (allo stesso modo) ottenere qualche libreria / “plugin” che consente a qualsiasi lingua di influenzare direttamente lhardware. Se questo rimuove cose come le prestazioni o leconomia delle risorse è una questione diversa che richiederebbe test e un pensiero di combinazione alternativo (ad es. Crei una routine di accesso al disco atomico in C che viene chiamata da un attore “thread” in Lisp e forse incorrere in overhead come ogni chiamata atomica utilizza le proprie risorse e probabilmente le prestazioni vengono perse a causa delle chiamate CFFI).
E poi lelefante bianco (e il motivo principale per cui C è così onnipresente) sono esempi: è molto più difficile provare qualcosa in qualche altra lingua in cui i campioni sono difficili da trovare o addirittura inesistenti. È sempre estremamente difficile essere i primi a farlo invece di fare semplicemente la stessa cosa, solo “a modo tuo”.
Se segui questa strada, probabilmente elimineresti molto rapidamente grossi pezzi di quellenorme elenco di lingue. Lazione che richiede più tempo sarebbe quella di indagare su ciascuna lingua per scoprire come si confronta con le altre per ciascuno dei requisiti. Questo è il motivo per cui la maggior parte non si preoccuperebbe e attenersi a qualcosa come C anche se (a lungo termine) potrebbe significare che “sarebbero in grado di fare qualcosa di” migliore “più velocemente.