través - ¿Hay idiomas que se ajusten a los mismos nichos que C?
cuantos idiomas se pueden aprender al mismo tiempo (9)
¿Alguno de los lenguajes propuestos o implementados encaja en el mismo (enorme) nicho que C, con la intención de ser una alternativa, a la vez que mantiene toda la aplicabilidad al sistema operativo, alto rendimiento, incrustado y otros roles?
Los sistemas operativos se implementaron históricamente en ensamblador. Más tarde, el desarrollo cambió a C, que inicialmente era una especie de ensamblador de macros.
Ahora, la mayoría de los sistemas operativos están escritos principalmente en C porque es prácticamente un lenguaje que mantiene algún tipo de compatibilidad con versiones anteriores del ensamblador (por ejemplo, uno puede asignar una parte del león del ensamblador que se encuentra en las especificaciones de hardware en C). Y libc es la interfaz principal (a menudo es la única interfaz) entre el kernel y el espacio de usuario. Y, sin embargo, la interfaz no cubre todo: algunas cosas en el kernel deben ser accedidas directamente ya que ninguna interfaz estándar está (aún) aprovisionada. Por ejemplo, uno tiene que usar una estructura C para pasar parámetros / recuperar resultados a / desde ioctl.
Eso significa que el uso de C en el desarrollo de aplicaciones se debe en gran parte al simple hecho de que si usas C obtienes acceso automático a todas las características del kernel (SO) que también están escritas en C.
Solo el lenguaje que puede competir de alguna manera con C es el lenguaje que se basa / es compatible con C. La única alternativa que conozco es el C ++. En épocas anteriores también había traductores relativamente populares como p2c (Pascal to C): programas para desarrolladores en un solo idioma, pero el código fuente se traduce automáticamente a C para su compilación. Pero los traductores tenían algunos errores y, sin el conocimiento de C, a menudo los programas no podían ser depurados. Así que si tienes que saber algo de C de todos modos, ¿por qué molestarse con los traductores?
Personalmente (y muchos otros desarrolladores, estoy seguro) utilizando varios idiomas a menudo me topé con el problema de que el sistema operativo tiene una característica, pero el lenguaje utilizado no proporciona ninguna facilidad para acceder a él. Creo que es el principal factor disuasivo para el desarrollo de otros lenguajes. Incluso si tiene una idea brillante para un nuevo lenguaje (que es probable que sea incompatible con C, de lo contrario, la idea no sería tan brillante ) terminará con la carga de reimplementar la interfaz con el sistema operativo prácticamente completo (y con varias aplicaciones obligatorias). tener bibliotecas de aplicaciones).
Siempre que (1) C siga siendo el único lenguaje para la programación del sistema y (2) las interfaces del sistema operativo sigan evolucionando, todos los lenguajes no compatibles con C en el otro lado de la valla, el desarrollo de aplicaciones, estarán en mayor desventaja.
PS En realidad ese es uno de los moldes que espero que LLVM / clang pueda romper. clang se implementa como una biblioteca reutilizable teóricamente que permite mezclar idiomas. Por ejemplo, el archivo fuente principal puede estar en un idioma (y analizado por un front-end), pero el #include
s podría estar en C (y analizado por el sonido).
¿Alguno de los lenguajes propuestos o implementados encaja en el mismo (enorme) nicho que C, con la intención de ser una alternativa, a la vez que mantiene toda la aplicabilidad al sistema operativo, alto rendimiento, incrustado y otros roles?
Ada es probablemente el idioma más utilizado en este espacio, aparte de C.
Está diseñado sobre todo para producir un código confiable y libre de errores, pero la mayoría de los compiladores de Ada producen un código de máquina eficiente y bien optimizado.
Por un tiempo, este lenguaje fue obligatorio para los proyectos del Departamento de Defensa y todavía se usa ampliamente en sistemas de control de armas, radar, navegación y avaiónica.
Ada y en la mayoría de los casos Objective-C.
El obvio es C ++.
Hace todo lo que describe, pero amplía C bastante con otras características (Orientado a objetos, etc.).
Hay muchos lenguajes que fueron diseñados explícitamente para adaptarse a todo ese nicho:
- BitC
- Ciclón
- Adelante
- Colina baja
- CPL
- BCPL (versión simplificada de CPL, lenguaje de implementación de MULTICS)
- B (Ken Thompsons probó por primera vez un lenguaje de programación de sistemas, basado libremente en BCPL, precursor de C)
- Ada
- Go
- re
- C ++
- Modula-2 (diseñado específicamente para la computadora personal Lilith como sucesor de Pascal para la programación de sistemas, también usado por IBM como lenguaje de implementación para el OS / 400 original)
- Oberon (diseñado específicamente como un sucesor más simple de Modula-2)
- Componente Pascal (sucesor de Oberon orientado a objetos, a pesar del nombre, no es un sucesor directo de Pascal)
- Modula-3 (a pesar del nombre no es un sucesor de Modula-2 sino un desarrollo independiente)
- Sing # (el lenguaje de implementación del sistema operativo Singularity Research de Microsoft Research)
- Limbo (idioma para el sistema operativo Inferno (sucesor del Plan 9 (sucesor de Unix)))
- Ooc
- Erlang (tal vez no para sistemas operativos, sino sistemas integrados en tiempo real, especialmente en la industria de las telecomunicaciones (conmutadores telefónicos, etc.), también últimamente (algo sorprendente para los inventores de Erlang, en realidad) servidores web, sistemas de bases de datos, etc.)
Curiosamente, también hay varios idiomas que no fueron diseñados específicamente para llenar ese nicho, pero que se han utilizado con mucho éxito en ese nicho:
- Smalltalk (varios sistemas operativos Smalltalk, sistemas integrados, microcontroladores, sistemas en tiempo real, los más famosos: la serie Tektronix TDS500 de osciloscopios digitales)
- Lisp (varios sistemas operativos Lisp, sistemas integrados, microcontroladores, algunas naves espaciales de la NASA)
- Java (varios sistemas operativos Java (JNode, NewOS), sistemas integrados, microcontroladores, tarjetas inteligentes)
- C # (varios sistemas operativos (Cosmos, SharpOS), Mono se utiliza en computación de alto rendimiento)
- Haskell (el sistema operativo de la casa, el microkernel verificado seL4)
- Pascal (MacOS)
También hay muchos lenguajes que aún no se han utilizado en ese nicho, pero ciertamente podrían serlo. (Principalmente, esto se debe a que esas comunidades lingüísticas han sido tan adoctrinadas por la mentira de "solo se pueden escribir sistemas operativos en C" que realmente creen que su propio idioma es inutilizable).
- Rubí
- Pitón
- ECMAScript (que en realidad se usa para escribir servidores web de alto rendimiento últimamente)
[Tenga en cuenta que para cada una de las tres categorías que enumeré, hay literalmente miles de idiomas más que caben allí].
De hecho, a veces uno tiene la sensación de que los lenguajes que no están diseñados específicamente para, por ejemplo, la programación del sistema operativo son realmente mejores para ese tipo de cosas. Compare, por ejemplo, el nivel de innovación, la estabilidad, el número de brechas de seguridad, el rendimiento en algo así como un Smalltalk OS de la década de 1970 y Windows o OSX de 2010.
Personalmente, creo que esto se basa en algunos mitos profundamente arraigados en la comunidad de programación de sistemas. Creen que la programación de sistemas en un lenguaje con, digamos, tipificación fuerte, seguridad de tipos, seguridad de memoria, seguridad de punteros, gestión automática del almacenamiento es imposible y que la única forma de obtener rendimiento o garantías en tiempo real es renunciar a las potentes instalaciones de abstracción. Sin embargo, resulta que cuando intentas diseñar un lenguaje de programación para humanos en lugar de máquinas, entonces los humanos pueden entender realmente los programas que escribieron, encontrar agujeros de seguridad, corregir errores y localizar y solucionar cuellos de botella de rendimiento mucho mejor en una comprensión de múada de 1 línea que en una línea de 100 para bucle.
Por ejemplo, SqueakNOS, que es una variante del sistema Squeak Smalltalk que se ejecuta sin un sistema operativo (en otras palabras: es el sistema operativo) tiene prácticamente todas las características que usted esperaría de un sistema operativo moderno (interfaz gráfica de usuario, ... .) más algunos que no (lenguaje de scripting incorporado que puede modificar cada pieza del sistema operativo en tiempo de ejecución) y pesa solo 300k SLOC y arranca en menos de 5 segundos, mientras que Windows pesa 50 millones de SLOC.
Otro lenguaje de programación de sistema interesante de Google: Go
Podrías considerar a D Desde la página de inicio:
D es un lenguaje de programación de sistemas. Se enfoca en combinar la potencia y el alto rendimiento de C y C ++ con la productividad del programador de lenguajes modernos como Ruby y Python. Se presta especial atención a las necesidades de garantía de calidad, documentación, gestión, portabilidad y fiabilidad.
El lenguaje D se escribe estáticamente y se compila directamente en el código de máquina. Es multiparadigm, que admite muchos estilos de programación: imperativo, orientado a objetos y metaprogramación. Es un miembro de la familia de sintaxis C, y su apariencia es muy similar a la de C ++.
freepascal. pascal se creó incluso antes de C, cuando no había suficiente RAM y CPU para las máquinas virtuales y todavía se utiliza para exactamente los mismos orígenes que C. las encarnaciones modernas de pascal, a saber Delphi y freepascal añadieron OO y genéricos, siguiendo la evolución que C ++ ha representado. comparten muchos conceptos y diseño como punteros, asignación directa de asignación de memoria, llamada directa de ASM dentro de los programas, son tan similares que no es inusual cargar código dll o c / c ++ en programas pascal y viceversa. probablemente mirando lenguajes antiguos como Basic es posible encontrar implementaciones que se ajusten al mismo nicho de c. lenguajes seguir plataformas ...