La filosofía de Unix del es un sistema de normas culturales y de acercamientos filosóficos al software que se convierte basado en la experiencia de los reveladores principales del sistema operativo de Unix .
"Ésta es la filosofía de Unix: el escribe los programas que hacen una cosa y lo hacen él bien. El
escribe programas para trabajar junto. El
escribe programas a las corrientes de texto de la manija porque eso es un interface." universal;
Esto generalmente se abrevia seriamente al " Hacer una cosa, hacerla well."
De los tres principios, solamente el tercero es específico a Unix, aunque los reveladores de Unix acentúan a menudo los tres principios más que otros reveladores.
: Usted no puede decir adónde un programa va a pasar su tiempo. Los embotellamientos ocurren en lugares asombrosamente, así que no intentan conjeturar y poner en segundo lugar en un corte de la velocidad hasta que usted haya probado que es donde está el embotellamiento.
Regla 2: Medida. No templar para la velocidad hasta que usted haya medido, e incluso después no hacer a menos que una porción del código abruma el resto.
Regla 3: Los algoritmos de lujo son lentos cuando es pequeño, y es generalmente pequeño. Los algoritmos de lujo tienen constantes grandes. Hasta que usted sepa que va con frecuencia a ser grande, no conseguir la suposición. (Incluso si consigue grande, utilizar la regla 2 primero.)
Regla 4: Los algoritmos de lujo son más buggier que los simples, y son mucho más duros de ejecutar. Utilizar los algoritmos simples así como las estructuras de datos simples
Regla 5: Los datos dominan. Si usted ha elegido las estructuras de datos correctas y las cosas organizadas bien, los algoritmos serán casi siempre evidentes en sí. Las estructuras de datos, no algoritmos, son centrales a la programación.
Regla 6: No hay regla 6.
Las reglas 1 y 2 de Pike exponen " famoso de la máxima en forma modificada de s C. Hoare el '; La optimización prematura es la raíz de todo el evil." El Ken Thompson reformuló las reglas 3 y 4 de Pike como " Cuando en duda, utilizar la fuerza bruta . " Las reglas 3 y 4 son casos del BESO de la filosofía de diseño. La regla 5 fue indicada previamente por los arroyos de Fred en el mes laboral mítico . El de Jon Bentley que programa las perlas también tiene un capítulo en el mismo principio de diseño. La regla 5 se acorta a menudo al " escribir el código estúpido que utiliza el data" elegante;, y es un caso del " de la pauta; Si sus datastructures son bastante buenos, el algoritmo para manipularlos debe ser trivial." La regla 6 es simplemente una referencia chistosa bosquejo de Bruces de s de Monty Python a el '. En secuencias de C, el octeto pasado de la secuencia es nulo, así indicando la longitud de la secuencia.
pequeño es hermoso.
Los 10 pocos principios son unos que no se convienen en universal como parte de la filosofía de Unix, y en algunos casos, se discuten caliente (el núcleo monolítico contra el Microkernels ): El permite que el usuario adapte el ambiente.
El Richard P. Gabriel sugiere que una ventaja dominante de Unix fuera que incorporó una filosofía de diseño que él llamó el " Peor es el better". En el " Peor es el better" diseñar el estilo, simplicidad del del interfaz y la puesta en práctica es más importante que cualquier otra cualidad del &mdash del sistema; incluyendo la corrección, la consistencia y lo completo. Gabriel sostiene que este estilo del diseño tiene ventajas evolutivas dominantes, aunque él pregunta la calidad de algunos resultados.
Por ejemplo, en los comienzos UNIX era un núcleo monolítico (que significa que las llamadas de sistema realizadas los procesos del núcleo del usuario todas en el apilado del usuario). ¿Si una señal fue entregada a un proceso mientras que fue bloqueada en una entrada-salida de largo plazo en el núcleo, tal como sueño (10*60), después qué debe ser hecha? ¿Se debe la señal retrasar, posiblemente durante mucho tiempo (quizá indefinidamente) mientras que la entrada-salida terminó? El tratante de la señal no podría ser ejecutado cuando el proceso estaba en modo del núcleo, con datos sensibles del núcleo sobre el apilado. ¿Debe el back-out del núcleo la llamada de sistema, y almacenarla, para la respuesta y el recomenzar más adelante, si se asume que el tratante de la señal termina con éxito?
En el Ken Thompson de estos casos y el Dennis Ritchie favoreció simplicidad sobre la perfección. El sistema de UNIX volvería de vez en cuando temprano de una llamada de sistema con un error que indica que no había hecho nada - el " Sistema interrumpido Call" - un error número 4 (EINTR) en sistemas de hoy. Por supuesto la llamada había sido abortada para llamar al tratante de la señal. Esto podría suceder solamente para un puñado de llamadas de sistema duraderas, es decir leído (), escribir (), abierto (), selecto (), etc. En el lado más, esto hizo el sistema de la entrada-salida muchas veces más simples diseñar y entender. La gran mayoría de programas del usuario nunca era señales afectadas porque no dirigieron o de la experiencia con excepción de SIGINT/^C y moriría enseguida si uno fue levantado. Para los pocos otros programas - cosas tener gusto de las cáscaras o de los editores de textos que responden a los keypresses del control de trabajo - las pequeñas envolturas se podrían agregar a las llamadas de sistema para revisar la llamada enseguida si este error de EINTR fue levantado. Problema solucionado, de una manera simple.
la modularidad : Escribir las piezas simples conectadas por los interfaces limpios.
Regla de claridad: La claridad es mejor que inteligencia.
Regla de composición: Diseñar los programas que se conectarán con otros programas.
Regla de separación: Política separada del mecanismo; interfaces separados de los motores.
Regla de simplicidad: Diseño para la simplicidad; agregar la complejidad solamente donde usted debe.
Regla de parsimonia: Escribir un programa grande solamente cuando está claro por la demostración que nada hará.
Regla de transparencia: Diseñar para que la visibilidad haga la inspección y el depuración más fáciles.
Regla de robustez: La robustez es el niño de la transparencia y de la simplicidad.
Regla de representación: El conocimiento del doblez en datos así que "program logic" puede ser estúpido y robusto.
Regla de menos sorpresa: En diseño de interfaz, hacer siempre la menos cosa asombrosamente.
Regla de silencio: Cuando un programa no tiene nada asombrosamente decir, no debe decir nada.
Regla de reparación: Cuando usted debe fallar, fallar ruidoso y cuanto antes.
Regla de economía: El tiempo del programador es costoso; conservarlo preferentemente a tiempo de máquina.
Regla de la generación : Evitar mano-cortar; escribir los programas para escribir programas cuando usted puede.
Regla de la optimización : Prototipo antes de pulir. Conseguirlo que trabaja antes de que usted lo optimice.
Regla de diversidad: Desconfianza todas las demandas para el " un way" verdadero;.
Regla de extensibilidad: Diseñar para el futuro, porque estará aquí más pronto que usted piensa.
Muchas de estas normas se aceptan fuera del &mdash de la comunidad de Unix; si no cuando Unix primero las utilizó, entonces después. También, muchas no eran únicas u original a la comunidad de Unix. Sin embargo, los adeptos en la programación de Unix tienden a aceptar una combinación de estas ideas como la fundación del estilo de Unix.
Ya en 1983 el Robo Pike escribió una extensión de crítica de papel de los DEB de la funcionalidad de las herramientas básicas de Unix como gato. Esta tendencia llegó a ser solamente mucho más significativa con el advenimiento del GNU y de las variantes comerciales de Unix, y no es infrecuente que un solo programa proporcione las características numerosas basadas en cómo se llama (por ejemplo, un programa que comprime y descomprime un archivo basado en qué nombre se llama cerca; un ejemplo extremo que es el encajado BusyBox del uso del linux, que consolida la línea más común funciones de comando en un solo binario).
.
| Random links: | Marina de guerra canadiense real | Caballo pío (venda) | zócalo 4 | Tracey Sketchit |