Professional Documents
Culture Documents
Sebesta
1. Por que til para um programador ter alguma experincia no projeto de linguagens, mesmo
que ele nunca projete uma linguagem de programao?
Habilidade aumentada para aprender novas linguagens: Quando se aprende os conceitos dos
paradigmas por traz de uma linguagem, fica muito mais fcil entender linguagens que utilizem
aquele paradigma.
Avano geral da computao: Uma determinada linguagem pode acabar sendo melhor que
outra, mas no apresentar muita notoriedade. Em alguns casos uma determinada linguagem
pode ser baseada em uma mais antiga, trazendo consigo aspectos antigos e novos.
R: Uma linguagem de programao poder X poder ganhar notoriedade em face uma linguagem
de programao Y com base em possveis falhas da X. Ou seja, a comunidade poder ganhar
novas linguagens que substituem aquelas que so tidas como ruins ou at mesmo criar novas
para atingir objetivos especficos (suponha que Y uma linguagem boa, mas no possui recursos
web, uma nova linguagem W poder ser construda com base em Y e mais outros elementos para
preencher a lacuna de linguagem para web). Em suma, a comunidade pode sempre verificar os
pontos fortes e fracos numa linguagem, criando outras melhores, tomando como base sempre os
pontos fortes dela (e seu paradigma) e melhorando o que falta.
3. Que linguagem de programao tem dominado a computao cientfica nos ltimos 50 anos?
R: Fortran tem sido muito utilizada no ramo da computao cientfica, tendo sofrido diversas
atualizaes durante os anos.
4. Que linguagem de programao tem dominado as aplicaes de negcios nos ltimos 50 anos?
R: COBOL, uma vez que considerado com uma excelente linguagem geradora de relatrios.
5. Que linguagem de programao tem dominado a Inteligncia Artificial nos ltimos 50 anos?
R: Lisp, uma vez que a linguagem utiliza a notao lambda e tambm trabalha extensivamente
com listas e outras estruturas elementares tanto utilizadas em aplicaes de inteligncia.
R: O sistema Unix foi escrito em linguagem C, em meados de 1970. Denis Ritchie foi o idealizador
desta linguagem e graas ao sistema Unix ela obteve uma grande fama. Atualmente C muito
utilizado em sistemas embarcados.
R: Uma linguagem que contenha muitos recursos tender a consumir muito processamento ou
espao em memria.
11. Que sentena de controle primitiva usada para construir sentenas de controle mais
complicadas em linguagens que no as tm?
R: Voc pode usar vetores e ponteiros para construir sentenas muito mais complexas, como por
exemplo listas encadeadas, rvores e outros. No caso voc poder utilizar a ideia de vetores e
ponteiros associados a algum tipo de dado primitivo, como o int, criando assim uma estrutura de
dados como uma lista que armazena valores inteiros.
R: A abstrao algo tido como importante pois permite a facilidade de escrita de uma linguagem.
Um exemplo de abstrao pode ser encontrado na construo de uma funo (subprograma), a
fim de resolver algum problema especfico nele. Se no fosse possvel ter essa abstrao, o
cdigo dessa funo teria que ser replicado nos diversos pontos do programa onde ele fosse
utilizado.
R: Um programa tido como confivel quando est de acordo com suas especificaes em todas
as condies. Alm disso existem basicamente dois pontos que levam um programa ser tido como
confivel:
Verificao de tipos: Um programa executa testes para detectar erros de tipo, tanto em tempo de
compilao, quanto em tempo de execuo.
18. Como o custo de compiladores para uma linguagem est relacionado ao projeto dela?
19. Qual tem sido a influncia mais forte no projeto de linguagens de programao nos ltimos 50
anos?
20. Qual o nome da categoria de linguagens de programao cuja estrutura ditada pela
arquitetura de computadores de von Neumann?
21. Que duas deficincias das linguagens de programao foram descobertas como um resultado
da pesquisa em desenvolvimento de software dos anos 1970?
R: Primeiramente, antes dos anos 1970, as estruturas condicionais usavam muito goto, o que
em muitos casos gerava problemas de legibilidade no cdigo. Um outro problema foi a verificao
de tipos primitivos.
23. Qual foi a primeira linguagem a oferecer suporte aos trs recursos fundamentais da
programao orientada a objetos?
R: Smaltalk
24. D um exemplo de dois critrios de projeto de linguagens que esto em conflito direto um com
o outro.
R: Legibilidade e facilidade de escrita.
26. Qual produz uma execuo de programas mais rpida, um compilador ou um interpretador
puro?
R: A tabela de smbolos serve como uma base de dados para o processo de compilao. O
contedo primrio na tabela de smbolos so informaes de tipo e atributos de cada um dos
nomes definidos pelo usurio no programa. Essa informao colocada na tabela pelos
analisadores lxico e sinttico e usada pelo analisador semntico e pelo gerador de cdigo.
R: O ligador (ou linker) um programa de sistema que tem por objetivo coletar programas de
sistemas e lig - los aos programas de usurio, criando assim o mdulo de carga (tambm
conhecido como imagem executvel).
R: A mxima por trs da arquitetura de Von Neumann que a velocidade de conexo entre a
memria e o processador o que define a velocidade do computador, isso porque as instrues
podem ser executadas com mais freqncia do que movidas da memria para o processador.
Essa caracterstica conhecida como Gargalo de Von Neumann e o fator responsvel pelas
pesquisas em computao paralela. A computao paralela por sua vez uma forma de
computao onde os vrios clculos que o processador realiza so quebrados em problemas
menores (clculos menores) e divididos para serem realizados ao mesmo tempo (ou seja, de
forma paralela).
R: No modo de interpretao puro, o interpretador executa o cdigo escrito de forma direta, sem a
necessidade de um processo de compilao ou criao de um sistema intermedirio (como o
bytecode do Java). A medida que o programa vai sendo lido, ele vai sendo executado. Quando
uma execuo termina e o programa chamado novamente, um novo processo de interpretao
realizado. As vantagens desse modelo consistem em:
1.Voc acredita que nossa capacidade de abstrao influenciada por nosso domnio de
linguagens? Defenda sua opinio.
2.Que argumentos voc pode dar a favor da ideia de uma nica linguagem para todos os
domnios de programao?
R: A nica vantagem nessa abordagem est na facilidade de conseguir fazer tudo utilizando uma
nica linguagem de programao. O programador dever aprender somente esta linguagem, sua
plataforma e ambiente de programao.
3.Java usa um smbolo de fechamento de chaves para marcar o trmino de todas as sentenas
compostas. Quais so os argumentos a favor e contra essa deciso de projeto?
R: No projeto foi determinado que o smbolo { definiria a abertura de um bloco, enquanto que o
} definiria o fechamento de bloco. Em tese isso tende a deixar a linguagem mais arrumada, pois
permite que quem l o cdigo saiba quais instrues esto associadas entre si e seus respectivos
escopos. No entanto, por justamente permitir que seja utilizado { }, um programador poder
simplesmente ignorar a indentao do cdigo, deixando - o mais confuso de ser lido e entendido,
afetando em legibilidade.
4. Muitas linguagens distinguem entre letras minsculas e maisculas em nomes definidos pelo
usurio. Quais so as vantagens e desvantagens dessa deciso de projeto?
R: O uso de caixa baixa e alta na definio dos identificadores pode ser usada para deixar o
cdigo mais fcil e legvel, principalmente quando se utiliza nomes compostos, alm de identificar
se algo faz parte de alguma classe, interface ou biblioteca. Por exemplo, vamos supor os
seguintes identificadores: UIView e SKSpriteNode. O UI do UIView" serve para identificar que
ele faz parte do pacote UIKit, responsvel por interfaces de usurio; j o SK" significa que ele
faz parte do SpriteKit, biblioteca responsvel por gerenciar os elementos bsicos relacionados a
jogos, como sprites, sons, e animaes. Um outro uso de caixa alta seria relacionado ao nome de
classes e objetos, como por exemplo, cachorro = new Cachorro(). Em suma, linguagens que
permitem case sensitive, fazem isso visando ampliar a quantidade de identificadores que podem
ser usados, padronizar o cdigo e facilitar a leitura.
Um ponto negativo fica com relao as linguagens que no requerem definio de tipo na
declarao da varivel, como por exemplo o Python, onde varInteiro = 10 diferente de
varinteiro = 10,
5. Explique os diferentes aspectos do custo de uma linguagem de programao.
R: Existem vrios pontos a serem levantados na hora de avaliar o custo de uma linguagem de
programao, a saber:
R: Pegando o exemplo da linguagem Java, ela por exemplo faz uma verificao por tipo de dados
(e referencias) que fazem parte de um vetor, o que aumenta a segurana, mas ao mesmo tempo
diminui a sua eficincia. Ainda sobre vetores, o java sempre faz uma verificao sobre a
quantidade de elementos dentro de um vetor, novamente provendo uma segurana maior em
relao s falhas de segmentao que poderiam ocorrer, mas tal verificao torna a execuo do
programa mais lenta. Em suma, a linguagem tende a realizar uma srie de pequenas verificaes
em relao a vetores, tipos de variveis e instancias, alm de verificar o uso de memria, o que
acaba gerando uma maior segurana a despeito do programa, mas ao custo de uma certa
lentido na execuo, principalmente se comparado com outras linguagens, como o C++ por
exemplo.
7.Quais recursos principais uma linguagem de programao perfeita deveria incluir, em sua
opinio?
R: Na minha opinio, poderiam haver alguns fatores que ajudariam, tais como suporte a
multimdia e principalmente suporte nativo a criao de GUI. Em muitos casos, para voc criar
uma interface grfica, voc tem que recorrer a bibliotecas e frameworks de terceiros. O mesmo
ocorre com relao a sistemas multimdia. O problema de se implementar tal recurso o custo de
compilao (ou interpretao). Um outro problema justamente o fato da abstrao por parte da
plataforma.
8.A primeira linguagem de programao de alto nvel que voc aprendeu era implementada com
um interpretador puro, um sistema de implementao hbrido ou um compilador? (Voc no
necessariamente saber isso sem pesquisar).
R: A primeira linguagem de alto nvel que aprendi considerada de alto nvel e compilada
(linguagem C). Seguido de C veio o C++ e o Java, sendo a ltima implementada atravs de
sistema hbrido.
R: O Netbeans tem uma vantagem em relao ao Eclipse pelo fato de j conter por padro um
form builder (ferramenta para construir GUI arrastando e configurando componentes), mesmo na
verso mais simples e destinada somente ao Java. A principal desvantagem do ambiente seu
alto consumo de memria e processador quando executado.
J relacionado ao ambiente de programao para iOS, o debuger do Xcode, onde nele voc tem
uma completa visualizao de todos os componentes(podem ser elementos visuais ou objetos
criados) e suas relaes, consumo de memria, energia, processador e rede em tempo real. A
grande desvantagem do Xcode sua integrao com o git, simplista demais e muito limitada
(praticamente inexistente).
10.Como sentenas de declarao de tipos para variveis simples afetam a legibilidade de uma
linguagem, considerando que algumas no precisam de tais declaraes?
R: A declarao do tipo da varivel ajuda o programador a saber o tipo da varivel, evitando erros
em relao a tipos incompatveis.
11.Escreva uma avaliao de alguma linguagem de programao que voc conhea, usando os
critrios descritos neste captulo.
Legibilidade e facilidade de escrita: a linguagem Java herda muitas das caractersticas das
sintaxes de C e C++, o que a torna simples de ler e escrever, principalmente para pessoas j
habituadas no C ou C++. Um coisa que talvez confunda os programadores no incio so os
wrapers dos tipos primitivos (para basicamente todo tipo primitivo h uma classe relacionada,
exemplo: tipo int -> Integer (classe); tipo char -> Character (classe)).
Confiabilidade: Java tem um formalismo muito forte no que diz respeito as suas especificaes,
e tambm possui um forte sistema de captura e contorno de falhas (error exceptions).
Confiabilidade baixa a custos altos: Sistemas relativamente crticos (sistemas com muitos
acessos, para ser mais exato) usam Java pela sua robustez (exemplo: sistemas utilizados
em tribunais de justia, bancos, servidores web, etc).
R: Ao meu ver isso est relacionado com qual linguagem a pessoa estudou primeiro. Cada
linguagem pode usar uma determinada forma para indicar final da instruo, como por exemplo, o
C/C++/Java onde o ; usado para indicar o termino de uma sentena e o Python no utiliza
nenhum caractere (no caso talvez ele uso o /n para indicar o termino da sentena). Se uma
pessoa comear estudando Pascal e ir para uma linguagem nova, como o C, ter que se habituar
a essa nova sintaxe, sendo possvel que hajam erros no incio por parte do programador. Aps o
advento do C e com muitas linguagens usando a base da sintaxe dela, menos provvel uma
pessoa ter dificuldades de aprender e assimilar uma linguagem de programao mais recente.