Nosso próximo assunto será a discussão das linguagens de baixo nível. Mais especificamente nos dedicaremos a examinar a estrutura e as diferenças entre a linguagem de máquina e a linguagem assembly. Mas não seria correto fazê-lo sem antes falar sobre Almirante Hopper. Conhece? Acha que é um modo meio estranho de começar uma abordagem sobre linguagem de máquina e assembly? Pois se você está surpreso, mais ainda ficará ao saber que trata-se “da” Almirante e não “do” Almirante como seria de esperar. Seu nome completo é Grace Murray Hopper, a doce velhinha com o inocente jeitão de vovó da foto da Figura 1 (obtida em < http://www-gap.dcs.st-and.ac.uk/ > no sítio do GAP Group). Mas não se deixe iludir pela aparência pacata da foto. Grace Hopper foi uma mulher muito especial, a primeira pessoa que se pode considerar “engenheira de software” da história da informática. Uma personagem histórica, que divide com Ada Byron o honroso posto de mulher mais importante da história dos computadores.
|
Figura 1: Almirante Grace Hopper (quando oficial da reserva) |
Grace Hopper viveu quase todo o século passado: nasceu em 1906, em New York, EUA, e faleceu em 1992, em Arlington. Formou-se em matemática em 1928 na conceituadíssima universidade de Vassar. Fez mestrado e doutorado em Yale e voltou a Vassar para lecionar em 1931. De família com tradição militar, deixou a vida universitária em 1943, durante a segunda guerra mundial, para se alistar na marinha americana, onde fez carreira.
Sua primeira missão após alguns meses de treinamento para assumir a patente de tenente foi no laboratório de computação da marinha na Universidade de Harvard, onde se apresentou para trabalhar sob as ordens de Howard Aiken, o homem que havia convencido o Governo Americano e as autoridades acadêmicas a fabricar o ASCC (Automatic Sequence Controlled Calculator), uma calculadora eletromecânica semelhante à máquina Hollerith porém baseada nas idéias de Babbage (considerado como o homem que “inventou” o computador mas não conseguiu fabricá-lo devido às limitações tecnológicas da época). A máquina de calcular de Aiken não era propriamente de bolso: usando relés como dispositivo lógico elementar, pesava 35 toneladas e seus relés eram interligados por mais de 800 km de fio. Tudo isso para efetuar cálculos com até 23 algarismos significativos. A entrada era feita exclusivamente através de cartões perfurados e a saída poderia ser tanto em cartões perfurados quanto em páginas impressas em uma máquina de escrever elétrica. Era controlada por uma seqüência de instruções (daí seu nome) fornecida em cartões perfurados.
Este foi o instrumento de trabalho de Grace Hopper. Que, ao se apresentar a Aiken em Harvard, foi recebida com duas frases: “Where the hell have you been?” (Onde diabos andava você?) e, apontando para o ASCC: “Here, compute the coefficients of the arc tangent series by next Thursday” (Aqui, calcule os coeficientes da série dos arcos tangentes até quinta-feira próxima”). Nessa época, aos vinte e poucos anos, Grace tinha o aspecto da foto da Figura 2 (obtida igualmente em < http://www-gap.dcs.st-and.ac.uk/ > no sítio do GAP Group).
|
Figura 2: Tenente Grace Hopper |
Hopper não apenas aprendeu a programar a máquina como também redigiu seu manual de operação, um calhamaço de 500 páginas no qual lançou os fundamentos dos princípios operacionais de computadores. Dois anos depois ela já trabalhava na versão aperfeiçoada do ASCC, um computador baseado em relés conhecido como Mark II, também concebido por Aiken, tido como o primeiro computador de uso geral efetivamente funcional. Em 1949 interrompeu sua carreira na marinha (à qual retornou alguns anos depois e onde permaneceu até reformar-se como Almirante em 1986) para assumir um posto na Eckert-Mauchly Corporation, a empresa recém fundada por John Eckert e John Mauchly para fabricar o primeiro computador comercial (a válvulas): o UNIVAC (Universal Automatic Computer). Sua função: desenvolver um compilador para a máquina. Por que ela? Porque alguns anos antes, quando trabalhava no Mark II, ela havia “inventado” o conceito de compilador. O que explica o começo da coluna.
Como se vê a Almirante Grace Hopper desempenhou um papel importante nos albores da história da informática.
Mas antes de chegarmos ao compilador e às linguagens de baixo nível, vale a pena mencionar três pontos interessantes para ilustrar a personalidade desta a mulher formidável. O primeiro pode ser verificado através de uma mera consulta a seu curriculum vitae, em < http://wayne.home.texas.net/~wayne/grace1.html >: sob o título “Prêmios e honrarias” há quase setenta itens, incluindo dezenas (sem exagero) de títulos de “Doutor Honoris Causa” das mais reputadas instituições de ensino americanas.
O segundo: até há cerca de quinze anos, antes das linguagens orientadas a objeto se popularizarem, a linguagem de programação comercial mais amplamente utilizada era o COBOL (COmmon Business Oriented Language), uma linguagem de alto nível que, incidentalmente, teve um recrudescimento em popularidade há alguns anos com o frustrante “bug do ano 2000” (quando houve uma correria em busca de programadores COBOL para rever os programas fonte responsáveis pelas rotinas administrativa e financeira de dezenas de corporações, muitas de grande porte). COBOL foi, juntamente com FORTRAN (de “FORmula TRANslation”, linguagem usada principalmente para aplicações técnicas e científicas), as linguagens “profissionais” mais disseminadas e populares durante toda a segunda metade do século passado (a linguagem “não profissional” mais popular era o BASIC, acrônimo de Beginner’s All purpose Symbolic Instruction Code”). Pois bem: as bases teóricas e a primeira versão do COBOL, a primeira “linguagem de alto nível”, foram desenvolvidas por Grace Hopper.
E já que falamos em bug, vamos ao terceiro ponto.
Em 1946, operando o Mark II, um computador baseado em relés, Grace Hopper deparou-se com um problema difícil de contornar: um erro intermitente. Um relé, como bem sabemos todos, é um interruptor com controle eletromagnético: ao aplicar-se uma corrente a uma bobina cria-se um campo magnético que atrai uma pequena peça de aço para junto do núcleo da bobina, fechando o contato entre eles. Ao cortar-se a corrente, uma mola afasta os terminais, interrompendo o circuito. E um dos relés comportava-se de forma inesperada, mantendo-se eventualmente aberto mesmo quando se aplicava corrente à sua bobina (o que, como vocês já devem ter percebido, criava um bit “zero” onde deveria haver um bit “um”, gerando aquilo que hoje chamamos de um “bug” no programa). Tratava-se, mais especificamente, do relé de número 70 do painel F do Mark II.
Como é que eu sei disso? Porque Grace Hopper foi até lá e encontrou o bug que se interpunha entre os terminais do relé impedindo o contato. Fez mais: removeu-o cuidadosamente (bug em inglês significa “inseto”; no caso, tratava-se de uma pequena mariposa) e, às 15h45min do dia 9 de setembro colou-o com fita adesiva na página 92 do livro de ocorrências operacionais do computador Mark II, escrevendo ao lado: “Relé #70, Painel F, (mariposa) no relé”. E, logo abaixo: “First actual case of bug being found” (primeiro caso real de bug encontrado). Se duvida veja a Figura 3, foto obtida no sítio do Naval Historical Center do Ministério da Marinha Americano, em < http://www.history.navy.mil/ >.
|
Figura 3: Foto do primeiro bug detectado |
Portanto foi Grace Hoper a pioneira do uso do termo “bug” para designar um erro no fluxo do programa. E, ironicamente, tornou-se mais conhecida por isso que por haver desenvolvido o COBOL e criado a linguagem Assembly...
Sim, porque foi também Grace Hopper que “inventou” o conceito de assembly. Nosso próximo assunto.
B.
Piropo