La mejor respuesta
Depende de lo que quieras decir con «programación de sistemas» y «mejor».
Por ejemplo, ATS (http://www.ats-lang.org/) puede cumplir con todos sus criterios y más: es un lenguaje seguro con características de simultaneidad de alto nivel, soporte pero no mandato de una función estilo y muy buen rendimiento. Incluso si es uno de los mejores en papel, puede que no sea el «mejor», porque no hay suficientes personas usándolo y parece «diferente».
En la otra dirección, C es terrible por una variedad de razones. La administración manual de la memoria es una gran fuente de errores y aún más difícil de corregir en un entorno concurrente. Al permanecer conceptualmente cerca del metal, te deja sin la capacidad de abstracto de manera que le permite producir código de trabajo más rápido y le anima a escribir cosas a un nivel que es difícil de paralelizar. Por otro lado, puede ser el mejor lenguaje de programación de sistemas si necesita ejecutar en hardware donde otros compiladores son escasos, o si necesita contratar programadores de kernel.
Si bien me duele decirlo, Debido a que fundamentalmente no estoy de acuerdo con varios aspectos de su diseño, es posible que desee echar un vistazo a Go. Parece que sus criterios de diseño se alinean bastante bien con sus requisitos.
Respuesta
Parece que lo que busca es un «lenguaje» que le brinde abstracciones para que no tenga que preocuparse sobre las complejidades involucradas (es decir, no es necesario crear simultaneidad desde cero), pero también tener un alto rendimiento y un ahorro de recursos. Y debido a que es una tarea del Sistema, debería poder vincularse directamente a todo el hardware. algo en lo que la mayor parte del trabajo pesado ya está resuelto (ya sea en los modismos del lenguaje o las bibliotecas disponibles, o quizás en ambos). También necesitaría un compilador nativo en lugar de una VM.
Si esto En este caso, definitivamente no estoy seguro de cuál es «mejor». Hay muchas alternativas, incluso muchos del grupo pequeño que conozco. Si «realmente» desea llegar al «mejor», debe generar una lista de todos los idiomas, sin preconceptos. Luego, comience a refinar por omisión, es decir revisar todos los requisitos y omitir (o al menos mover más abajo en la lista) aquellos en los que el lenguaje (o sus herramientas) son menos que adecuados para el requisito.
Los requisitos de abstracción probablemente eliminarían C y su tipo de la lista, tal vez las nuevas actualizaciones de C ++ aún lo mantienen en ejecución.
Todo lo basado en VM probablemente fallaría en algún aspecto u otro (tenga en cuenta que no necesariamente, pero necesitaría de alguna manera de hacer / convertir al menos porciones del mismo en nativo). Entonces esos Java / PVM / DotNet / etc. La familia de idiomas probablemente también se puede omitir.
Los enlaces de hardware pueden eliminar bastantes, aunque tenga en cuenta que no es imposible usar más de un idioma (o familia de idiomas) para moverse este requisito. Por ejemplo, es incluso imposible utilizar C para toda la pila de tareas del sistema: al menos algunas de las partes de inicio en todos los sistemas están escritas en ensamblado y, además, muchos sistemas están escritos en un nivel más alto por encima del Porciones «C». En la mayoría de los casos, es una situación en la que simplemente se usa lo que ya está hecho y / o se agrega el que mejor se adapte a los lugares donde encaja. Así que probablemente (en la misma línea) pueda obtener alguna biblioteca / «complemento» lo que permite que cualquier idioma afecte directamente al hardware. Si esto luego elimina cosas como el rendimiento o la economía de recursos es un asunto diferente que necesitaría pruebas y pensamiento de combinación alternativo (por ejemplo, ¿crea una rutina de acceso a disco atómico en C que se llama desde un «hilo» de actor en Lisp y posiblemente incurra en gastos generales como cada llamada atómica usa sus propios recursos y posiblemente se pierde rendimiento debido a las llamadas CFFI).
Y luego el elefante blanco (y la razón principal por la que C es tan ubicuo) son ejemplos: es mucho más difícil para probar algo en otro idioma donde las muestras son difíciles de encontrar o incluso inexistentes. Siempre es extremadamente difícil ser el primero en hacerlo en lugar de simplemente hacer lo mismo, solo «a tu manera».
Si sigue esta ruta, probablemente eliminará muy rápidamente grandes porciones de esa enorme lista de idiomas. Sin embargo, la acción que lleva más tiempo sería investigar cada idioma para descubrir cómo se compara con los demás para cada uno de los requisitos. Por eso la mayoría no se molestaría y seguir con algo como C, aunque (a largo plazo) puede significar que «podrían hacer algo» mejor «más rápido.