Bästa svaret
Det beror på vad du menar med ”systemprogrammering” och ”bäst”.
Till exempel kan ATS (http://www.ats-lang.org/) uppfylla alla dina kriterier och mer – det är ett säkert språk med funktioner på hög nivå samtidigt, stöd för men inte mandat för en funktionell stil och mycket bra prestanda. Även om det är en av de bästa på pappret kanske det inte är ”bäst”, för det finns inte tillräckligt många som använder det och det verkar ”annorlunda.”
I den andra riktningen är C fruktansvärt av olika skäl. Manuell minneshantering är en enorm källa till buggar och ännu svårare att få rätt i en samtidigt inställning. Genom att hålla sig konceptuellt nära metallen lämnar den dig utan förmågan att abstrakt på sätt som låter dig producera arbetskod snabbare, och det uppmuntrar dig att skriva saker på en nivå som är svår att parallellisera. Å andra sidan kan det vara det bästa systemprogrammeringsspråket om du behöver köra på hårdvara där andra kompilatorer är knappa, eller om du behöver anställa kärnprogrammerare.
Även om det är ont om jag säger det, eftersom jag i princip inte håller med om flera aspekter av dess design, kanske du vill titta på Go. Det verkar som om deras designkriterier stämmer ganska bra med dina krav.
Svar
Det verkar som vad du letar efter är ett ”språk” som båda ger dig abstraktioner för att inte behöva oroa dig om de inblandade inblandningarna (dvs inget behov av att bygga upp samtidighet från grunden), men ändå vara högpresterande och resursekonomiska. Och eftersom det är ett system, bör det kunna länka direkt till all hårdvara. Så du vill något där de flesta tunga lyft redan är ordnade (antingen i språket eller i tillgängliga bibliotek eller kanske båda). Det skulle också behöva en inbyggd kompilator istället för en virtuell dator.
Om detta är fallet jag är definitivt inte säker på ”bäst”. Det finns många alternativ, till och med många av den lilla gruppen jag känner till. Om du ”verkligen” vill komma till det ”bästa” behöver du skapa en lista med alla språk – utan några förutfattade åsikter. Börja sedan förfina genom att utelämna – dvs. gå igenom alla krav och utelämna (eller åtminstone gå lägre i listan) de där språket (eller dess verktyg) är mindre än tillräckligt för kravet.
Abstraktionskraven skulle troligen ta bort C och från bilden, kanske de nya uppdateringarna till C ++ fortfarande håller den igång.
Alla VM-baserade skulle troligen misslyckas i någon eller annan aspekt (notera inte nödvändigtvis men du skulle behöva något sätt tillverkning / omvandling av åtminstone delar därav till nativ). Så de Java / PVM / DotNet / etc. språkfamiljen kan antagligen också utelämnas.
Hårdvarulänkar kan ta bort en hel del, men observera att det inte är omöjligt att använda mer än ett språk (eller en familj av språk) för att komma runt detta krav. Exempelvis är det till och med omöjligt att använda C för hela stacken av systemuppgifter – åtminstone några av startdelarna i alla system är skrivna i montering, och dessutom skrivs många system i högre nivå ovanför ”C” -delar. I de flesta fall är det en situation att bara använda det som redan gjorts och / eller lägga till det med det bättre lämpade för de platser där de passar in. Så du kan antagligen (i samma riktning) få lite bibliotek / ”plugin” vilket gör att alla språk kan påverka hårdvaran direkt. Huruvida detta tar bort saker som prestanda eller resursekonomi är en annan sak som skulle behöva testas och alternativa kombinationstänkande (t.ex. gör du en atomisk skivåtkomstrutin i C som kallas från en skådespelare ”tråd” i Lisp och eventuellt ådra sig omkostnader som varje atomanrop använder sina egna resurser och möjligen går prestanda förlorad på grund av CFFI-samtalen).
Och då är den vita elefanten (och den främsta anledningen till att C är så allestädes närvarande) exempel: Det är mycket svårare att prova något på något annat språk där prover är svåra att hitta eller till och med obefintliga. Det är alltid extremt svårt att vara den första som gör det snarare än att bara göra samma sak, bara ”på ditt sätt”.
Om du går den här vägen skulle du förmodligen snabbt eliminera stora bitar av den enorma listan med språk. Den mest tidskrävande åtgärden är dock att undersöka varje språk för att ta reda på hur det mäter mot andra för varje krav. Det är därför de flesta inte skulle bry sig och bara hålla fast vid något som C även om det (i det långa loppet) kan betyda att de ”skulle kunna göra något” bättre ”snabbare.