Anda di halaman 1dari 50

LinguagensdeProgramao

FernandoMagnoQuintoPereira

Oquesolinguagensdeprogramao?
Porqueelasexistem?
Comocomputadoreseramprogramadosantes
daslinguagensdeprogramao?

ATorredeBabel
Existementre5.000e6.000
lnguasfaladasemnosso
planeta.
Cercade200idiomas
possuemmaisdeummilho
defalantes.
Comodescreverumidioma?
Queelementosesto
presentesnadescriode
umalinguagem?

Computadorestambmconversam
Comoalinguagem
faladapelos
computadores?
Quesmboloselausa?
Quaispalavras?
ComoseriaagramMca
dessalnguaeletrnica?

Vamosfalarzeroumns?
Computadorespossuem
cordasvocaismuitosimples:
ouemitemsom,ouno
emitem
possvelhaveruma
linguagemcomapenasdois
smbolos?
Porquesomentedois
smbolos?

Dialetosdozeroumns
Hmuitaslinguagensde
zeroseunsdiferentes,assim
comohmuitaslinguagens
diferentesusando
caractereslaMnos:ingls,
portugus,espanhol,etc.
Quemmedexemplosde
zeroumnsdiferentes?

Thebookisonthetable
Cadainstruoemzeroumnspossuium
nome,chamadoopcode,eoperandos.
Instruesmudamoestadodocomputador.
QueMposdeinstruespoderiamexisMr?
Falarzeroumnsdeveserfcil,no?

Masnono
AnMgamenteprogramar
computadoreseramuito
di[cil.
Qualoproblemacomzero
umns?
Algumaiconhececartes
perfurados?
Comodeixarzeroumns
maisfcildeusar?

EveioaDeusa
Palavrassomaisfceis
delembrarque
sequnciasdezerose
uns.
Porexemplo:qual
instruomaisfcilde
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?
movl $5, %eax
movl $1, %edx
.L4:
imull %eax, %edx
decl %eax
testl %eax, $0
jg .L4

Coloque5emeax
Coloque1emedx
MulMpliqueeaxporedxe
coloqueoresultadoemedx
Subtraia1deeax
Testeseeax0

no

OMontador
Aspessoasfalavam
assembly,masos
computadoresainda
falavamzeroumns.
Eraprecisoumtradutor.

Oqueumtradutor
desteMpodeveriaser
capazdefazer?

ADeusanofoisuciente
Programaremassemblyaindaeradi[cil.
Osprogramadoresqueriamqueos
computadoresfossemcapazesdefalarlnguas
aindamaisparecidascomlinguagens
humanas.

Quaisforamasprimeiraslinguagensde
programao?
Quemforamospaisdessaslinguagens?

SurgeFortran
JohnBackusestavacom
preguiadeescrever
programasemassembly.
IBM1953/54
Programarcouumas20
vezesmaisfcil
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.
Umanotaosimples,baseadaemfunes
matemMcas.
Muitosparnteses,
Elistas

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

Equando,nosanos70,
ossoviMcosconseguiram
aslMmas500linhasdo
sistemademsseis
americanos

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

ALGOLumMmedeestrelas
Precisavasedeumpadropara
algoritmos.
Umcomitfoiformadoem1958.
JohnBackus
C.A.R.Hoare
JohnMcCarthy,etc

DessecomitnasceuALGOL58.
Talvezamaisinuente
linguagemdeprogramao.

ALGOLexemplo
integerprocedureFactorial(m);integerm;
Begin
integerF;
F:=ifm=1then1elsem*Factorial(m1);
Factorial:=F
end;

Vocsjviramalgoparecidocomisto?

ECOBOL
COBOLfoifeitaparanegcios:
Contadores,economistas,etc
Comodeveriaseruma
linguagemassim?

1958:COBOLfoicriadapor
umcomit.
Indstria,governoeacademia

Aindausadaemmuitas
companhias,atemBH!

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

Quantaslinguagensdeprogramaoexistem?
Quaisaslinguagensmaispopulares?

Quantasso?
AeditoraOReillydizque
existem2.500linguagens
deprogramao
documentadas.
Awikipdiadocumenta
650.
Existemmuitas
Mas,porquetantas?

Propsitosdiferentes
Fortranserviaparaclculos
cienwcos.
Lisperausadaemteoriada
computao.
COBOLfoifeitaparaaplicaes
comerciais.
Algolumalinguagem
acadmica.
Easoutraslinguagensque
conhecemos?

Quaissoaslinguagenspop?
DadosreMradosde
www.tiobe.com
Java:18.71%
C:16.89%
PHP:10.39%

Googlecode:C,Java,C++,
PHP
Craigslist:PHP,C,SQL
Queoutrasmedidas?

AlgumafalaJavans?
Deacordocommuitoscritrios,Javaaa
linguagemmaispopular.
ParaqueserveJava?
Comoessalinguagemsurgiu?
Oqueelatemdemais?

Umexemplodejavans:
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,alinguagemdeprogramaomais
popular.
PorqueCtemestenome?
OqueagentefazcomC?
PorqueCfoitopopular?
QuaisosproblemascomC?
Ctevegrandeinuncia

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

Algumjviuistoantes?

Ctevegrandeinuncia
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
AlgumaquijprogramouemPHP?
Oqueessenomequerdizer?
Comodeveserumalinguagempara
desenvolvimentoweb?

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

AlgumnotouumpouquinhodeCa?
QualoMpodavarivel$id?

Computadoresfalamzeroumns,ns
falamoslinguagensdeprogramaoquem
traduzestascoisas?
Ecomoessatraduofeita?

Compiladoressopontes
Oprimeirocompiladorfoi,
provavelmente,oA-0de
GraceHopper(1949).
Linguagensde
programaodiferentes
possuemdiferentes
compiladores.
Masomesmocompilador
tambmpodecompilar
linguagensdiferentes.

Anatomiadeumcompilador
PowerPC

Fortran
COBOL
Lisp

x86
Front
End

OMmizador

Back
End

ARM

MquinasVirtuais
Umamquinavirtualum
hardwareimplementadoem
soEware.
Porqueissointeressante?
Quelinguagensexecutam
emmquinasvirtuais?
Aindanecessrioum
tradutor?

svezes,tudointerpretado
Uminterpretadornoproduzcdigodemquina.
Aocontrrio,elelocdigodoprogramafonte,e
interpretacadacomandoencontrado.
Quaisasvantagensdeuminterpretador?
Quaislinguagensso
interpretadas?
Serquehalguma
linguagemque
necessariamentetenhade
serinterpretada?
Essascoisassoeciente?

Fazemosjustin?me
Algumaslinguagenssocompiladasenquanto
estosendointerpretadas.
JavaScript,porexemplo.

Edeondevemaecincia?
Serquedparafazer
melhorqueumcompilador
tradicional?

Existeumalinguagemdeprogramaomais
poderosaquetodasasoutras?
Seexiste,quelinguagemessa?
Mascomomediressepoder?

FcilouDi[cil
1. Encontrearededeestradasmaiscurtaque
ligatodasascidadesdeMinasGerais.
2. Encontreamenorrotapassandoportodasas
cidades,semrepeMr.
3. DadoumprogramaPpara
resolver(2),veriquesea
primeiracoisaqueP
imprimeNovaEra.

Hquesermoshumildes
AmquinadeTuringummodelotoricoque
denetodososproblemasqueso
computveis.
Estado,ta,leitor,smbolos,
instrues.

Senohsoluo
naMquinade
Turing,entono
temjeitomesmo...

LinguagensTuringCompletas
SeumalinguagemequivalenteMquinade
Turing,entoelaTuringCompleta.
QuasetodaLPTuringCompleta.
Masexistemlinguagensquenooso.Algum
exemplo?

Brainfuc*
Umarranjomuitogrande,contendonmeros.
Oitocomandos:
>moveumaposioparadireita
<moveumaposioparaesquerda
+somaumposiocorrente(PC)
subtraiumdaPC
.imprimecontedodaPC
,lentradaearmazenanaPC
[vaiparacomandoaps]sePCzero
]voltaparacomandoaps[sePCnozero.

Oqueestesprogramasfazem?
[-]ou[ > + < - ]

EssaslinguagenstodasqueagenteviuJava,
PHP,C,Fortran,COBOL,Algol,etc,etcelas
somuitoparecidas:variveis,loops,
comandosSerquenoexistenenhum
outroparadigmano?

LinguagensImperaMvaseDeclaraMvas
LinguagensimperaMvas:
Oprogramainstruicomomudaroestadoda
mquina.
Variveis,loops,sequnciasdecomandos.
Efeitoscolaterais.Existefunoqueretorna
valoresdiferentesdadosparmetrosiguais?

LinguagensdeclaraMvas:
Oprogramadescreveumaverdade.
Ausnciadeefeitoscolaterais.
Loopsviachamadadefunesrecursivas.

SML
Oprogramaumconjuntodefunes.
Programassoprovasporinduo.

Principaisestruturasdedadossolistase
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
Oprogramaumconjuntoderestries:
SeAverdade,eABverdade,entoB
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).

UmproblemaNPcompleto
DadaumalistaLdenmerosinteiros,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).

Anda mungkin juga menyukai