A Bunda do Cavalo do Unix

Foto dos programadores do Unix original trabalhando em um terminal teletype

Escrito por

em

Tem uma anedota que correlaciona o tamanho dos ônibus espaciais à largura da bunda dos cavalos. Se você pesquisar por esses termos vai encontrar várias referências a essa história que, claramente, é uma bobagem.

No mundo da computação a gente tem algumas dessas características que influenciam nossas vidas até hoje. Uma das mais óbvias é o teclado QWERTY que usamos até hoje (aliás, a história das teclas serem afastadas para evitar enroscos também é potencialmente falsa).

Muitos anos atrás, antes mesmo de eu ter sequer nascido, existiam computadores gigantescos chamados mainframes e uns computadores “menores” que eram chamados de minicomputadores.

Apesar de serem “mini” eles ainda eram enormes para os nossos padrões atuais.

Uma coisa interessante dos computadores dessa época é que a gente precisava usar um outro equipamento para interagir com eles: o terminal.

Os primeiros terminais se pareciam muito com uma máquina de escrever ou, para quem não conhece uma máquina de escrever, é só imaginar um teclado montado junto com uma impressora.

Você digitava os comandos para o computador no teclado e esses comandos eram impressos em um papel que vinha de uma espécie de bobina contínua (ou em formulário contínuo com picote, remalina, etc). As respostas do computador também eram impressas nesse formulário.

Para quem se perguntou por que os caracteres ASCII especiais \r se chamam “carriage return” (retorno de carro), \n “new line” (nova linha), entre outros, é porque eles comandavam essa impressora a retornar o carro para a coluna inicial e avançar o papel para uma linha nova em branco.

Com a evolução da tecnologia os terminais foram evoluindo e deixaram de usar papel para usar vídeo e, hoje, textos dentro de uma janela de um aplicativo de… “terminal”.

O sistema operacional Unix (papai do Linux e vovô do macOS) nasceu no mundo dos minicomputadores e foi desenvolvido inicialmente com terminais convencionais chamados de teletype (teletipo).

O Unix mapeia os dispositivos em arquivos. E o arquivo para mandar informações de/para um terminal TTY (teletype) é /dev/tty até os dias de hoje mesmo usando um terminal dentro de uma janela do nosso ambiente gráfico.

Nessa mesma época os usuários do Unix precisavam editar arquivos para fazer coisas básicas como, por exemplo, programar. O editor que eles usavam era o editor (sim, eles eram pouco criativos para nomes).

Imagine que em um teletipo não tem o conceito de navegar com um cursor pelo texto. Toda a edição era feita através de comandos para o ed.

Uma das coisas que todo editor precisa oferecer é uma ferramenta de busca de texto em um arquivo inteiro. Para fazer uma operação em um arquivo inteiro no ed eles usavam o comando g (global).

Para fazer uma busca de um texto não tem nada mais poderoso do que usar uma expressão regular (sim, elas já existiam naquela época). Então a gente delimitava uma expressão regular com um par de barras: /.../. Por último, a gente precisava instruir o ed sobre o que fazer quando ele encontrava o texto procurado. Uma ação comum era pedir pro ed imprimir a linha, ou seja, (print).

Então recapitulando os passos ficaria: global, /regular expression (re)/, print.

g/re/p

Se precisasse fazer isso na linha de comando, que nome eu daria para esse comando? grep!

E se eu precisasse aplicar comandos do ed em um stream de texto ao invés de só interagir com um arquivo? Eu criaria um stream editor ou somente sed.

Como vocês puderam ver, decisões de muitos anos atrás ainda influenciam o nosso dia a dia até hoje.

Comentários

Deixe um comentário