Frank Coelho de Alcantara -2020
Pai, marido, professor, engenheiro eletricista especializado em eletrônica,
Mestre em Ciência Gestão e Tecnologia da Informação, CTO da Tefway Tecnologias, consultor e curioso.
Muito Curioso!
Estou no Linkedin -
e gostaria de tê-los na
minha rede de relacionamentos.
Veremos um pouco da história da computação, os conceitos de compilação e interpretação e a matemática que suporta a criação de linguagens de programação.
Vamos tratar de máquinas abstratas feitas para entender a linguagem que os programadores usam para criar algoritmos e resolver problemas.
Vamos explorar os processos de tradução que são utilizados por compiladores e interpretadores. E, principalmente, entender esta tecnologia.
Poderíamos dizer que a história da computação começou quando o primeiro homem colocou algumas pedras no chão para saber com quantas ovelhas saiu para o pasto e com quantas voltou.
Vamos marcar o começo da computação em algum trabalho científico do começo do Século XX. Talvez, os Trabalhos de Turing sejam o ponto ideal mas, falaremos sobre isso em outro tópico.
O conceito de linguagem de programação começou a ser construído a partir de 1946 com a criação de Plankalkül por Konrad Suze, um engenheiro alemão que criou o primeiro computador com relés e com a sua própria linguagem de programação, Plankalkül.
Podemos correr o risco de afirmar que o compilador, foi criado em 1951 pela equipe liderada por Grace Hopper enquanto trabalhava na Remington Rand, e chamado de A-0.
Source Flickr: Grace Hopper and UNIVAC
Poucos anos depois, em 1957 John Backus, trabalhando na IBM, criou o Fortran (FORmula TRANslation).
Entre os conceitos apresentados por Chomsky estava o conceito de gramáticas livres de contexto, que se mostrou extremamente útil para a descrição da sintaxe de linguagens formais, principalmente para as linguagens de programação.
John Backus, criou uma linguagem de programação apenas para provar que um processo de descrição, por meio de uma linguagem específica, poderia ser usado para criar uma linguagem de programação, esta meta linguagem recebeu o nome de Backus Normal Form.
O ALGOL-60, marca a primeira vez em que uma linguagem baseada em uma notação formal, Backus-Naur-Form¸ foi usada para definir uma linguagem de programação.
Em 1959, é publicado o COBOL, por um comitê de pesquisadores liderados por Grace Hopper. A mesma Grace Hopper que alguns anos antes havia trabalhado na criação do primeiro compilador.
No dia 1º de Maio de 1964, aproximadamente as 4:00h foi executado o primeiro programa em Basic, fruto do trabalho de John G. Kemeny e Thomas E. Kurtz, no Dartmouth College.
O C, criado em 1972 por Dennis Ritchie nos laboratórios da Bell para ser utilizada no Sistema Operacional Unix desenvolvida sobre outra linguagem a B, que fora desenvolvida por Ken Thompson para permitir o porte do Unix para o computador PDP-11.
LINGUAGEM | ANO | DESENVOLVIDA POR |
---|---|---|
Algol | 1960 | International Group (Backus-Naur) |
BCPL | 1967 | Martin Richard |
B | 1970 | Ken Thompson |
C | 1972 | Dennis Ritchie |
K & R C | 1978 | Brian Kernighan & Dennis Ritchie |
ANSI C | 1989 | Comitê ANSI |
ANSI/ISO C | 1990 | Comitê ISO |
C99 | 1999 | Comitê de Padronização da ISO |
C18 | 2018 | Comitê de Padronização da ISO |
Em 1984 que é publicada a primeira versão do C++ por Bjarne Stroustrup, a partir da tese desenvolvida em seu doutorado no ano de 1979, dando um impulso significativo as linguagens de programação orientadas a objeto.
O C++ foi a linguagem que levou programação orientada a objetos para as multidões.
E chegamos a era da web, Rasmus Lerdorf com o PHP (1994), Guido Van Rossum com o Python (1989) e Brendan Eich com o Javascript (1995) movimentam a Internet permitindo a expansão da web e a criação de tecnologias remotas e interativas.
Na segunda década do Século XXI, chegamos as linguagens voltadas para a computação quântica: CIRQ, do Google; Q# da Microsoft e Q da IBM
Usamos máquinas para resolver problemas desde que o primeiro homem utilizou um graveto para pegar uma fruta ou matar um animal.
Apenas no Século XX conseguimos nos comunicar com as máquinas e conseguimos dizer o que queremos que elas façam.
O conjunto formado pela CPU, memória e dispositivos de entrada e saída é responsável pela execução direta de todas as instruções que desejamos que a máquina execute. Este conjunto de dispositivos entende apenas os símbolos 0 e 1 (zero e um). Esta é uma linguagem, baseada apenas em um conjunto de símbolos, ou alfabeto, definido por: $\Sigma_{b} = \left\{ 0,1 \right\}$.
A linguagem de máquina é a mais formal e específica linguagem envolvida nos processos de computação. Isso a torna praticamente impossível de usada por seres humanos.
O Assembly é apenas uma coleção de mnemônicos organizada sobre uma sintaxe e semânticas simples que representam de forma mais adequada ao ser humano, as instruções em binário que queremos que a máquina execute.
O Assembly não é linguagem de máquina. Só para enfatizar, vou repetir: o Assembly não é linguagem de máquina. Sequer a linguagem baseada no alfabeto $\Sigma_{h}$, hexadecimal, pode ser chamada de linguagem de máquina.
O Assembler traduz uma linguagem de baixo nível, formal e desenhada para uso humano em código de máquina. Ainda que a linguagem Assembly, objeto o Assembler, seja muito simples, pouco mais que uma linguagem puramente simbólica, e muito próxima do nível da linguagem de máquina, ela tem estrutura léxica, sintática e semântica como qualquer outra linguagem de programação.
Compiladores e interpretadores são estruturas software, ou hardware, que fazem a tradução de uma linguagem formal e regular, criada para uso humano em uma linguagem de máquina. Se você está pensando que um Assembler é uma espécie de compilador, não está muito longe da verdade.
Cada arquitetura de hardware, x86_64, ARM, RISC-V tem as suas próprias características de forma que um conjunto de zeros e uns pode significar coisas completamente diferente em máquinas diferentes. Isto faz com que o Assembler seja um tradutor altamente especializado.
As linguagens de programação são linguagens formais, desenvolvidas para uso humano que foram criadas para explicitar as funcionalidade mínimas necessárias para tornar possível que um pobre ser humano possa escrever um algoritmo, e entender aquilo que está escrevendo, e preservar a esperança que outros seres humanos também sejam capazes de entender o que ele escreveu.
Baixe o material de apoio clicando aqui