programming-languages - examples - programming languages list
¿Qué idioma usarías en tu sistema operativo? (26)
Algunos dirían Java.
Tenga en cuenta que openfirmware está escrito en parte en adelante y tiene un nivel muy bajo.
Tiene una mente abierta.
Esta es probablemente una pregunta más subjetiva, pero ¿qué lenguaje (no API como .NET o JDK) usarías si escribes tu propio sistema operativo? ¿Qué idioma proporciona flexibilidad, simplicidad y posiblemente una interfaz de bajo nivel para el hardware? Estaba pensando en Java o C ...
C, ASM, C #
C, por supuesto.
Definitivamente ... C
El kernel tiene que estar escrito en un lenguaje de bajo nivel, C es con mucho la mejor opción para esto, ya que es tan eficiente en la memoria. Los niveles superiores podrían construirse con una combinación de Java o más idealmente Objective-C, y lenguajes de scripting como python y ruby, o lua.
Haskell.
Una vez que ha invertido los bits de hardware correctos, C es un lenguaje terrible para usar para el resto del sistema operativo. Cosas como el programador, los sistemas de archivos, los controladores, etc. son algoritmos complejos de alto nivel, y no desea escribirlos en lenguaje ensamblador (o C, lo mismo). Es muy difícil hacerlo bien. (Es posible que el subsistema VM y el administrador de memoria deban escribirse en algo de bajo nivel, ya que deberá reiniciar de alguna manera el tiempo de ejecución de su nivel de idioma).
De todos modos, esta no es solo una idea loca que estoy planeando para TAN. Aquí hay un sistema operativo escrito en Haskell: http://programatica.cs.pdx.edu/House/
Lisp es otra buena opción; las máquinas Lisp originales eran infinitamente más ajustables (en tiempo de ejecución) que los sistemas operativos "modernos" como UNIX y Windows.
A veces, la historia olvida las buenas ideas (a menudo en nombre del "máximo rendimiento"), y eso me entristece.
Honestamente, yo usaría C o alguna jerarquía de idiomas que yo había diseñado o encajado perfectamente. Lo que estaría buscando es una experiencia fluida que comience en el nivel básico y luego podría pasar a idiomas de nivel superior y superior a medida que avanzaba en el espacio problemático. Probablemente elegiría algo como:
- C - para cosas de metal desnudo como controladores, kernel, etc.
- Java / C #: para cosas de nivel de aplicación como consolas de administración, aplicaciones de sistema operativo
- Python / PowerShell: para actividades de scripting, como tareas administrativas comunes (crear un nuevo usuario, etc.)
Personalmente, creo que C / C # / PowerShell está más estrechamente integrado y el tipo de experiencia que estaría buscando. Por supuesto, si alguna vez llegara a ser tan ambicioso como para escribir un sistema operativo, tendría mucho tiempo libre en mis manos y probablemente realmente disfrutaría abordar la pila de idiomas primero. Entonces tal vez sería L / L # / LScript ...
Me sentiría dividido entre utilizar algún lenguaje existente de bajo nivel y escribir el mío basado en C # pero con mucho mejor soporte de genéricos. En el segundo caso, haría que cada método fuera genérico, pero el compilador resolverá todas las restricciones, para permitir el "tipado de pato" como en Scala, pero el lenguaje debe ser estático. También los métodos virtuales estáticos reducirían la base del código.
He tenido esa idea durante mucho tiempo, pero nunca parece ser factible en un marco de tiempo real, así que quién sabe, tal vez en el futuro. :-)
Microkernel AC o C ++ con un JIT para un lenguaje altamente dinámico como Ruby o tal vez un lenguaje con soporte nativo para el patrón Prototype. Incluso controladores de dispositivo en ese idioma.
No porque sea práctico, sino porque es realmente genial. Fresco en la forma en que NeXTStep era genial para usar Obj-C para casi todo.
Para un sistema operativo, desea velocidad en los niveles más bajos. Entonces el ensamblaje, C, C ++, Objective-C o Java parecen ser las opciones actuales. Aunque es solo recientemente que Java se hizo rápido, y es difícil para mí imaginar un sistema operativo con recolección de basura.
Si estuviera escribiendo lo mío, sería una mezcla de ensamblaje y C.
Ada :
Ada es un lenguaje de programación de computadora estructurado, estático, imperativo y orientado a objetos de alto nivel, que se extiende desde Pascal y otros idiomas. Fue diseñado originalmente por un equipo dirigido por Jean Ichbiah de CII Honeywell Bull bajo contrato con el Departamento de Defensa de los Estados Unidos (DoD) de 1977 a 1983 para reemplazar los cientos de lenguajes de programación utilizados por el Departamento de Defensa. Ada está fuertemente tipada y los compiladores son validados para la confiabilidad en aplicaciones de misión crítica, como el software de aviónica.
Ada, porque no solo fue desarrollado específicamente para tales proyectos, sino que también brinda soporte para varias características de alto nivel muy útiles (como soporte para tipeo fuerte, concurrencia y abstracción) que simplemente no están disponibles en el estándar C.
De modo que, incluso cuando un proyecto crece, no tiene que trabajar en torno a las limitaciones del lenguaje (piense en encapsular, abstraer, espacios de nombres en C).
No me malinterpreten, C funciona obviamente para una gran cantidad de proyectos, pero una vez que un proyecto ha ganado un cierto tamaño (piense en Linux kernel, gcc, GNOME), inevitablemente apreciará ciertas características de más idiomas de alto nivel para hacer que proceso de desarrollo menos tedioso y también menos ofuscado.
En C, sin embargo, estas características generalmente terminan siendo muy mal emuladas por el uso excesivo y casi pervertido del pre-procesador (esto puede verse, por ejemplo, en la base de código de gcc), de modo que se pueden ver muchas macros anidadas. , que desde un punto de vista de implementación, realmente emula las características encontradas en otros lenguajes de programación.
Además, Ada es el único lenguaje de programación, del que soy consciente, que en realidad proporciona soporte estandarizado para el análisis de código fuente usando ASIS , sin embargo, contar con tal facilidad es el requisito previo para ser realmente capaz de mantener y transformar / volver diseñar una base de código a largo plazo (piense en refactorizar).
Tener una interfaz como ASIS disponible significa que puedes implementar "parches semánticos", donde puedes renombrar automáticamente un archivo, función o variable / estructura de datos y funcionará realmente.
D sería una elección interesante. De su propia descripción:
D es un lenguaje de programación de sistemas. Su objetivo es combinar la potencia y el alto rendimiento de C y C ++ con la productividad del programador de los 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 tiempo de ejecución D supone la existencia de un recolector de basura, que no sería apropiado para los niveles más bajos del kernel. Sin embargo, sería apropiado para muchas de las capas superiores.
http://www.dwheeler.com/sloc/redhat71-v1/redhat71sloc.html - compartir idiomas en el código fuente de Linux.
C , por una serie de razones. Otros candidatos, como D, son geniales. Sin embargo, C tiene esta ventaja: hay una gran cantidad de código C de código abierto disponible que puede reutilizar en su proyecto (mucho más que para otros lenguajes apropiados para la programación del sistema).
"El kernel tiene que estar escrito en un lenguaje de bajo nivel, C es por mucho la mejor opción para esto, porque es tan eficiente en la memoria".
Um ... ¿Qué hay de FORTH?
FORTH puede ser de bajo nivel y alto nivel, por lo que podría tener todo un sistema operativo escrito en FORTH desde cero, y aún así tener un buen entorno de scripts REPL fácil en la parte superior, también en FORTH.
Sin embargo, cualquier sistema operativo decente debería admitir muchos lenguajes en la parte superior, desde C hasta Python Ruby y Javascript. Sin embargo, hacer de FORTH la base de todo tiene muchos beneficios.
editar: Solo intentaría esto para un entorno integrado con un solo conjunto de hardware conocido. Tratar de escribir un sistema operativo que pueda competir con Linux o Windows es un trabajo tonto.
¿Oberon? Creo que echo mucho de menos a Pascal algunas veces. C pagó las cuentas por bastante tiempo, pero realmente no me gusta.
Java? no jave se ejecuta en una máquina virtual que necesita un os para ejecutarse encima, tal vez C y algunos ASM;)
Me gustaría ir con D para ver si puede hacerlo.
Si fuera a iniciar un nuevo sistema operativo, lo haría con el subconjunto de C ++ recomendado por la industria integrada. Puede usar cosas como clases y usarlas como "C mejor" y ser igual de rápido. Solo evita las cosas que tienen una sobrecarga masiva. Incluso puede usar algunas características de la plantilla, si se adhiere a un cierto subconjunto que básicamente no tiene ninguna sobrecarga. Mire en embedded.com las características en C ++ que tienen poca o ninguna sobrecarga, pero le permitirán organizar su código mejor que nunca en C.
Solo elegiría los 3 siguientes como prácticos.
- C (bien pasado de moda)
- C ++ (C con cosas añadidas. Windows está parcialmente escrito en esto)
- Java (el lenguaje de nivel medio que podría tener un recolector de basura capaz con pausas controlables con G1).
BitC parece tener esto en mente. A pesar de su nombre, parece ser el punto medio del lenguaje ensamblador y lisp. El objetivo era crear un lenguaje con una gran correspondencia con el lenguaje de máquina, pero con una representación intermedia que admite inferencias de corrección más sólidas que las que se pueden hacer con la mayoría de los demás lenguajes comunes. Los idiomas se crearon como parte del proyecto Coyotos, un sistema operativo con elevados objetivos de seguridad y confiabilidad. La verificación formal se hace significativamente posible con el IR utilizado en BitC.
- Bajo nivel en algo como Haskell o D. Productividad sobre el rendimiento, en mi opinión. Puede reescribir partes lentas en C ++ o incluso ensamblar más adelante si fuera necesario.
- De alto nivel en Python o Ruby . Idealmente, también tendría una máquina virtual con JIT realmente rápida para ese idioma, pero eso no sucederá en ningún idioma por un tiempo. Lua sería una buena alternativa si la velocidad se interpone en el camino.
Construya los componentes básicos como programadores de tareas y controladores, etc. con ensamblador , luego construya los componentes de nivel superior como aplicaciones y herramientas con C
Creo que así es como también se creó Windows XP (no estoy seguro acerca de Windows Vista y Windows 7 ).
Si esta no es una pregunta hipotética, y estás buscando crear tu propio sistema operativo, probablemente me vaya con C porque la mayoría de los ejemplos están escritos en C.
Además, (y aún no he desarrollado un sistema operativo, así que tómenlo con un grano de sal), creo que las bibliotecas de tiempo de ejecución de c serían mucho más fáciles de adaptar a su nuevo sistema operativo que, por ejemplo, .NET.
Lisp por supuesto!
Texto del título: algunos dicen que el mundo terminará en fuego; algunos dicen en segfaults.
Pascal + Oberon: tienen el poder de C y C ++, pero no son tan desalentadores de usar. Ambos idiomas son muy poco apreciados.