Quería saber qué algoritmos utilizan internamente y cómo deciden de manera inteligente un algoritmo específico para una tarea específica. Por ejemplo, si sort obtiene un gran archivo de entrada, ¿utilizará diferentes algoritmos para diferentes tamaños de datos?
Esa es una pregunta interesante (+1 para eso). No tengo idea de cuál es la respuesta, pero si fuera usted, miraría el código fuente de las utilidades típicas de GNU para tener una idea de sus algoritmos.
¿Grep cambia de manera inteligente los algoritmos mientras busca diferentes conjuntos de datos?
No lo creo. No me cite ya que no puedo decirle con 100% de certeza, pero realmente no lo creo. La filosofía de las cosas de UNIX es que una cosa hace una y solo una. Por eso es que tenemos varias versiones de grep ( grep
, egrep
, fgrep
).
Además, la idea es hacer una cosa y solo una cosa en tiempo de ejecución. Se pueden configurar diferentes comportamientos y algoritmos como argumentos de línea de comandos, de modo que el mismo programa pueda actuar de manera ligeramente diferente (y posiblemente un poco más optimizado) entre ejecuciones. Buenos ejemplos son el comando wc
y diff
.
Sin embargo, la adaptación de comportamiento se basa en la configuración (a través de argumentos de línea cmd); no cambian / adaptan el comportamiento en tiempo de ejecución. Por lo general, es una complejidad innecesaria para el tipo de artefactos que pretenden ser las herramientas UNIX.
Tal complejidad es más apropiada para las herramientas más complejas y menos generales de la OMI.
grep
,egrep
ofgrep
.