"Decisão estúpida sangrenta": a história de C



Por mais difícil que pareça de acreditar, C não nasceu como um manual de brochura esfarrapado.



De uma forma ou de outra, a linguagem C influenciou a formação de quase todas as linguagens de programação desenvolvidas desde os anos 1980. Algumas linguagens como C ++, C # e Objective C deveriam ser descendentes diretas de C, enquanto outras simplesmente adotaram e adaptaram sua sintaxe. Um programador que mudou de Java, PHP, Ruby, Python ou Perl quase não terá dificuldade em entender programas C simples e, nesse sentido, C pode ser considerado a língua franca dos programadores.



No entanto, C não surgiu do nada como um monólito de programação único. A história C começa na Inglaterra, com um colega de Alan Turing e um programa de damas.



Deus salve o rei



Christopher Strachey foi chamado de “o homem da programação ideal”, de acordo com seu longo dossiê na revista Annals of the History of Computing . Ele ganhou essa reputação no Centro de Computação da Universidade de Manchester em 1951. Strachey foi parar lá graças ao seu trabalho em um computador na Ferranti Mark I University e sua amizade com Alan Turing, do King's College, em Cambridge.



Strachey nasceu em 1916 em uma família britânica bem relacionada - seu tio, Lytton Strachey, foi um dos fundadores do Grupo Bloomsbury, e seu pai, Oliver Strachey, foi fundamental nas operações de quebra de código dos Aliados em ambas as guerras mundiais.



O surgimento de Strachey como um especialista reconhecido em programação e ciência da computação teria sido uma surpresa para sua escola particular e professores de Cambridge. Strachey sempre mostrou talento para as ciências, mas raramente os aplicava.



Se ele tinha alguma esperança de seguir uma carreira em pesquisa científica, foi severamente atingido pelos resultados banais de seus exames finais. Em vez disso, durante a Segunda Guerra Mundial, Strachey trabalhou para uma empresa de eletrônicos britânica e mais tarde tornou-se professor, terminando em uma das escolas particulares mais prestigiadas de Londres, Harrow.



Em 1951, Strachey teve a oportunidade de trabalhar com computadores - ele foi apresentado a Mike Wudger, do Laboratório Nacional de Física do Reino Unido. Depois de passar um dia de seu fim de semana de Natal explorando o Pilot ACE Lab, em seu tempo livre em Harrow, ele descobriu como ensinar um computador a jogar damas. De acordo com Martin Campbell-Kelly , que mais tarde se tornaria colega de Strachey, “qualquer pessoa com mais experiência e menos confiança ficaria feliz com apenas uma mesa de quadrados”.



A primeira tentativa não deu frutos: o computador Pilot ACE simplesmente não tinha memória suficiente para jogar damas, mas mostrava um aspecto dos interesses de Strachey que se mostraria crítico para o desenvolvimento das linguagens que acabariam por levar a C. Em uma época em que os computadores eram principalmente valorizados por sua capacidade de resolver equações rapidamente, Strachey estava mais interessado em sua capacidade de realizar problemas lógicos (como ele admitiu mais tarde em 1952 na reunião da Association for Computing Machinery ).



Na primavera seguinte, ele soube que um computador Ferranti Mark I havia sido instalado na Universidade de Manchester. Alan Turing era o diretor assistente do laboratório de informática dessa universidade. Turing escreveu um livro-texto para programadores, e Strachey o conhecia bem o suficiente de sua colaboração em Cambridge para pedir um.



Em julho de 1951, Strachey visitou Manchester e discutiu pessoalmente com Turing seu programa de rascunhos. Impressionado, Turing sugeriu que, como primeiro passo, escrevesse um programa que permitisse ao Ferranti Mark I simular a si mesmo. O simulador permitirá que os programadores observem passo a passo como o computador executará o programa. Esse programa de "rastreamento" identificará as partes em que o programa cria gargalos ou é ineficaz. Naquela época, os ciclos da memória e do processador do computador valiam uma fortuna, então esse era um aspecto importante da programação.



O programa de rastreamento de Strachey continha mais de mil comandos - na época era o mais longo programa escrito para Ferranti Mark I. Depois de trabalhar a noite toda, Strachey foi capaz de executá-lo e, após a conclusão, o programa, de acordo com Campbell-Kelly , tocou o hino "Deus salve King ”através do alto-falante do computador.



Essa conquista de hobby chamou a atenção de Lord Halsbury, diretor administrativo da National Research and Development Corporation, que logo contratou Strachey para gerenciar o trabalho do governo para promover aplicações práticas das universidades britânicas de ciência da computação em rápido crescimento.



Foi nessa posição que ele aprendeu sobre um projeto de Cambridge dirigido por um trio de programadores chamado David.



Davi e Golias Titã



O Centro de Computação da Universidade de Cambridge tinha um forte foco em servir cientistas. Os primeiros computadores do Laboratório de Matemática, EDSAC e EDSAC 2, foram colocados à disposição de pesquisadores de toda a universidade. Eles escreveram programas que foram perfurados em fitas de papel e inseridos em uma máquina.



No centro de informática, essas fitas perfuradas eram presas ao varal e executadas uma após a outra no horário de trabalho. Essa fila de programas em espera veio a ser conhecida como “fila de tarefas”, um termo usado ainda hoje para descrever maneiras muito mais complexas de organizar tarefas computacionais.





Às 6:55, você pode ver a "fila de trabalhos" do EDSAC.



Apenas dois anos após o EDSAC 2 entrar em operação, a universidade percebeu que uma máquina muito mais potente seria necessária em breve e, para resolver esse problema, eles teriam que comprar um mainframe comercial. A universidade considerou opções para o IBM 7090 e o Ferranti Atlas, mas não podia pagar por nenhuma dessas máquinas. Em 1961, o gerente do departamento da Ferranti, Peter Hall, propôs que uma versão simplificada do computador Atlas fosse desenvolvida com a Universidade de Cambridge. Cambridge receberá um protótipo chamado Titan e a Ferranti poderá vender o novo computador para clientes para os quais o Atlas é muito caro.



Para fornecer serviços de computação para o resto da universidade, este computador precisará de um sistema operacional e pelo menos uma linguagem de programação de alto nível.



Quase imediatamente, a ideia de estender a linguagem desenvolvida para EDSAC 2 foi abandonada. “No início dos anos 1960, geralmente se pensava que 'estamos construindo um novo computador, então precisamos de uma nova linguagem de programação'”, lembrou David Hartley em um podcast de 2017 . Junto com David Wheeler e David Barron Hartley participou dos primeiros estágios do desenvolvimento de uma nova linguagem de programação para este computador.



“Construir um novo sistema operacional era inevitável”, disse Hartley, mas não uma nova linguagem de programação. “Achamos que tínhamos a oportunidade de experimentar um novo idioma. Em retrospecto, parece que foi uma decisão estúpida. "



Maurice Wilkes, que liderou o projeto Titan, acreditava que não havia necessidade de uma nova linguagem de programação. A principal tarefa pretendida da Titan era fornecer serviços de computação para a Universidade de Cambridge, e para isso seria ótimo fazer e iniciar a máquina o mais rápido possível, equipando-a com uma linguagem que já é familiar aos usuários.



Antes de aprovar uma proposta para desenvolver uma nova linguagem, Wilkes solicitou uma análise das linguagens de programação existentes. “Nós os escolhemos com muito cuidado”, lembra Hartley, “para que ele decida que nenhuma linguagem é apropriada”. Curiosamente, o grupo de trabalho do Fortran IV nem mesmo alcançou os usuários do Fortran em Cambridge, que poderiam falar sobre recursos adicionais disponíveis em outros sabores do Fortran. Por causa disso, como lembra Hartley , o grupo estava convencido de que "podemos projetar e desenvolver algo muito melhor", mas depois de alguns anos esse empreendimento fracassou.



O trio preparou um artigo em junho de 1962, argumentando sobre a necessidade de uma nova linguagem e, como diz Hartley, "escapamos impunes".



Essa nova linguagem de programação foi chamada de CPL (Cambridge Programming Language) e, em 1963, os trabalhos já estavam em andamento. Os programadores de Cambridge juntaram-se a John Buxton e Eric Nixon da University of London, e CPL agora significa Combined Programming Language. O projeto cresceu e Wilkes decidiu trazer Christopher Strachey para liderá-lo. Logo, de acordo com Campbell-Kelly , as pessoas associadas ao projeto começaram a decodificar a CPL como "Linguagem de Programação de Christopher".



O grupo de pesquisadores da linguagem se reunia em Cambridge ou Londres, bem como na Universidade de Londres, mas às vezes eles se encontravam na oficina da casa de Kensington onde Strachey morava com sua irmã. A sala nos fundos da casa era forrada com cadeiras vitorianas, travesseiros no chão e as paredes adornadas com retratos de membros do Grupo Bloomsbury feitos por um dos parentes de Strachey. Foi lá que Strachey "deu uma festa no tribunal", às vezes usando um roupão, e, como David Barron lembrou alguns anos depois, "discutimos sobre como mudar o mundo para melhor e à noite fomos para casa".



Naquela época, David Wheeler havia mudado para outros projetos, deixando cinco de seus colegas: Hartley, Barron, Buxton, Nixon e Strachey.



Hartley adorou trabalhar na CPL: “Na verdade, foi um trabalho muito interessante”, lembra ele. As reuniões foram bastante informais. "Discutimos vários tópicos de forma acalorada e, com o tempo, até começamos a atirar aviões de papel uns nos outros."



O grupo começou com as especificações ALGOL 60, com o objetivo de escrever uma linguagem “ideal” que fosse prática para diferentes usuários, mas ao mesmo tempo esteticamente agradável e eficaz.



As dificuldades com priorização começaram quase imediatamente. Como David Barron disse de Strachey, "era típico para ele defender seu ponto de vista sobre diferenças menores com a mesma força que em pontos importantes". Uma controvérsia menor foi a objeção de Strachey à gramática dos construtos "SE ... ENTÃO ... ELSE". “Não posso permitir que meu nome seja associado a uma recomendação de usar um inglês iliteradamente incorreto” - esse, de acordo com as memórias de Hartley para os Annals of the History of Computing , era seu ponto de vista. Strachey preferia "OR", o que contradiz a forma como "OR" era usado em quase todas as outras línguas existentes. No entanto, sua preferência venceu, e no guia de referência da CPL OR é usado onde os usuários esperariam ELSE.





O manual da CPL, que obviamente pode ser encontrado online .



Um tempo valioso também foi gasto no desenvolvimento de uma maneira de evitar o uso de um asterisco para denotar uma operação de multiplicação. Neste caso, considerações estéticas levaram a complicações que retardaram a implementação de uma linguagem de programação prática, pois regras complexas tiveram que ser desenvolvidas para distinguir entre “3a” significando “3 * a” e “3a” como nome de variável.



Enquanto isso, os usuários de Cambridge ficavam cada vez mais irritados com a falta de uma linguagem de programação prática para os novos computadores Atlas. As especificações da linguagem estavam quase concluídas, mas o compilador ainda não existia. O grupo de trabalho tornou a CPL tão complexa que as primeiras tentativas de escrever um compilador em código de máquina foram incrivelmente ineficazes.



Começando com promoção



Em 1965, Strachey partiu para o Massachusetts Institute of Technology (MIT) por vários meses e, ao retornar, tornou-se diretor do Oxford Programming Research Group. Nesse ínterim, Martin Richards juntou-se ao projeto CPL em Cambridge. Ele começou a desenvolver uma versão simplificada da CPL com a qual os usuários pudessem trabalhar. Esta linguagem BCPL ("B" para "Básico", "simples") precisava de um compilador eficiente.



Enquanto estava no MIT, Strachey ajudou Martin Richards a obter um ano sabático de dois anos no instituto e, em 1966, Richards levou o BCPL com ele para Massachusetts, onde pôde trabalhar em um compilador.



BCPL é uma linguagem de "bootstrap" porque seu compilador é capaz de se auto-compilar. Basicamente, uma pequena parte do compilador BCPL é escrita em assembly ou código de máquina, e o resto do compilador é escrito em um subconjunto correspondente de BCPL. A parte do compilador escrita em BCPL é passada para a parte montadora, e o programa compilador resultante pode ser usado para compilar qualquer programa escrito em BCPL.



Compiladores de bootstrap simplificam muito o processo de portar uma linguagem de um computador ou sistema operacional para outro. Para que o compilador rode em outro computador, é suficiente reescrever uma parte relativamente pequena do compilador escrita em código específico para um determinado computador.



Enquanto Richards estava no MIT no compilador BCPL, o instituto começou a participar do projeto Multics com Bell Labs e GE. Para apoiar o projeto, foi criada uma rede conectando o MIT e a Bell Labs.



Embora a conexão de rede entre as duas organizações fosse nominalmente destinada a facilitar o trabalho com o Multics, Ken Thompson nos disse que era socialmente aceitável "percorrer" os mainframes do MIT em busca de outros projetos, e foi assim que ele encontrou o código e a documentação BCPL. Ele os baixou para o mainframe do Bell Labs e começou a trabalhar neles. “Eu estava procurando um idioma no qual pudesse fazer as coisas de que precisava”, lembra Thompson. "Programar nesta era de sistemas operacionais proprietários em máquinas enormes era muito difícil."



Na época em que Thompson estava fazendo experiências com BCPL, o Bell Labs retirou-se do consórcio Multics, e o departamento de ciência da computação de Thompson ficou temporariamente sem computadores.



Quando ela finalmente conseguiu o computador, era um PDP-7 usado, não muito poderoso mesmo para os padrões da época. Mesmo assim, Thompson conseguiu construir e executar a primeira versão do Unix nesta máquina.



O PDP-7 tinha 8.192 "palavras" na memória (uma palavra neste caso tinha 18 bits - a indústria ainda não havia padronizado um "byte" de 8 bits). O Unix pegou as primeiras 4.000 palavras, deixando 4.000 para executar programas.



Thompson comprimiu sua cópia do BCPL (que era uma CPL reduzida) para caber nas 4.000 palavras da memória livre do PDP-7. No processo de compressão, ele pegou emprestado partes da linguagem que encontrou quando estudante na Universidade da Califórnia em Berkeley. Esta linguagem SMALGOL era um subconjunto do ALGOL 60 projetado para rodar em computadores menos potentes.



A linguagem que Thompson acabou usando no PDP-7 foi, por sua própria descrição, “semântica BCPL com grande parte da sintaxe SMALGOL”, o que significa que parecia com SMALGOL e funcionava como BCPL. Como essa nova linguagem consistia apenas nos aspectos da BCPL que Thompson achou mais úteis e se encaixam nas limitações do PDP-7, ele decidiu encurtar o nome da BCPL para apenas "B".



Thompson já havia escrito Unix para o PDP-7 em assembler, mas mesmo em 1969 não era uma forma ideal de construir um sistema operacional. No PDP-7, funcionou porque o computador era muito básico e Thompson escreveu o sistema operacional principalmente para se divertir.



Qualquer sistema operacional que precisasse ser mantido e atualizado por vários programadores, ou executado em um hardware mais sofisticado no momento, precisava ser escrito em uma linguagem de programação de alto nível.



Então, quando a Bell Labs adquiriu o PDP-11 para o departamento em 1971, Thompson decidiu que era hora de reescrever o Unix em uma linguagem de programação de alto nível. Ele falou sobre isso com Brian Kernighan no palco do VCF 2019 .



Ao mesmo tempo, Dennis Ritchie pegou o B emprestado e o adaptou para funcionar em computadores mais poderosos. Um dos primeiros aspectos que ele acrescentou a B novamente foi a capacidade de "digitar" variáveis. Visto que a memória do PDP-7 consistia em palavras de 18 bits, B poderia ser simplificado tratando cada variável como uma palavra de memória ou uma sequência de palavras referenciadas por sua localização na memória do sistema. Não havia números decimais fixos ou de ponto flutuante, inteiros ou strings no idioma. Como disse Thompson: "Foram apenas palavras".



Essa abordagem foi eficaz em uma máquina simples com muito pouca memória e uma pequena base de usuários, mas em sistemas mais complexos com programas complexos e muitos usuários, ela pode levar a maneiras específicas de determinar se uma variável é uma string ou um número, bem como o uso ineficiente de memória. ...



De acordo com a segunda edição da História das Linguagens de Programação de Thomas Bergin e Richard Gibson, Ritchie chamou essa linguagem modificada de NB ("Novo B"). Ele foi instalado no mainframe do Murray Hill Computing Center, que foi disponibilizado aos usuários por meio do Bell Labs.



Naturalmente, quando Thompson decidiu reescrever o Unix em Java, ele começou com o NB. As três primeiras tentativas fracassaram e "por causa do meu egoísmo, culpei a linguagem por isso", lembrou Thompson com um sorriso para VCF.



Após cada falha, Ritchie adicionava recursos ao NB que ele e Ken precisavam. Certa vez, ele adicionou estruturas - variáveis ​​que armazenam muitos valores individuais de forma coerente ou "estruturada", após o que Thompson foi capaz de escrever o Unix nessa nova linguagem. Ritchie e Thompson consideraram a adição de estruturas que não estavam em B, SMALGOL, BCPL e CPL alterações significativas o suficiente para renomear o idioma, e B tornou-se C.



Vida sob o símbolo C





Christopher Strachey em 1955 com Ferranti Mark 1 (também conhecido como Manchester Electronic Computer).



C escapou do Bell Labs da mesma forma que o Unix. Isso ajudou a tornar o PDP-11 rapidamente um dos minicomputadores de maior sucesso no mercado, mas foi o preço do Unix que o tornou mais atraente. Qualquer data center com um PDP-11 poderia instalar o Unix ao custo de mídia e correio, e



C vinha com o Unix. A presença de C em tantos campi foi, de acordo com Thompson, a principal razão de seu sucesso. Na carta, ele escreveu que "eles se formaram em um monte de caras que conheciam C".



Um impulso adicional para o sucesso do C foi a publicação em 1978 de The C Programming LanguageDennis Ritchie e Brian Kernighan. Um pequeno livro de 228 páginas tornou-se, mesmo para os padrões da época, uma obra extremamente simples e acessível.



Um amplo conhecimento da sintaxe C influenciou o desenvolvimento de muitas linguagens que se seguiram, com pouca ou nenhuma semelhança com C. Linguagens de script como PHP e JavaScript contêm bits de notação de programação que Thompson projetou originalmente para caber B na pequena área de cobertura de memória do PDP-7. Por exemplo, esses são os operadores de incremento e decremento "++". Quando você tem apenas 4.000 palavras para trabalhar, reduzir "x = x + 1" para "x ++" economiza uma boa quantidade de espaço.



Thompson nunca pensou que C seria tão difundido. “Havia muitas linguagens completamente diferentes, muito interessantes e úteis por aí”, disse Thompson. "Meu senso estético me disse que uma língua não pode cobrir todas as necessidades do universo."



Como o Unix, C foi um sucesso nascido do fracasso. Em ambos os casos, os programadores pegaram as melhores partes de projetos que estavam condenados porque muito foi pedido deles. O Multics, que deu origem ao Unix, foi usado em seu pico em apenas cerca de 80 computadores, e o CPL, que acabou levando à criação do C, nunca foi concluído, e os pesquisadores de Cambridge o abandonaram em 1967.



Quando Christopher Strachey começou o grupo de pesquisa de programação em Oxford, ele disse, "dividir o trabalho em prático e teórico é artificial e prejudicial".

E embora o CPL devesse combinar os lados prático e teórico, acabou sendo muito teórico na implementação. O grupo de trabalho da CPL não tentou programar na CPL.



No entanto, mesmo que Strachey não tenha conseguido uma síntese entre teoria e prática na CPL, sua atitude foi definitivamente correta. “C foi escrito para escrever Unix”, lembra Thompson. E "Unix foi escrito para que todos pudéssemos escrever programas."






Publicidade



Servidores baratos para qualquer tarefa - trata-se de nossos servidores épicos . Crie seu próprio plano em alguns cliques, configuração máxima - 128 núcleos de CPU, 512 GB de RAM, 4000 GB NVMe.






All Articles