Es una distinción tosca e informal, pero la idea es que haya "lenguajes de programación de aplicaciones" dirigidos a programadores que desarrollen aplicaciones comerciales englobadas y "lenguajes de programación de sistemas" dirigidos a programadores que programan herramientas para otros programadores (compiladores, etc.) y software de bajo nivel como núcleos del sistema operativo, controladores de dispositivos, etc.
En resumen, la mayoría de los lenguajes (inventados recientemente, de todos modos) están diseñados para facilitar el desarrollo de software para el usuario con algún dominio no computacional --- finanzas, ingeniería, etc. Los lenguajes de programación de sistemas son aquellos, como C, FORTH, Go, etc. que están destinados o al menos son adecuados para la programación en el dominio de la informática.
Estos, a menudo, pero no siempre, cuentan con una compilación de código nativo, sistemas de tipo suelto que permiten un extenso "control" y acceso no administrado a la memoria a través de punteros o una construcción equivalente.
Ciertamente no veo por qué la memoria no administrada debería ser una característica aquí. Puede tener memoria administrada Y punteros. –
@ Matthieu M .: correcto, pero la característica clave aquí fue el acceso a la memoria no administrada, no los punteros. Piense en los controladores de dispositivos, núcleos de sistema operativo, etc .-- en algún momento necesita la capacidad de leer y escribir en ubicaciones de memoria arbitrarias. Además, cualquier lenguaje administrado por memoria que permita punteros (es decir, un tipo aritmético que represente ubicaciones de memoria) impondrá algunas comprobaciones de tiempo de ejecución importantes, que no es exactamente lo que piensa la mayoría de la gente cuando piensa en "punteros". –