2010-12-03 17 views

Respuesta

16

Algunos factores deben en mi opinión entran en consideración

  1. En un lenguaje de programación del sistema debe ser capaz de alcanzar cosas de bajo nivel, acercándose al mundo del hardware real. En un lenguaje de aplicación, en cambio, hay una especie de "mundo virtual" (con suerte, más agradable y más fácil de interactuar) que ha sido diseñado con el lenguaje y usted solo tiene que ser capaz de lidiar con eso.

  2. En un lenguaje de programación de sistema no debería haber concesión en términos de rendimiento. Uno debe poder escribir el código que exprime todo el jugo del hardware.Esta no es la mayor preocupación en un lenguaje de programación de aplicaciones, donde el tiempo necesario para escribir realmente el programa juega un papel más importante.

  3. Debido a 2, un lenguaje de programación del sistema es libre de asumir que el programador no se equivoca y por lo tanto no habrá guardias de "tiempo de ejecución". Por ejemplo, la indexación de una matriz va a significar el fin del mundo, a menos que el hardware les otorgue esos controles de forma gratuita (pero en ese caso, probablemente pueda elegir hardware menos costoso o más rápido en su lugar). La idea es que si supone que el código es correcto no tiene sentido pagar siquiera un pequeño precio por verificar lo imposible. Además, un lenguaje de programación del sistema no debe entrometerse en el intento de prohibir que el programador haga algo que quiere hacer intencionalmente ... la suposición es que él/ella sabe que es lo correcto. En cambio, en un lenguaje de programación de aplicaciones se considera bueno ayudar al programador a verificar el código y también tratar de obligar al código a usar ciertos esquemas filosóficos. En los lenguajes de programación de aplicaciones, cosas como la velocidad de ejecución, el tiempo de tipeo y el tamaño del código pueden sacrificarse para ayudar a los programadores a evitar dispararse ellos mismos.

  4. Debido a 3 un lenguaje de programación del sistema será mucho más difícil de aprender mediante la experimentación. En cierto sentido, son herramientas poderosas pero peligrosas que uno debería usar pensando cuidadosamente en cada afirmación y por la misma razón son idiomas en los que la depuración es mucho más difícil. En los lenguajes de programación de aplicaciones, en cambio, el enfoque try-and-see puede ser razonable (si la abstracción del mundo virtual no está goteando demasiado) y permitir que los errores se eliminen más tarde se considera una opción viable.

9

Al igual que con muchas cosas en TI, la línea es borrosa. Por ejemplo, C comenzó su vida como un lenguaje de programación de sistemas (y se usó para implementar Unix), pero también se usó para el desarrollo de aplicaciones.

Dicho esto, hay claramente algunos lenguajes más adecuados para la programación de sistemas que otros (por ejemplo, C/C++ es más adecuado que COBOL/FORTRAN para la programación de sistemas). Del mismo modo, hay idiomas que se adaptan mejor al desarrollo de aplicaciones y no a la programación de sistemas, por ejemplo. VB.NET.

Las características del lenguaje que se destacan de los ejemplos anteriores son las características de bajo nivel de los lenguajes de programación de sistemas como C/C++ (por ejemplo, punteros, operadores de manipulación de bits, etc.). Existe, por supuesto, la vieja broma de que C es un lenguaje de nivel "Marino" (sentado en algún lugar entre el nivel de ensamblaje y el nivel "alto").

Advertencia: Estoy llegando a la programación de sistemas desde la perspectiva del desarrollador de SO/desarrollador de herramientas de sistema operativo.

Creo que es justo decir que, a pesar de los proyectos de desarrollo de sistemas operativos con Java (aunque creo que son principalmente compilados nativos, en lugar de bytes y JIT'ed/interpreted), los lenguajes de programación de sistemas se dirigen al código máquina nativo de sus plataformas de destino. Por lo tanto, es menos probable que los lenguajes que se dirigen principalmente a código administrado/código interpretado se usen para la programación de sistemas.

De todos modos, esto es sin duda lo suficiente para provocar algunos comentarios tanto en el apoyo y en oposición :)

+0

C debería haberse quedado en la programación de "sistemas" ;-) –

+1

C puede que no sea la mejor opción para muchas aplicaciones, pero todavía hay suficientes aplicaciones donde C es una buena opción. C también se está reviviendo como la base de los lenguajes de programación paralelos (por ejemplo, CUDA, OpenCL). No se puede negar su popularidad (a pesar del impacto del soporte heredado) (por ejemplo, www.tiobe.com Programming Language Index). Desarrollo en una variedad de idiomas, pero siempre tendré un punto débil para C, llámame masoquista; También me encanta el lenguaje ensamblador ;-) –

+0

* "... Creo que la mayoría son nativos compilados, en lugar de código de bytes y JIT'ed/interpreted" *. Para JNode, el sistema base y los complementos principales son nativos compilados, el resto es JIT compilado (sin ninguna interpretación). –

5

Estos son conceptos no exactas, pero en esencia, los sistemas de lenguajes de programación son adecuados para la escritura de los sistemas operativos (por lo que tienen conceptos de bajo nivel como punteros, integración con ensamblador, tipos de datos correspondientes a la memoria y organización de registros), mientras que los lenguajes de programación de aplicaciones son más adecuados para escribir aplicaciones, por lo que generalmente utilizan conceptos de nivel superior para representar el cálculo (como OOP , cierres, tipos de datos complejos incorporados, etc.).

2

En general, un lenguaje de programación de sistemas tiene un nivel más bajo que los lenguajes de programación de aplicaciones. Sin embargo, el lenguaje en sí no tiene nada que ver con eso ... son más los detalles de la implementación del lenguaje.

Por ejemplo, Pascal comenzó su vida como un lenguaje de enseñanza, y era más o menos estrictamente aplicaciones ... sin embargo, se convirtió en un lenguaje de sistemas y se utilizó para crear versiones anteriores de MacOS y Windows.

C# no es, por lo general, un lenguaje de sistemas porque no puede hacer un trabajo de bajo nivel, aunque incluso esa línea se ve borrosa a medida que se crean los sistemas operativos administrados.

2

Creo que ya no hay una respuesta definitiva.

Perl y Python vienen por defecto con distribución casi todos los Linux ... ambos pueden inline C ... ambos pueden hacer el control de trabajos y otras tareas de "bajo nivel" ... etc roscado

cualquier idioma con un buen conjunto de enlaces de llamada al sistema y/o FFI debe ser tan fundamentalmente consciente del sistema como C o C++.

los únicos idiomas i descontaría como lenguas de sistemas son los que se refiere específicamente a otra plataforma (JVM, CLR) y buscan activamente para evitar la interacción nativa

Cuestiones relacionadas