You are on page 1of 51

L AB O RATO R I O

Department of Computer Science

DE

C O M P I LAD O R E S

Universidade Federal de Minas Gerais

Linguagens de Programao
Fernando Magno Quinto Pereira

Brazil

O que so linguagens de programao?


Por que elas existem?
Como computadores eram programados antes
das linguagens de programao?

A Torre de Babel
Existem entre 5.000 e 6.000
lnguas faladas em nosso
planeta.
Cerca de 200 idiomas
possuem mais de um milho
de falantes.
Como descrever um idioma?
Que elementos esto
presentes na descrio de
uma linguagem?

Computadores tambm conversam


Como a linguagem
falada pelos
computadores?
Que smbolos ela usa?
Quais palavras?
Como seria a gramMca
dessa lngua eletrnica?

Vamos falar zero-um-ns?


Computadores possuem
cordas vocais muito simples:
ou emitem som, ou no
emitem
possvel haver uma
linguagem com apenas dois
smbolos?
Porque somente dois
smbolos?

Dialetos do zero-um-ns
H muitas linguagens de
zeros e uns diferentes, assim
como h muitas linguagens
diferentes usando
caracteres laMnos: ingls,
portugus, espanhol, etc.
Quem me d exemplos de
zero-um-ns diferentes?

The book is on the table


Cada instruo em zero-um-ns possui um
nome, chamado opcode, e operandos.
Instrues mudam o estado do computador.
Que Mpos de instrues poderiam exisMr?
Falar zero-um-ns deve ser fcil, no ?

Mas no no
AnMgamente programar
computadores era muito
di[cil.
Qual o problema com zeroum-ns?
Algum ai conhece cartes
perfurados?
Como deixar zero-um-ns
mais fcil de usar?

E veio a Deusa
Palavras so mais fceis
de lembrar que
sequncias de zeros e
uns.
Por exemplo: qual
instruo mais fcil de
ler: mov $1, AL, ou
10110000
01100001?

O Que este programa faz?


movl $5, %eax
movl $1, %edx
.L4:
imull %eax, %edx
decl %eax
testl %eax, $0
jg .L4

O Que este programa faz?


Coloque 5 em %eax

movl $5, %eax


movl $1, %edx
.L4:
imull %eax, %edx
decl %eax
testl %eax, $0
jg .L4

Coloque 1 em %edx
MulMplique %eax por %edx, e
coloque o resultado em %edx
Subtraia 1 de %eax
Teste se %eax Zero
Se Zero, ento v para .L4

O Montador
As pessoas falavam
assembly, mas os
computadores ainda
falavam zero-um-ns.
Era preciso um tradutor.

O que um tradutor
deste Mpo deveria ser
capaz de fazer?

A Deusa no foi suciente


Programar em assembly ainda era di[cil.
Os programadores queriam que os
computadores fossem capazes de falar lnguas
ainda mais parecidas com linguagens
humanas.

Quais foram as primeiras linguagens de


programao?
Quem foram os pais dessas linguagens?

Surge Fortran
John Backus estava com
preguia de escrever
programas em assembly.
IBM 1953/54
Programar cou umas 20
vezes mais fcil
Mas as pessoas ainda
estavam relutantes
Porque?

Exemplo de programa em Fortran


Fortran
nfact=1
do i=1, 5
nfact = nfact*I
enddo

Que novidades surgiram


com Fortran?

Assembly
movl $5, %eax
movl $1, %edx
.L4:
imull %eax, %edx
decl %eax
testl %eax, $0
jg .L4

E Surge LISP
1958, Massachuse<s Ins>tute of Technology
Professor John McCarthy.
Uma notao simples, baseada em funes
matemMcas.
Muitos parnteses,
E listas

Exemplo de Programa em LISP


LISP
(defun factorial (n)
Recurso!
(if (<= n 1)
1
(* n (factorial (- n 1)))))

E quando, nos anos 70,


os soviMcos conseguiram
as lMmas 500 linhas do
sistema de msseis
americanos

Fortran
nfact=1
do i=1, n
nfact = nfact*I
enddo

ALGOL um Mme de estrelas


Precisava-se de um padro para
algoritmos.
Um comit foi formado em 1958.
John Backus
C. A. R. Hoare
John McCarthy, etc

Deste comit nasceu ALGOL 58.


Talvez a mais inuente
linguagem de programao.

ALGOL exemplo
integer procedure Factorial(m); integer m;
Begin
integer F;
F := if m=1 then 1 else m*Factorial(m-1);
Factorial := F
end;

Vocs j viram algo parecido com isto?

E COBOL
COBOL foi feita para negcios:
Contadores, economistas, etc
Como deveria ser uma
linguagem assim?

1958: COBOL foi criada por


um comit.
Indstria, governo e academia

Ainda usada em muitas


companhias, at em BH!

Exemplo de programas em COBOL


ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING
COST.
SUBTRACT DISCOUNT FROM COST GIVING
FINAL-COST.

Quantas linguagens de programao existem?


Quais as linguagens mais populares?

Quantas so?
A editora OReilly diz que
existem 2.500 linguagens
de programao
documentadas.
A wikipdia documenta
650.
Existem muitas
Mas, porque tantas?

Propsitos diferentes
Fortran servia para clculos
cienycos.
Lisp era usada em teoria da
computao.
COBOL foi feita para aplicaes
comerciais.
Algol uma linguagem
acadmica.
E as outras linguagens que
conhecemos?

Quais so as linguagens pop?


Dados reMrados de
www.tiobe.com
Java: 18.71%
C: 16.89%
PHP: 10.39%

Google code: C, Java, C++,


PHP
Craigslist: PHP, C, SQL
Que outras medidas?

Algum a fala Javans?


De acordo com muitos critrios, Java a a
linguagem mais popular.
Para que serve Java?
Como esta linguagem surgiu?
O que ela tem de mais?

Um exemplo de javans:
public class Fact {
public static void main(String a[]) {
int n = 5;
int fact = 1;
while (n > 1) {
fact *= n;
n--;
}
System.out.println(fact);
}
}

A, B, C
C surgiu em 1972, e foi, durante muitos
anos, a linguagem de programao mais
popular.
Porque C tem este nome?
O que a gente faz com C?
Porque C foi to popular?
Quais os problemas com C?
C teve grande inuncia

Falando em C
int main() {
int n = 5;
int fact = 1;
while (n > 1) {
fact *= n;
n--;
}
printf("%d\n", fact);
}

Algum j viu isto antes?

C teve grande inuncia


int n = 5;
int fact = 1;
while (n > 1) {
fact *= n;
n--;
}

int n = 5;
int fact = 1;
while (n > 1) {
fact *= n;
n--;
}

A Internet respira PHP


Algum aqui j programou em PHP?
O que este nome quer dizer?
Como deve ser uma linguagem para
desenvolvimento web?

Um exemplo de PHPs:
$id = $_GET[user];
if ($id == '') {
echo "Invalid user: $id"
} else {
$getuser = $DB->query
(SELECT * FROM 'table' WHERE id=$id);
echo $getuser;
}

Algum notou um pouquinho de C a?


Qual o Mpo da varivel $id?

Computadores falam zero-um-ns, ns


falamos linguagens de programao quem
traduz estas coisas?
E como esta traduo feita?

Compiladores so pontes
O primeiro compilador foi,
provavelmente, o A-0 de
Grace Hopper (1949).
Linguagens de
programao diferentes
possuem diferentes
compiladores.
Mas o mesmo compilador
tambm pode compilar
linguagens diferentes.

Anatomia de um compilador
PowerPC

Fortran
COBOL
Lisp

x86
Front
End

OMmizador

Back
End

ARM

Mquinas Virtuais
Uma mquina virtual um
hardware implementado em
soDware.
Porque isto interessante?
Que linguagens executam
em mquinas virtuais?
Ainda necessrio um
tradutor?

s vezes, tudo interpretado


Um interpretador no produz cdigo de mquina.
Ao contrrio, ele l o cdigo do programa fonte, e
interpreta cada comando encontrado.
Quais as vantagens de um interpretador?
Quais linguagens so
interpretadas?
Ser que h alguma
linguagem que
necessariamente tenha de
ser interpretada?
Essas coisas so eciente?

Fazemos just-in->me
Algumas linguagens so compiladas enquanto
esto sendo interpretadas.
JavaScript, por exemplo.

E de onde vem a ecincia?


Ser que d para fazer
melhor que um compilador
tradicional?

Existe uma linguagem de programao mais


poderosa que todas as outras?
Se existe, que linguagem esta?
Mas como medir este poder?

Fcil ou Di[cil
1. Encontre a rede de estradas mais curta que
liga todas as cidades de Minas Gerais.
2. Encontre a menor rota passando por todas as
cidades, sem repeMr.
3. Dado um programa P para
resolver (2), verique se a
primeira coisa que P
imprime Nova Era.

H que sermos humildes


A mquina de Turing um modelo torico que
dene todos os problemas que so
computveis.
Estado, ta, leitor, smbolos,
instrues.

Se no h soluo
na Mquina de
Turing, ento no
tem jeito mesmo...

Linguagens Turing-Completas
Se uma linguagem equivalente Mquina de
Turing, ento ela Turing-Completa.
Quase toda LP Turing-Completa.
Mas existem linguagens que no o so. Algum
exemplo?

Brain-fuc*
Um arranjo muito grande, contendo nmeros.
Oito comandos:
> move uma posio para direita
< move uma posio para esquerda
+ soma um posio corrente (PC)
- subtrai um da PC
. imprime contedo da PC
, l entrada e armazena na PC
[ vai para comando aps ] se PC zero
] volta para comando aps [ se PC no zero.

O que estes programas fazem?


[-] ou [ > + < - ]

Essas linguagens todas que a gente viu Java,


PHP, C, Fortran, COBOL, Algol, etc, etc elas
so muito parecidas: variveis, loops,
comandos Ser que no existe nenhum
outro paradigma no?

Linguagens ImperaMvas e DeclaraMvas


Linguagens imperaMvas:
O programa so instrues.
Atribuies, loops, sequncias.
Efeitos colaterais e estado.

Linguagens declaraMvas:
O programa descreve uma verdade.
Ausncia de efeitos colaterais.
Loops via chamada de funes recursivas.

SML
O programa um conjunto de funes.
Programas so provas por induo.

Principais estruturas de dados so listas e


tuplas.
fun sum [] = 0
| sum (h::t) = h + sum t
fun filter [] _ = []
| filter (h::t) f =
if (f h)
then h :: (filter f t)
else (filter f t)

SorMng
fun leq a b = a <= b
fun grt a b = a > b
fun filter _ nil = nil
| filter f (h::t) =
if f h then h :: filter f t else filter f t
fun qsort nil = nil
| qsort (h::t) =
(qsort (filter (grt h) t))
@ [h] @
(qsort (filter (leq h) t))

Prolog
O programa um conjunto de restries:
Se A verdade, e A!B verdade, ento B
verdade.
parent(kim, holly).
parent(margaret, kim).
parent(margaret, kent).
parent(esther, margaret).
parent(herbert, margaret).
parent(herbert, jean).

O que produzir
bisavo(X, Y)?

bisavo(GGP, GGC) :parent(GGP, GP), parent(GP, P), parent(P, GGC).


ancestor(X, Y) :- parent(X, Y).
ancestor(X, Y) :- parent(Z, Y), ancestor(X, Z).

Um problema NP-completo
Dada uma lista L de nmeros inteiros, existe uma
sublista S cuja soma seja N?
sum([],0).
sum([Head|Tail],X) :sum(Tail,TailSum),
X is Head + TailSum.
subList([], []).
subList([H|T], [H|R]) :- subList(T, R).
subList([_|T], R) :- subList(T, R).
intSum(L, N, S) :- subList(L, S), sumList(S, N).

Por que saber mais sobre LPs?


Porque elas esto a!
Algumas disputas so
fascinantes.
A histria delas
incrvel.
Diferentes problemas
pedem diferentes
solues.

You might also like