Evolu - PowerPoint PPT Presentation

About This Presentation
Title:

Evolu

Description:

D cada de 40 Os primeiros computadores eletr nicos eram monstruosos A programa o era em c digo bin rio ... Java 1.0 1997 Java 1.1 e 1.2 (Swing ... – PowerPoint PPT presentation

Number of Views:154
Avg rating:3.0/5.0
Slides: 39
Provided by: ufp59
Category:
Tags: evolu | swing

less

Transcript and Presenter's Notes

Title: Evolu


1
Evolução e Futuro das Linguagens de Programação
  • Alessandro Vasconcelos
  • Gladstone Ferreira

Seminário de Engenharia de Software e Linguagens
de Programação
2
Motivaçã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?

3
Roteiro
  • A questão da Produtividade
  • A historia no passar das décadas
  • A árvore evolucionaria da linguagens
  • As linguagens do futuro

4
A 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

5
Como 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
6
Por 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

7
Os 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.

8
Um Pouco de História!
9
Dé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

10
Iní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

11
Meio 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

12
Década de 60
  • Fortalecimento da Programação Estruturada
  • Pascal
  • Sem go to!
  • Fortemente tipada
  • Procedimentos alinhados
  • Simula
  • Primeira linguagem com objetos, classes e
    subclasses

13
Dé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

14
Dé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

15
Dé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

16
Dé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

17
Dé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

18
Dé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

19
O 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)
22
Mas
  • Nós ainda escreveremos
  • programas daqui a cem anos?
  • Não apenas diremos aos
  • computadores o que nós
  • estamos queremos fazer?

23
As 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.

24
Valorizaçã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.

25
Valorizaçã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)

26
Linguagens 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

27
Linguagens 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)

28
Agregar 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.

29
Bons 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.

30
Equilibrio 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.

31
Equilibrio 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)
32
Mecanismos 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.

33
Mecanismos 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.

34
Conclusõ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.

35
Referê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

36
Referê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

37
Perguntas?????
38
Evolução e Futuro das Linguagens de Programação
  • Alessandro Vasconcelos
  • Gladstone Ferreira

Seminário de Engenharia de Software e Linguagens
de Programação
Write a Comment
User Comments (0)
About PowerShow.com