Linguagens de Programação

Propaganda
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
LinguagensdeProgramação
FernandoMagnoQuintãoPereira
−
Brazil
• Oquesãolinguagensdeprogramação?
• Porqueelasexistem?
• Comocomputadoreseramprogramadosantes
daslinguagensdeprogramação?
ATorredeBabel
• Existementre5.000e6.000
línguasfaladasemnosso
planeta.
• Cercade200idiomas
possuemmaisdeummilhão
defalantes.
• Comodescreverumidioma?
Queelementosestão
presentesnadescriçãode
umalinguagem?
Computadorestambémconversam
• Comoéalinguagem
faladapelos
computadores?
– Quesímboloselausa?
– Quaispalavras?
– ComoseriaagramáMca
dessalínguaeletrônica?
Vamosfalarzero-um-nês?
• Computadorespossuem
cordasvocaismuitosimples:
ouemitemsom,ounão
emitem
• Épossívelhaveruma
linguagemcomapenasdois
símbolos?
• Porquesomentedois
símbolos?
Dialetosdozero-um-nês
• Hámuitaslinguagensde
zeroseunsdiferentes,assim
comohámuitaslinguagens
diferentesusando
caractereslaMnos:inglês,
português,espanhol,etc.
• Quemmedáexemplosde
zero-um-nêsdiferentes?
“Thebookisonthetable”
• Cadainstruçãoemzero-um-nêspossuium
nome,chamadoopcode,eoperandos.
• Instruçõesmudamoestadodocomputador.
• QueMposdeinstruçõespoderiamexisMr?
• Falarzero-um-nêsdeveserfácil,nãoé?
Masnãoénão…
• AnMgamenteprogramar
computadoreseramuito
di[cil.
• Qualoproblemacomzeroum-nês?
• Alguémaiconhececartões
perfurados?
• Comodeixarzero-um-nês
maisfácildeusar?
EveioaDeusa
• Palavrassãomaisfáceis
delembrarque
sequênciasdezerose
uns.
• Porexemplo:qual
instruçãoémaisfácilde
ler:mov $1, AL,ou
10110000
01100001?
OQueesteprogramafaz?
movl $5, %eax
movl $1, %edx
.L4:
imull %eax, %edx
decl %eax
testl %eax, $0
jg .L4
OQueesteprogramafaz?
Coloque5em%eax
movl $5, %eax
movl $1, %edx
.L4:
imull %eax, %edx
decl %eax
testl %eax, $0
jg .L4
Coloque1em%edx
MulMplique%eaxpor%edx,e
coloqueoresultadoem%edx
Subtraia1de%eax
Testese%eaxéZero
SeZero,entãovápara.L4
OMontador
• Aspessoasfalavam
assembly,masos
computadoresainda
falavamzero-um-nês.
– Eraprecisoumtradutor.
• Oqueumtradutor
desteMpodeveriaser
capazdefazer?
ADeusanãofoisuficiente
• Programaremassemblyaindaeradi[cil.
• Osprogramadoresqueriamqueos
computadoresfossemcapazesdefalarlínguas
aindamaisparecidascomlinguagens
humanas.
• Quaisforamasprimeiraslinguagensde
programação?
• Quemforamospaisdessaslinguagens?
SurgeFortran
• JohnBackusestavacom
preguiçadeescrever
programasemassembly.
• IBM1953/54
• Programarficouumas20
vezesmaisfácil
– Masaspessoasainda
estavamrelutantes…
Porque?
ExemplodeprogramaemFortran
Fortran
nfact=1
do i=1, 5
nfact = nfact*I
enddo
Quenovidadessurgiram
comFortran?
Assembly
movl $5, %eax
movl $1, %edx
.L4:
imull %eax, %edx
decl %eax
testl %eax, $0
jg .L4
ESurgeLISP
• 1958,Massachuse<sIns>tuteofTechnology
• ProfessorJohnMcCarthy.
• Umanotaçãosimples,baseadaemfunções
matemáMcas.
• Muitosparênteses,
• Elistas…
ExemplodeProgramaemLISP
LISP
(defun factorial (n)
Recursão!
(if (<= n 1)
1
(* n (factorial (- n 1)))))
Equando,nosanos70,
ossoviéMcosconseguiram
asúlMmas500linhasdo
sistemademísseis
americanos…
Fortran
nfact=1
do i=1, n
nfact = nfact*I
enddo
ALGOL–umMmedeestrelas
• Precisava-sedeumpadrãopara
algoritmos.
• Umcomitêfoiformadoem1958.
– JohnBackus
– C.A.R.Hoare
– JohnMcCarthy,etc
• DestecomitênasceuALGOL58.
• Talvezamaisinfluente
linguagemdeprogramação.
ALGOL–exemplo
integerprocedureFactorial(m);integerm;
Begin
integerF;
F:=ifm=1then1elsem*Factorial(m-1);
Factorial:=F
end;
• Vocêsjáviramalgoparecidocomisto?
ECOBOL
• COBOLfoifeitaparanegócios:
– Contadores,economistas,etc
– Comodeveriaseruma
linguagemassim?
• 1958:COBOLfoicriadapor
umcomitê.
– Indústria,governoeacademia
• Aindausadaemmuitas
companhias,atéemBH!
ExemplodeprogramasemCOBOL
ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING
COST.
SUBTRACT DISCOUNT FROM COST GIVING
FINAL-COST.
• Quantaslinguagensdeprogramaçãoexistem?
• Quaisaslinguagensmaispopulares?
Quantassão?
• AeditoraO’Reillydizque
existem2.500linguagens
deprogramação
documentadas.
• Awikipédiadocumenta
650.
• Existemmuitas…
• Mas,porquetantas?
Propósitosdiferentes
• Fortranserviaparacálculos
cienyficos.
• Lisperausadaemteoriada
computação.
• COBOLfoifeitaparaaplicações
comerciais.
• Algoléumalinguagem
acadêmica.
• Easoutraslinguagensque
conhecemos?
Quaissãoaslinguagenspop?
• DadosreMradosde
www.tiobe.com
– Java:18.71%
– C:16.89%
– PHP:10.39%
• Googlecode:C,Java,C++,
PHP
• Craigslist:PHP,C,SQL
• Queoutrasmedidas?
AlguémaífalaJavanês?
• Deacordocommuitoscritérios,Javaéaa
linguagemmaispopular.
• ParaqueserveJava?
• Comoestalinguagemsurgiu?
• Oqueelatemdemais?
Umexemplodejavanês:
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…
• Csurgiuem1972,efoi,durantemuitos
anos,alinguagemdeprogramaçãomais
popular.
• PorqueCtemestenome?
• OqueagentefazcomC?
• PorqueCfoitãopopular?
• QuaisosproblemascomC?
• Ctevegrandeinfluência…
FalandoemC…
int main() {
int n = 5;
int fact = 1;
while (n > 1) {
fact *= n;
n--;
}
printf("%d\n", fact);
}
• Alguémjáviuistoantes?
Ctevegrandeinfluência…
int n = 5;
int fact = 1;
while (n > 1) {
fact *= n;
n--;
}
int n = 5;
int fact = 1;
while (n > 1) {
fact *= n;
n--;
}
AInternetrespiraPHP
• AlguémaquijáprogramouemPHP?
• Oqueestenomequerdizer?
• Comodeveserumalinguagempara
desenvolvimentoweb?
UmexemplodePHPês:
$id = $_GET[”user”];
if ($id == '') {
echo "Invalid user: $id"
} else {
$getuser = $DB->query
(”SELECT * FROM 'table' WHERE id=’$id’”);
echo $getuser;
}
• AlguémnotouumpouquinhodeCaí?
• QualoMpodavariável$id?
• Computadoresfalamzero-um-nês,nós
falamoslinguagensdeprogramação…quem
traduzestascoisas?
• Ecomoestatraduçãoéfeita?
Compiladoressãopontes
• Oprimeirocompiladorfoi,
provavelmente,oA-0de
GraceHopper(1949).
• Linguagensde
programaçãodiferentes
possuemdiferentes
compiladores.
• Masomesmocompilador
tambémpodecompilar
linguagensdiferentes.
Anatomiadeumcompilador
PowerPC
Fortran
COBOL
Lisp
…
x86
Front
End
OMmizador
Back
End
ARM
…
MáquinasVirtuais
• Umamáquinavirtualéum
hardwareimplementadoem
soDware.
• Porqueistoéinteressante?
• Quelinguagensexecutam
emmáquinasvirtuais?
• Aindaénecessárioum
tradutor?
Àsvezes,tudoéinterpretado
• Uminterpretadornãoproduzcódigodemáquina.
Aocontrário,elelêocódigodoprogramafonte,e
interpretacadacomandoencontrado.
• Quaisasvantagensdeuminterpretador?
• Quaislinguagenssão
interpretadas?
• Seráqueháalguma
linguagemque
necessariamentetenhade
serinterpretada?
• Essascoisassãoeficiente?
Fazemosjust-in->me
• Algumaslinguagenssãocompiladasenquanto
estãosendointerpretadas.
– JavaScript,porexemplo.
• Edeondevemaeficiência?
• Seráquedáparafazer
melhorqueumcompilador
tradicional?
• Existeumalinguagemdeprogramação“mais
poderosa”quetodasasoutras?
• Seexiste,quelinguageméesta?
• Mascomomedireste“poder”?
FácilouDi[cil
1. Encontrearededeestradasmaiscurtaque
ligatodasascidadesdeMinasGerais.
2. Encontreamenorrotapassandoportodasas
cidades,semrepeMr.
3. DadoumprogramaPpara
resolver(2),verifiquesea
primeiracoisaqueP
imprimeéNovaEra.
Háquesermoshumildes
• AmáquinadeTuringéummodelotéoricoque
definetodososproblemasquesão
computáveis.
– Estado,fita,leitor,símbolos,
instruções.
• Senãohásolução
naMáquinade
Turing,entãonão
temjeitomesmo...
LinguagensTuring-Completas
• SeumalinguageméequivalenteàMáquinade
Turing,entãoelaéTuring-Completa.
• QuasetodaLPéTuring-Completa.
• Masexistemlinguagensquenãoosão.Algum
exemplo?
Brain-fuc*
Umarranjomuitogrande,contendonúmeros.
Oitocomandos:
>moveumaposiçãoparadireita
<moveumaposiçãoparaesquerda
+somaumàposiçãocorrente(PC)
-subtraiumdaPC
.imprimeconteúdodaPC
,lêentradaearmazenanaPC
[vaiparacomandoapós]sePCézero
]voltaparacomandoapós[sePCnãoézero.
Oqueestesprogramasfazem?
[-]ou[ > + < - ]
• Essaslinguagenstodasqueagenteviu…Java,
PHP,C,Fortran,COBOL,Algol,etc,etc…elas
sãomuitoparecidas:variáveis,loops,
comandos…Seráquenãoexistenenhum
outroparadigmanão?
LinguagensImperaMvaseDeclaraMvas
• LinguagensimperaMvas:
– Oprogramasãoinstruções.
– Atribuições,loops,sequências.
– Efeitoscolateraiseestado.
• LinguagensdeclaraMvas:
– Oprogramadescreveumaverdade.
– Ausênciadeefeitoscolaterais.
– Loopsviachamadadefunçõesrecursivas.
SML
• Oprogramaéumconjuntodefunções.
– Programassãoprovasporindução.
• Principaisestruturasdedadossãolistase
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
• Oprogramaéumconjuntoderestrições:
– SeAéverdade,eA!Béverdade,entãoBé
verdade.
parent(kim, holly).
parent(margaret, kim).
parent(margaret, kent).
parent(esther, margaret).
parent(herbert, margaret).
parent(herbert, jean).
• Oqueproduzirá
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).
UmproblemaNP-completo
DadaumalistaLdenúmerosinteiros,existeuma
sublistaScujasomasejaN?
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).
PorquesabermaissobreLPs?
• Porqueelasestãoaí!
• Algumasdisputassão
fascinantes.
• Ahistóriadelasé
incrível.
• Diferentesproblemas
pedemdiferentes
soluções.
Download