O autor do artigo Douglas MacIlroy é um matemático, engenheiro e programador americano. Ele é mais conhecido pelo desenvolvimento do pipeline no sistema operacional Unix, pelos princípios da programação orientada a componentes e por várias utilidades originais: spell, diff, sort, join, speak, tr.
Às vezes, você encontra programas realmente extraordinários. Após uma reflexão, fiz uma lista das verdadeiras joias do Unix ao longo dos anos. Em sua maioria, são programas bastante raros e não tão essenciais. Mas o que os destaca é sua originalidade. Não consigo imaginar que eu mesmo teria a ideia de algum deles.
Compartilhe, quais programas também o surpreenderam tanto?
PDP-7 Unix
Para começar, o próprio sistema PDP-7 Unix. Sua simplicidade e potência me fizeram mudar de um poderoso mainframe para uma máquina minúscula. Aqui está a quintessência do sistema de arquivos hierárquico, um shell separado e gerenciamento de processos em nível de usuário, algo que o Multics em mainframes não conseguiu realizar mesmo após centenas de anos de desenvolvimento. As desvantagens do Unix (como a estrutura de registros no sistema de arquivos) foram tão instrutivas e libertadoras quanto suas inovações (como o redirecionamento de entrada e saída no shell).
dc
A biblioteca matemática para calculadoras de mesa com precisão variável de Robert Morris usava análise de erro reverso para determinar a precisão necessária em cada etapa para alcançar a precisão desejada pelo usuário. Na conferência da OTAN sobre engenharia de software de 1968, em sua apresentação sobre componentes de software, eu sugeri procedimentos de referência que podem fornecer um resultado de qualquer precisão desejada, mas não sabia como implementá-los na prática. O dc ainda é o único programa que conheço capaz disso.
typo
O typo ordena palavras no texto com base em sua semelhança com o restante do texto. Erros de digitação como 'hte' tendem a aparecer no final da lista. Robert Morris se orgulhava de que o programa funcionaria igualmente bem em qualquer idioma. Embora o typo não ajude a encontrar erros fonéticos, ele se tornou uma verdadeira descoberta para todos que digitam texto e trouxe muitos benefícios antes que surgisse uma verificação ortográfica por dicionário, muito menos interessante, mas mais precisa.
O erro é tão inesperado por dentro quanto por fora. O algoritmo de medição de similaridade é baseado na frequência de ocorrência de trigramas, que são considerados em um array 26×26×26. Na memória diminuta, havia mal espaço suficiente para contadores de um byte, então foi implementado um esquema de compressão de números grandes em contadores pequenos. Para evitar estouros, os contadores eram atualizados de maneira probabilística, mantendo a estimativa do logaritmo do valor do contador.
. Ele se destaca pelo fato de que, para exibir uma fórmula, o desenvolvedor só precisa descrevê-la com palavras e símbolos simples. Palavras-chave permitem deslocar os sinais matemáticos vertical e horizontalmente, alterar seus tamanhos e outros parâmetros. Se você passar para a utilidade uma string:
Com o surgimento da fotomontagem, tornou-se possível, mas horrivelmente cansativo, produzir a notação matemática clássica. Lorinda Cherry decidiu desenvolver uma linguagem de descrição de nível mais alto, e logo Brian Kernighan juntou-se a ela. O movimento brilhante deles foi expressar a tradição oral de forma escrita, por isso o eqn se tornou surpreendentemente simples de aprender. O primeiro pré-processador de linguagem de descrição de expressões matemáticas, eqn desde então quase não foi melhorado.
struct
Brenda Baker iniciou o desenvolvimento de seu conversor Fortan-to-Ratfor contra o conselho de seu chefe — eu. Pensei que isso poderia levar a uma reorganização especial do texto fonte. Ele estaria livre de números de operadores, mas no restante não seria mais legível do que um código Fortran bem estruturado. Brenda provou que eu estava errado. Ela descobriu que cada programa Fortran tem uma forma canonicamente estruturada. Os programadores preferiam a forma canônica, e não o que haviam escrito originalmente.
pascal
O diagnóstico de sintaxe no compilador desenvolvido pelo grupo de Sue Graham em Berkeley foi o mais útil de todos que já vi — e era feito automaticamente. Ao encontrar um erro de sintaxe, o compilador sugere inserir um léxico para continuar a análise sintática. Não há tentativas de explicar o que está errado. Com esse compilador, aprendi Pascal em uma noite, sem ter nenhum manual à mão.
parts
O módulo escondido dentro do pacote WWB (Writer’s Workbench) parts Lorinda Cherry define as partes do discurso para palavras em textos em inglês baseando-se apenas em um pequeno dicionário, regras de ortografia e gramática. Com essa anotação, o programa WWB gera indicadores estilométricos do texto, como a prevalência de adjetivos, orações subordinadas e orações complexas. Quando Lorinda deu uma entrevista no programa Today da NBC e falou sobre a inovadora verificação gramatical nos textos do WWB, foi a primeira menção ao Unix na televisão.
egrep
Al Aho esperava que seu reconhecedor determinístico de expressões regulares superasse o clássico reconhecedor não determinístico de Ken. Infelizmente, o último já estava completando a passagem por expressões regulares complexas enquanto egrep construía sua máquina determinística. Para vencer essa corrida, Al Aho contornou a maldição do crescimento exponencial da tabela de estados do autômato, inventando uma forma de construir em tempo real apenas os registros da tabela que realmente são acessados durante o reconhecimento.
crabs
O encantador metaprograma de Luca Cardelli para o sistema de janelas Blit produzia caranguejos virtuais que vagavam pelo espaço vazio da tela, mordiscando cada vez mais as bordas das janelas ativas.
Algumas reflexões gerais
Embora isso não seja aparente externamente, a teoria e os algoritmos desempenharam um papel crucial na criação da maioria desses programas: typo, dc, struct, pascal, egrep. Na verdade, o que mais surpreende é o uso inusitado da teoria.
Os autores originais de quase metade da lista — pascal, struct, parts, eqn — eram mulheres, superando significativamente a participação demográfica de mulheres na área de ciência da computação.
Douglas McIlroy
Março de 2020
Fonte: habr.com
