ultima - Es kernel de Linux(u otras cosas de bajo nivel) un "buen" ejemplo de cómo escribir C
ultima version de linux (9)
Siguiendo la pregunta "¿cuál es el mejor uso para C?
El kernel de Linux parece ser un famoso y muy bien pensado programa de C. ¿Pero es un buen ejemplo de la "mejor práctica" convencional C?
¿Qué quieres decir con buen ejemplo? Creo que el kernel de Linux es un kernel muy bien escrito en C con algunos problemas, muchos de los cuales se están limpiando. Sin embargo, en cuanto a usarlo como un ejemplo de cómo escribir código C general, no creo que encaje bien. Leer y entender el núcleo le enseñará mucho sobre C. Pero lo que no encontrará en el kernel es ninguna biblioteca para hablar. Las bibliotecas estándar no están disponibles. Entonces, por ejemplo, verá "printk" en lugar de "printf" y así sucesivamente. También hay algo de magia oscura. El kernel es un caso muy especial. No lo usaría para buscar las mejores prácticas, por ejemplo, si estuviera escribiendo alguna aplicación general como un administrador de archivos o una base de datos.
Estoy preparado para ser criticado por esto, pero el kernel de Linux es un proyecto de estudiante que se salió de control. Más en serio, lo que hace bien el núcleo de Linux desde el punto de vista de la programación es establecer un conjunto muy rígido de pautas de diseño y codificación que hacen posible que una gran cantidad de personas contribuyan sin dejar de encajar todo.
Las personas en las que confío que han hecho de los sistemas operativos el trabajo de su vida me dicen que el kernel de BSD es un mejor ejemplo de una buena programación en C y un buen diseño de SO. Sé lo suficiente de los profesores de Berkeley que no me sorprende esta afirmación.
En términos más generales, los núcleos de SO son cosas altamente especializadas, no hay nada convencional en un kernel. Si desea ejemplos de buenas prácticas de C, puede probar el libro de Kernighan y Pike sobre La práctica de la programación . O si desea estudiar un sistema real, la implementación de Lua es lo suficientemente pequeña como para que pueda leerlo todo, extremadamente bien diseñado e increíblemente portátil: se ejecuta en cualquier plataforma con un compilador ANSI C.
Disculpas por la respuesta subjetiva y argumentativa :(
Para los programas convencionales? No. * nix kernel code generalmente no está en el dominio del usuario , y como tal tiene diferentes convenciones y requisitos que la mayoría de la programación "mainstream". Sin embargo, es uno de los mejores y más de alta calidad del código C que puedes estudiar para aprender. Tiene sus debilidades, y no está del todo bien escrito, pero en su mayor parte es un código limpio y muy efectivo.
Que sea una "mejor práctica" depende de a quién le preguntes. También hay muchos programas de bajo nivel C escritos en la plataforma de Windows, pero si los revisa (por ejemplo, ejemplos de controladores de dispositivos de WINDDK), se dará cuenta de que Microsoft ha inventado con éxito otro lenguaje que ellos llaman C :-) Pero aún así, probablemente deberían considerarse como "mejores prácticas" si alguna vez desea desarrollar controladores de dispositivos en Windows.
Si está preguntando desde la perspectiva de aprender C, entonces puede ser demasiado abrumador para empezar. En lo que respecta al uso de C, es el más adecuado para aplicaciones que requieren portabilidad y rendimiento. Se usa comúnmente para la programación a nivel del sistema. Pero lo hace a expensas de la abstracción. Por lo tanto, tiene que hacer la mayor parte de la codificación a diferencia de un lenguaje como Java o incluso C ++. Idealmente, su tipo de aplicación debería decidir la elección del idioma, y con los sistemas operativos C es el camino a seguir.
Una forma de aprender sobre el kernel de Linux es comenzar desde una versión muy antigua de Linux kernel. Esto contendría la carne y ocultaría la complejidad adicional presente en el kernel actual. Esto debería ser suficiente para entender lo básico.
Sugiero que consulte las utilidades gnu (por ejemplo, el código fuente de las utilidades estándar de Unix, como ''ls'' y ''awk''), ya que serán más fáciles de entender y, más probablemente, escritas de una manera más limpia (el kernel tiene diferentes necesidades de rendimiento y problemas de compatibilidad que otros tipos de software).
Un lugar excelente es mirar el código de algún compilador de código abierto en uso. Necesita una excelente estructura de datos y habilidades de puntero para escribir un compilador.
Encuentro que el kernel es un muy buen ejemplo de cómo escribir código modularizado. A pesar de ser C, está algo orientado a objetos.
Sí lo es.
Si no desea sentirse abrumado con los detalles del kernel, puede comenzar con algunas de las funciones de utilidad de Linux escritas en C. Consulte las respuestas a esta pregunta para obtener detalles sobre cómo obtener la fuente.
Otro buen lugar para leer el código fuente C está en la biblioteca estándar propia de C.
Finalmente, un proyecto C más reciente del que estoy escuchando cosas buenas es Git .