I wanted to know what algorithms do
they internally use and how do
intelligently decide a specific
algorithm for a specific task? For
example if sort gets a huge input
file, will it use different algorithms
for different data sizes?
Essa é uma pergunta interessante (+1 para isso). Eu não tenho idéia do que a resposta é, mas se eu fosse você, eu olharia o código-fonte dos utilitários GNU típicos para ter uma idéia de seus algoritmos.
Does grep intelligently switch algorithms while searching different data sets?
Eu não penso assim. Não me cite desde que eu não posso realmente dizer com 100% de certeza, mas eu realmente não penso assim. A filosofia das coisas do UNIX é que uma coisa faz uma coisa e uma coisa só. É por isso que temos várias versões do grep ( grep
, egrep
, fgrep
).
Além disso, a ideia é fazer uma coisa e apenas uma coisa em tempo de execução. Comportamentos e algoritmos diferentes podem ser configurados como argumentos de linha de comando, para que o mesmo programa possa agir de forma ligeiramente diferente (e possivelmente um pouco mais otimizado) entre as execuções. Bons exemplos são o comando wc
e diff
.
No entanto, a adaptação comportamental é baseada em configuração (via argumentos de linha cmd); eles não mudam / adaptam o comportamento em tempo de execução. Normalmente, é uma complexidade desnecessária para o tipo de artefatos que as ferramentas UNIX pretendem ser.
Essa complexidade é mais apropriada para ferramentas mais complexas e menos genéricas, IMO.