Escolar Documentos
Profissional Documentos
Cultura Documentos
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)?
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).