Title: Evolu
1Evolução e Futuro das Linguagens de Programação
- Alessandro Vasconcelos
- Gladstone Ferreira
Seminário de Engenharia de Software e Linguagens
de Programação
2Motivação!
- Num mundo com computadores cada vez mais velozes,
o que ainda afeta a produtividade? - Porque existem tantas linguagens de programação?
- Daqui a 10, 20, ou 100 anos, em que linguagem
você estará programando?
3Roteiro
- A questão da Produtividade
- A historia no passar das décadas
- A árvore evolucionaria da linguagens
- As linguagens do futuro
4A questão da Produtividade
- O hardware já é suficientemente poderoso por si
só! - A produtividade se centra no Programador
- Escrever programas corretamente
- Escrever programas rapidamente
- Escrever programas facilmente
5Como Aumentar a Produtividade
- Através de um Processo (ES)
- Bons processos podem aumentar a
- produtividade em 20
- Através de Ferramentas
- Verificações, Análises, Geração de Código
- Boas ferramentas podem aumentar a produtividade
em 10 - Através da Linguagem de Programação
- Abstrações, mecanismos, serviços, garantias
- Esse é o aspecto que mais influi chegando a
aumentar a produtividade em mais de 100
Segundo o Software Productivity Research
6Por que tantas Linguagens de Programação?
- Por que algumas pessoas falam inglês e outras
português? - Linguagens de programação são desenvolvidas com
diferentes objetivos, para diferentes tipos de
programas, por diferentes pessoas
7Os Paradigmas
- Imperativo
- Ênfase na estrutura de dados e na atribuição dos
valores. Dependência explícita da arquitetura de
Von Neumann - Funcional
- Ênfase nos valores manipulados, e não na forma de
armazenamento. - Orientado a Objetos
- Ênfase sobre os objetos e a troca de mensagens
entre esses.
8Um Pouco de História!
9Década de 40
- Os primeiros computadores eletrônicos eram
monstruosos - A programação era em código binário
- A manutenção era difícil
- As válvulas queimavam regularmente
10Início da década de 50
- Linguagens Assembly
- Permitia programas maiores, reusáveis, e
re-alocáveis. - O código de máquina era produzido por um
Assembler - Correspondência um-pra-um entre o código assembly
e o código da máquina - Posteriormente surgiram os macros
11Meio da Década de 50
- Surge FORTRAN
- É considerada a primeira linguagem de alto-nível.
- Desenvolvimento independente da plataforma
- Aplicada na solução de problemas na ciência e na
engenharia - Outras linguagens da época
- Algol58, Cobol, Lisp, Basic
12Década de 60
- Fortalecimento da Programação Estruturada
- Pascal
- Sem go to!
- Fortemente tipada
- Procedimentos alinhados
- Simula
- Primeira linguagem com objetos, classes e
subclasses
13Década de 70 (1/2)
- C
- Sucessora de B, que veio de BCPL
- Construções de alto-nível
- Ada
- Incentivada pelo Departamento de Defesa
- Usada em programação de sistemas embarcados
14Década de 70 (2/2)
- SmallTalk
- Rica graficamente
- GUI
- Fontes
- Orientada a Objetos
- Objetos se comunicam via troca de mensagens
- Prolog
- Baseada em regras, fatos, e buscas
15Década de 80
- C
- Primeira linguagem Orientada a objetos amplamente
adotada. - Implementada como um pré-processador para o
compilador C - Haskel
- Avaliação Preguiçosa
- Polimorfismo Paramétrico
- Inferência de Tipos
16Década de 90
- O estouro da Internet!
- HTML
- A linguagem da World Wide Web
- É uma linguagem de marcação, e não de programação
- Linguagens Script
- São as chamadas linguagens interpretadas
- Perl, JavaScript, VBScript
17Década de 90
- Java
- Orientada a objetos, compilada e interpretada
(bytecodes) - 1996 Java 1.0
- 1997 Java 1.1 e 1.2 (Swing, Collection)
- 1998 Java 1.2 final
- 2000 Java 1.3 final
18Década 2000
- Java
- 2004 Java 1.5 (tipos parametrizados,
enumeradores) - XML
- Padrão de integração
- Microsoft .NET
- Múltiplas linguagens
- C, C, Visual Basic, Cobol, Fortran
- Uma máquina virtual comum
19O que o futuro nos reserva?
20Árvore Evolucionária das Linguagens de
Programação (1/2)
- Como as espécies vivas, as linguagens possuem uma
história facilmente categorizada em forma de
árvores evolucionárias, com galhos que não
podem mais se ramificar. - A evolução das linguagens difere da evolução das
espécies porque alguns ramos podem convergir. - Objetivo dessa abordagem aproximarmos dos ramos
principais da arvore evolucionária das
linguagens, para encontrar as linguagens com
chances de futuro.
21Árvore Evolucionária das Linguagens de
Programação (2/2)
22Mas
- Nós ainda escreveremos
- programas daqui a cem anos?
- Não apenas diremos aos
- computadores o que nós
- estamos queremos fazer?
23As linguagens do futuro provavelmente
- valorizarão mais a produtividade que o poder
bruto. - serão mais concisas, construindo sobre bases mais
simples - agregarão diferentes paradigmas.
- farão uso de bons ambientes de desenvolvimento
pra melhorar a produtividade. - encontrarão modos de equilibrar concisão e
legibilidade. - Integrarão mecanismos de extensão nos níveis
semânticos e sintáticos mais básicos, permitindo
que programadores evoluam de maneira mais simples
quando necessário.
24Valorização da produtividade em detrimento do
poder bruto (1/2)
- A melhoria na eficiencia do programas está na
raiz do processo (as linguagens) - Desperdiçar o tempo do programador é a verdadeira
ineficiência, e não desperdiçar o tempo de
máquina. - Mesmo que algumas aplicações podem ser
crescentemente mais ineficientes e, assim,
demandarem toda a velocidade que o hardware puder
fornecer, computadores mais rápidos serão
sinônimo de linguagens capazes de cobrir uma
escala cada vez mais larga de eficiência.
25Valorização da produtividade em detrimento do
poder bruto (2/2)
-
- Há um desperdício bom, e um desperdício mau. Eu
estou interessado no desperdício bom - o tipo
onde, gastando mais, nós podemos começar uns
projetos mais simples. - (tradução livre, The Hundrer-Year Language, por
Paul Graham)
26Linguagens concisas e mais simples (1/2)
- Se nós pensarmos no núcleo de uma linguagem como
um conjunto de axiomas, certamente é indesejável
ter os axiomas adicionais que não adicionam
nenhum poder expressivo, simplesmente por causa
da eficiência. - A maneira correta de se resolver o problema da
adição de axiomas desnecessários é separar o
significado de um programa dos detalhes de sua
execução. - Linguagem do futuronúcleo limpo, conciso,
contendo todos os axiomas essenciais, a partir
dos quais as outras características da linguagem
poderão ser derivadas
27Linguagens concisas e mais simples (2/2)
- No mínimo, um exercício que pode ser útil é
analisar cuidadosamente o núcleo de uma linguagem
para verificar se há axiomas que podem ser
eliminados. Em minha longa carreira como um
chato, eu descobri que lixo sempre gera mais
lixo - Ocorre-me que os galhos principais da árvore
evolutiva (das linguagens de programação) passam
por linguagens que tem núcleos menores e mais
limpos - (tradução livre, The Hundrer-Year Language, por
Paul Graham)
28Agregar diferentes paradigmas
- Um linguagem de sucesso no futuro terá a
característica de juntar conceitos de diferentes
paradigmas, extendendo assim seu poder de
atuação. - Orientação a objetos programas são desenvolvidos
como uma série de remendos. - Uma boa maneira de extender uma linguagem é
misturar diferente paradigmas na mesma, buscando
juntar diferentes conceitos para agregar poder à
essa linguagem.
29Bons ambientes de desenvolvimento melhor
produtividade
- Mesmo daqui a cem anos, as pessoas ainda dirão a
computadores o que querem fazer, usando
programas, da mesma maneira que conhecemos hoje. - O diferencial está em ambientes de
desenvolvimentos mais poderosos que os atuais
editores de texto glorificados. - Testes automáticos e refatoração são alguns
exemplos de como bons ambientes de programação
podem ajudar uma linguagem de programação.
30Equilibrio entre concisão e legibilidade (1/2)
- Uma linguagem concisa e simples deve ser aberta
em termos de extensibilidade para permitir que,
características extras relacionadas com o dominio
do problema sejam adicionadas à linguagem,estas
derivadas dos axiomas essenciais. - Tal linguagem extensível deve ter uma
responsabilidade com a legibilidade, pois pode
gerar código ilegível por produzir trechos muito
idiomáticos.
31Equilibrio entre concisão e legibilidade (2/2)
- Os programadores do futuro serão criaturas tão
preguiçosas quanto nós, em seu desejo em
expressar programas com o mínimo de esforço. - A linguagem do futuro, se existisse, poderia
assim ser muito fácil de se programar.
Programas devem ser escritos para pessoas lerem,
e somente incidentalmente, para serem executados
por máquinas. (Hackers and Painters, por Paul
Graham)
32Mecanismos de Extensão nos níveis semântico e
sintático mais básicos (1/2)
- A extensibilidade num mundo interconectado com
protocolos que mudam rapidamente. - Um programador sempre pode usar programação do
mais baixo nível para implementar qualquer coisa,
mas é muito melhor se os mecanismos para
integração existissem na própria linguagem.
33Mecanismos de Extensão nos níveis semântico e
sintático mais básicos (2/2)
- Muitas tarefas em programação podem ser
enormemente simplificadas por extensões da
linguagem. - Prover meios para que programadores posssam
esconder estruturas complexas e algoritmos atrás
de uma fachada sintática é uma poderosa forma de
extensibilidade. - A mesma extensibilidade em termos semânticos é
mais complexa, mas não impossível. Como foi dito
antes, tal poder vem a um preço, mas este deve
ser pago se a linguagem precisa evoluir.
34Conclusões
- Falamos aqui em linguagens a serem criadas em um
futuro próximo. É perfeitamente possível que um
gênio ainda desconhecido descubra um novo
paradigma de programação que mude o modo como a
programação existe hoje. Obviamente, tal
desenvolvimento não pode ser previsto. - Muito embora isso possa vir a acontecer, o
exercício de olhar para o futuro nos permite ter
a consciência da solidez das bases que no passado
ajudaram a construir o cenário de linguagens de
programação como conhcemos hoje, e, dessa forma,
nos permite tentar trilhar um caminho de sucesso
para o futuro de nossas aplicações.
35Referências
- The Hundred Year Language, Paul Graham,
http//www.paulgraham.com/hundred.html - Languages Of The Future, Tim Sheard,
http//citeseer.ist.psu.edu/sheard04languages.html
- Programming Languages History and Future, Jean
E. Sammet, http//rockfish-cs.cs.unc.edu/COMP144/s
ammet.pdf
36Referências
- Evolução das Linguagens de Programação,
http//reflectivesurface.com/weblog-br/2003/05/14/
mais-sobre-a-evolucao-de-linguagens-de-programacao
- Future Programming Languages, Bent Thomsen,
http//www.nouhauz.dk/dokumenter/120505-BentThomse
n.ppt
37Perguntas?????
38Evolução e Futuro das Linguagens de Programação
- Alessandro Vasconcelos
- Gladstone Ferreira
Seminário de Engenharia de Software e Linguagens
de Programação