¿Hay idiomas que se ajusten a los mismos nichos que C?

¿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?

¿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 la única, 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 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): progtwigs para desarrolladores en un solo idioma, pero el código fuente se traduce automáticamente en C para la comstackción. Sin embargo, los traductores tenían algunos errores y, sin el conocimiento de C, a menudo los progtwigs 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 shiny para un nuevo lenguaje (que es probable que sea incompatible con C, de lo contrario, la idea no sería tan shiny ) terminará con la carga de reimplementar la interfaz con el sistema operativo prácticamente completo (y con varios elementos obligatorios). tener bibliotecas de aplicaciones).

Siempre que (1) C siga siendo el único lenguaje para la progtwigció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 permitiendo 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 clang).

Hay una gran cantidad de idiomas 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 progtwigción de sistemas, basado libremente en BCPL, precursor de C)
  • Ada
  • Ir
  • re
  • C ++
  • Modula-2 (diseñado específicamente para la computadora personal Lilith como sucesor de Pascal para la progtwigción de sistemas, también utilizado 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 orientado a objetos de Oberon, 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 de teléfono, 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 de osciloscopios digitales Tektronix TDS500)
  • 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. (En gran parte, esto se debe a que esas comunidades lingüísticas han sido tan adoctrinedas 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 se ajustan 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 progtwigció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 progtwigción de sistemas. Creen que la progtwigció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 progtwigción para humanos en lugar de máquinas, entonces los humanos pueden entender realmente los progtwigs 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, … .) además de algunos que no lo hace (lenguaje de script 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.

El obvio es C ++.

Hace todo lo que describe, pero amplía C bastante con otras características (Orientado a objetos, etc.).

Otro sistema de progtwigción interesante de Google: Go

BitC es un bash específico. Aquí hay un gran artículo sobre alternativas a C, y por qué han fallado.

Usted podría considerar D. Desde la página de inicio:

D es un lenguaje de progtwigción de sistemas. Se enfoca en combinar la potencia y el alto rendimiento de C y C ++ con la productividad del progtwigdor 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 comstack directamente en el código de máquina. Es multiparadigm, que admite muchos estilos de progtwigción: imperativo, orientado a objetos y metaprogtwigción. Es un miembro de la familia de syntax C, y su apariencia es muy similar a la de C ++.

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 comstackdores 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.

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 orificios que C. modernas encarnaciones de pascal, a saber Delphi y freepascal OO y generics agregados, 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 progtwigs, son tan similares que no es inusual cargar código dll o c / c ++ en progtwigs pascal y viceversa. probablemente mirando lenguajes antiguos como Basic es posible encontrar implementaciones que se ajusten al mismo nicho de c. lenguajes siguen plataformas …

Ada y en la mayoría de los casos Objective-C.