linha cronológica e influências das principais linguagens de programação karane mariano vieira...
TRANSCRIPT
Linha Cronológica e
Influências das Principais Linguagens de Programação
Karane Mariano Vieira – 2003.1Modificações: Virgínia Brilhante
Linguagens de Programação
Linha Cronológica
A Linha Cronológica
ALGOL
LISP
FORTRAN I/II/IV
BASIC
SIMULAC
PASCAL
MODULA 2
SMALLTALK
C++
FORTRAN 77
MODULA-3
JAVA
PostScript
HTML
TeX/LaTeX
PHP
PerlXML
Delphi(89)
1950 1980 20001960 1970 1990
PLANKALKÜLCOBOL
PL/I
PROLOG
ADA
Python
ASSEMBLY
APL
Scheme COMMON LISP
ClipperJavaScript
SQL
Eiffel
Snobol
Linha Cronológica
PLANKALKÜL - 1945 Criada por Konrad Zuse; Nunca implementada; Estruturas de dados avançadas:
reais, arrays, records.
Linha Cronológica
FORTRAN The IBM Mathematical FORmula TRANslating
System: FORTRAN por John Backus, 1954 Projetado para o IBM 704 Ambiente de desenvolvimento: Computadores eram pequenos e não
confiáveis Aplicações eram científicas Sem metodologia ou ferramentas de
programação
Linha Cronológica
FORTRAN I - 1957 Primeira versão implementada do FORTRAN I/O formatado Nomes poderiam ter até 6 caracteres Subprogramas definidos pelo usuário Comando de seleção de três modos (IF
aritmético) Loop de contagem pos-testado (DO)
Linha Cronológica
FORTRAN I – 1957 (Cont) Compilador lançado em abril de 1957,
depois de 18 homens-ano de esforço. Programas maiores que 400 linhas
raramente compilavam corretamente, principalmente devido à baixa confiabilidade do 704
Código era muito rápido Rapidamente tornou-se popular
Linha Cronológica
FORTRAN II - 1958 Corrigiu vários “bugs” do Fortran I Compilação independente de
subrotinas 50% do código escrito pro 704 era
FORTRAN
Linha Cronológica
FORTRAN IV - 1960-62 FORTRAN III nunca largamente
distribuído Declaração de tipos explícita Comando de seleção lógica Nomes de subprogramas podiam
ser parâmetros Padrão ANSI em 1966
Linha Cronológica
FORTRAN 77 - 1978 Manuseio de character string Comando de controle de loop
lógico Comando IF-THEN-ELSE
Linha Cronológica
FORTRAN 90 - 1990 Funções builtin para operações c/arrays Arrays dinâmicos Ponteiros Tipo registro Recursão Novas estruturas de controle ex: CASE Checagem de tipo de parâmetro Módulos
Linha Cronológica
EXEMPLO DE PROGRAMA EM FORTRAN 90SUM
DO 10 COUNTER = 1 LIST_LEN READ *, INTLIST(COUNTER) SUM = SUM + INTLIST(COUNTER)
CONTINUE COMPUTE THE AVERAGE
AVERAGE = SUM/LIST_LEN COUNT THE VALUES THAT ARE GREATER THAN THE AVERAGE
DO 20 COUNTER = 1, LIST_LEN IE (INTLIST(COUNTER) .GT. AVERAGE) THEN
RESULT = RESULT + 1 END IF
CONTINUE
Linha Cronológica
Autor do FORTRAN
John Backus
Linha Cronológica
LISP - 1959 Características: Somente dois tipos de dados: átomos e listas Sintaxe baseada no lambda calculus Pioneira da programação funcional
Não necessita variáveis ou atribuição Controle via recursão e expressões condicionais
Paradigma alternativo ao modelo imperativo Ainda uma das linguagens dominantes em IA
Linha Cronológica
Exemplo de Função em LISP; Função LISP que pega duas lsitas como argumentos e; retorna True se as duas listas forrem iguais, e NIL (falso)
caso; contrário.
(DEFUN equal (lis1 lis2)) (COND
( (ATOM lis1) (EQ lis1 lis2)) ( (ATOM lis2) NIL)
( (equal (CAR lis1) (CAR lis2)) (equal (CDR lis1) (CDR lis2)))
( T NIL) ))
Linha Cronológica
ALGOL 58 - 1958Características da linguagem: Conceito de tipo foi formalizado Nomes podiam ter qualquer tamanho Arrays podiam ter um número qualquer de índices Parâmetros eram separados por modo
(entrada/saída) Índices eram colocados entre colchetes Comandos de composição de blocos (begin ...
end) Ponto e vírgula como separador de comandos Operador de atribuição era := IF possuía uma cláusula ELSE-IF
Linha Cronológica
ALGOL 60 - 1960 Modificou o ALGOL 58 durante um
encontro de 6 dias em Paris Novas características: Estrutura de blocos (escopo local) Dois modos de passagem de parâmetros
Subprogramas recursivos Arrays em pilhas dinâmicas
Ainda nenhum I/O nem manuseio de strings
Linha Cronológica
ALGOL 60 – 1960 (Cont)Sucessos: Foi o padrão para publicação de
algoritmos por mais de 20 anos Todas as linguagens imperativas são
baseadas nela Primeira linguagem independente de
máquina Primeira linguagem cuja sintaxe foi
definida formalmente (BNF)
Linha Cronológica
ALGOL 60 – 1960 (Cont)Falha: Nunca foi amplamente utilizada,
especialmente nos EUA Motivos:
Nenhum I/O e o conjunto de caracteres faziam com que os programas não fossem muito portáveis
Muito flexível, portanto difícil de implementar
Falta de apoio da IBM
Linha Cronológica
Exemplo de programa em ALGOL 60begin integer array intlist [1:99]; integer listlen, counter, sum, average, result; sum := 0; result := 0; readint(listlen); if (listlen > 0) L (listlen < 100) then begin comment Read input into an array and compute the average;
for counter := 1 step 1 until listlen do begin
readint( intlist[counter]); sum := sum + intlist [counter];
end;
Linha Cronológica
ALGOL 68 - 1968 A partir do desenvolvimento do ALGOL 60, mas
não é um superconjunto daquela linguagem Projeto é baseado no conceito de
ortogonalidade Fonte de várias idéias adotadas por outras
linguagens Contribuições: Estruturas de dados definidos pelo usuário Referência de tipos Arrays dinâmicos (chamados flex arrays)
Linha Cronológica
SIMULA 67 - 1967 Baseada no SIMULA I, criada por Kristen
Nygaard e OleJohan Dahal, entre 1962 e 1964 na Noruega
Projetada inicialmente para simulação de sistemas
Baseada no ALGOL 60 e SIMULA I Contribuições: Corotinas um tipo de subprograma que pode
ser reiniciado a partir do ponto onde previamente havia parado
POO
Linha Cronológica
Autores do SIMULA
Nygaard
Dahal
Linha Cronológica
COBOL - 1960Objetivos do projeto: Deve parecer com inglês simples Deve ser fácil de usar, mesmo que
signifique menos recursos (poder) Deve estender a base de usuários de
computadores Não deve ser influenciado por problemas
implementação (compiladores)
Linha Cronológica
COBOL - 1960Problemas de projeto: expressões aritméticas? indexação? brigas entre fabricantes Contribuições: Primeiro recurso macro em uma linguagem de
alto nível Estruturas de dados hierárquicas (registros) Comandos de seleção aninhados Nomes longos (até 30 caracteres), com hífens Data Division
Linha Cronológica
Exemplo de programa em COBOLIDENTIFICATION DIVISION PROGRAMID. PRODUCEREORDERLISTING. ENVIRONMENT DIVISION. CONFIGURATION SECTION.SOURCE CONPUTER. DECVAX. OBJECT CONPUTER. DECVAX. INPUTOUTPUT SECTION. FILECONTROL. SELECT BALFWDFILE ASSIGN TO READER. SELECT REORDERLISTING ASSIGN TO LOCALPRINTER. DATA DIVISION. FILE SECTION. FD BALFWDFILE
Linha Cronológica
PL/I - 1965 Projetado pela IBM e SHARE Incluia o que era considerado o melhor do: ALGOL 60:
recursão estrutura de blocos
FORTRAN IV compilação em separado comunicação por dados globais
COBOL 60 estrutura de dados I/O facilidades para geração de relatórios
Linha Cronológica
PL/I – 1965 (Cont)Comentários: Muitas características novas tinham problemas de
projeto Muito grande e complexo Foi de fato usado para aplicações científicas e
comerciais Um sucesso parcial Contribuições: Primeiro tratamento de exceção (23 tipos) Tipo de dado ponteiro Referência a seções de arrrays Etc.
Linha Cronológica
EXEMPLO DE PROGRAMA EM PL/IPLIEX; PROCEDURE OPTIONS (MAIN); DECLARE INTLIST (1:99) FIXED. DECLARE (LISTLEN, COUNTER, SUM, AVERAGE, RESULT) FIXED; SOM = 0; RESULT = 0; GET LIST (LISTLEN). IF (LISTLEN > 0) & (LISTLEN < 100) THEN
DO; /* READ INPUT DATA INTO AN ARRAY AND COMPUTE THE SUM */
DO COUNTER = 1 TO LISTLEN; GET LIST (INTLIST (COUNTER)); SUM = SUM + INTLIST (COUNTER);
END; /* COMPUTE THE AVERAGE */
AVERAGE = SUM / LISTLEN;
Linha Cronológica
Pascal - 1971 Criada por Niklaus Wirth Baseada no ALGOL W, proposta alternativa
apresentada pelos que consideraram muito complexa tanto a linguagem quanto a metalinguagem do ALGOL68
Simplicidade e tamanho reduzido eram objetivos de projeto
Projetada para o ensino de programação estruturada
Ainda é a uma das mais usadas linguagens para o ensino de programação estruturada nas universidades
Linha Cronológica
Exemplo de programa em Pascal program pasex (input, output);
type intlisttype = array[1..99] of integer; var
intlist :intlisttype; listlen, counter, sum, average, result: integer;
begin result := 0; sum := 0; readln(listlen); if ((listlen > 0) and (listlen < 100) then begin {read input into an array and compute the sum }
for counter := 1 to listlen do begin
readln(intlist[counter]); sum := sum + intlist[counter];
end;
Linha Cronológica
Autor do Pascal
Niklaus Wirth
Linha Cronológica
BASIC - 1964 Criada por Kemeny & Kurtz em Dartmouth Objetivos de Projeto: Fácil de aprender e usar (por outros que não fossem
estudantes de ciências) Deve ser “agradável e amigável” Rápido de usar em trabalhos domésticos Acesso livre e particular Tempo do usuário mais importante que tempo de
máquina Versão inicial era compilada, s/ entrada pelo terminal Simples (14 tipos de comandos e 1 tipo de dados) Dialetos populares atuais: QuickBASIC e Visual BASIC
Linha Cronológica
Exemplo de programa em QUICKBASIC DIM intlist(99) result = O sum = O INPUT listlen IF listlen > O AND listlen < 100 THEN REM Read input into an array and compute the
sum FOR counter = 1 TO listlen
INPUT intlist(counter) sum = sum + intlist(counter>
Linha Cronológica
Autores do BASIC
Linha Cronológica
Modula 2 Criada entre 1975 76 por Niklaus
Wirth na ETH; Recursos do Pascal mais módulos,
suportando tipos abstratos de dados, procedimentos como tipos e características de baixo nível projetadas para programação de sistemas.
Linha Cronológica
Modula 3 Criada no final dos anos 80 por Systems
Research Center (Digital) e Olivetti Research Center;
Baseada no Modula 2, Mesa, Cedar e Modula 2+;
Adiciona ao Modula 2: POO; Tratamento de exceção; Garbage collection; Concorrência.
Linha Cronológica
Delphi (Borland) Lançado em 1995 Pascal mais características de
suporte a POO Mais elegante e seguro que C++ A linguagem é Object Pascal,
projetada anos antes
Linha Cronológica
C - 1972 Projetada para a programação de
sistemas (nos Lab. Bell por Dennis Richie)
Ancestrais incluem CPL, BCPL, B e ALGOL68
Operadores poderosos, checagem de tipos pobre
(Inicialmente?) propagada através do UNIX
Linha Cronológica
Exemplo de programa em C void main() { int intlist[98], listlen, counter, sum, average, result; sum = 0; result = 0; scanf(``%d'', &listlen);
if ((listlen > 0) && (listlen < 100) { /* read input into an array and compute the sum */ for (counter = 0; counter < listlen, counter++) { scanf(``%d'', &intlist[counter]); sum = sum + intlist[counter]; }
Linha Cronológica
Autor do C
Dennis Richie
Linha Cronológica
Prolog - 1972 Desenvolvido na Universidade de
AixMarseille, por Comerauer e Roussel, com ajuda de Kowalski da Universidade de Edinburgh
Basedo na lógica formal Não procedural Comparativamente poderia ser definida
como: um sistema de banco de dados inteligente que usa processos de inferência para inferir a verdade de expressões fornecidas
Linha Cronológica
Exemplo de programa em Prologvel_max(ford,100). vel_max(chevy,105). vel_max(dodge,95). vel_max(volvo,80). tempo(ford,20). tempo(chevy,21). tempo(dodge,24). tempo(volvo,24). distancia(X,Y) :- vel_max(X,Velocidade),
tempo(X,Tempo), Y is Velocidade * Tempo.
Linha Cronológica
Ada - 1983 Contribuições: Suporte para abstração de dados Facilidades para tratamento de exceções Unidades de programa genéricas: versões instanciadas
geradas pelo compilador de acordo com tipos de dados específicos
Suporte à execução concorrente de unidades de programa Comentários: Projeto via contrato competitivo Incluiu tudo que se conhecia sobre engenharia de software
e projeto de linguagens Não confiável por causa da alta complexidade Compiladores de difícil construção. Primeiro compilador
operacional surgiu 4 anos depois que o projeto da linguagem tinha sido completado
Linha Cronológica
Ada 95 - 1988 Facilidades para interface gráfica Suporte para POO Mecanismos de controle para dados
compartilhados
Apesar de tão completa, Ada só foi largamente utilizada pela organização que promoveu seu desenvolvimento: o DoD do governo americano.
Linha Cronológica
Exemplo de programa em ADA with TEXT_IO; use TEXT_IO; procedure ADA_EX is
package INT_IO is new INTEGER_IO (INTEGER); use INT_IO; type INT_LIST_TYPE is array (1..99) of INTEGER; INT_LIST : INT_LIST_TYPE; LIST_LEN, SUM, AVERAGE, RESULT: INTEGER; begin RESULT := 0; SUM := 0; GET (LIST_LEN);
Linha Cronológica
Smalltalk – 1972-1980 Desenvolvida pela Xerox PARC,
inicialmente por Alan Kay, depois por Adele Goldberg
Primeira implementação completa de uma linguagem orientada por objetos (abstração de dados, herança e binding de tipos dinâmico)
Pioneira no tipo de interface gráfica que hoje todos utilizam
Linha Cronológica
Exemplo de programa em Smalltalkclass name Polygon superclass Object instance variable name ourPen
numSides sideLenght
“Class methods”“Create an instance”
new ^ super new getPen
“Get a pen for drawing polygons”getPen
Linha Cronológica
Autores do SmallTalk
Alan Kay
Adele Goldberg
Linha Cronológica
C++ - 1985 Desenvolvida nos Lab. Bell por Stroustrup Baseada no C and SIMULA 67: facilidades para
POO do SIMULA 67 adicionadas ao C Possui tratamento de exceção Linguagem grande e complexa, em parte por
suportar programação procedural e orientada por objetos
Popularizou-se rapidamente, junto com POO Padrão ANSI aprovado em novembro de 97
Linha Cronológica
Autor do C++
Stroustrup
Linha Cronológica
Java - 1995 Desenvolvida pela Sun no começo dos
anos 90 Baseada no C++ Significantemente simplificada Suporta apenas POO Tem referências, mas não ponteiros Inclui suporte a applets e concorrência
Linha Cronológica
Outras Linguagens• ML(1973) – Meta Language. Linguagem de programação funcional. Versão mais recente é o SML/NJ. • Clipper(1984) – Linguagem de desenvolvimento de banco de dados para DOS.• PHP(1995) - Linguagem script para o desenvolvimento de aplicações Web; embutível dentro do HTML. • JavaScript(1995) – Linguagem script para aplicações executadas em Web browsers.• HTML – Hipertext Markup Language, script para formatação de hipertextos. • ASP – Active Server Page. Linguagem script para construção de páginas dinâmicas.
Linha Cronológica
Outras Linguagens• TeX/LaTeX(1985) – Linguagem para formatação de
textos científicos.• PostScript(1982) – Linguagem de formatação de textos
para visualização.• PDF – Portable Document Format. Linguagem de
formatação de textos para visualização.• XML – Extensible Markup Language. Usado para
estruturação do conteúdo de páginas HTML.• Perl(1987) – Linguagem script com facilidades para
manipulação de texto.
Linha Cronológica
Outras Linguagens• SQL – Structured Query Language. Padrão para
operações em bancos de dads relacionais. • PYTHON(1991) – Linguagem interpretada, orientada a
objetos similar ao Perl.• Etc.