História das linguagens de programação - History of programming languages

A história das linguagens de programação abrange desde a documentação dos primeiros computadores mecânicos até as ferramentas modernas de desenvolvimento de software. As primeiras linguagens de programação eram altamente especializadas, baseando-se em notações matemáticas e sintaxes igualmente obscuras. Ao longo do século 20, a pesquisa na teoria do compilador levou à criação de linguagens de programação de alto nível, que usam uma sintaxe mais acessível para comunicar instruções.

A primeira linguagem de programação de alto nível foi Plankalkül , criada por Konrad Zuse entre 1942 e 1945. A primeira linguagem de alto nível a ter um compilador associado foi criada por Corrado Böhm em 1951, para sua tese de doutorado. A primeira linguagem disponível comercialmente foi FORTRAN (FORmula TRANslation), desenvolvido em 1956 (o primeiro manual apareceu em 1956, mas desenvolvido pela primeira vez em 1954) por uma equipe liderada por John Backus na IBM .

História antiga

Durante 1842–1849, Ada Lovelace traduziu as memórias do matemático italiano Luigi Menabrea sobre a máquina proposta mais recente de Charles Babbage : a Máquina Analítica ; ela complementou o livro de memórias com notas que especificavam em detalhes um método para calcular os números de Bernoulli com o motor, reconhecido pela maioria dos historiadores como o primeiro programa de computador publicado no mundo.

Os primeiros códigos de computador eram especializados para suas aplicações: por exemplo, Alonzo Church era capaz de expressar o cálculo lambda de uma forma estereotipada e a máquina de Turing era uma abstração da operação de uma máquina de marcar fita.

Jacquard Looms e o mecanismo de diferença de Charles Babbage tinham linguagens simples para descrever as ações que essas máquinas deveriam realizar, portanto foram os criadores da primeira linguagem de programação.

Primeiras linguagens de programação

Na década de 1920, foram criados os primeiros computadores com alimentação elétrica reconhecidamente modernos. A velocidade limitada e a capacidade de memória forçaram os programadores a escrever programas em linguagem assembly ajustados à mão . Com o tempo, percebeu-se que a programação em linguagem assembly exigia um grande esforço intelectual.

Uma das primeiras propostas para uma linguagem de programação de alto nível foi o Plankalkül , desenvolvido por Konrad Zuse para seu computador Z1 entre 1963 e 1975, mas não implementado na época.

As primeiras linguagens de programação funcionais projetadas para comunicar instruções a um computador foram escritas no início dos anos 1950. O Short Code de John Mauchly , proposto em 1949, foi uma das primeiras linguagens de alto nível já desenvolvidas para um computador eletrônico . Ao contrário do código de máquina , as instruções de código curto representavam expressões matemáticas de forma compreensível. No entanto, o programa precisava ser traduzido em código de máquina toda vez que era executado, tornando o processo muito mais lento do que executar o código de máquina equivalente.

No início dos anos 1950, Alick Glennie desenvolveu o Autocode , possivelmente a primeira linguagem de programação compilada, na Universidade de Manchester . Em 1954, uma segunda iteração da linguagem, conhecida como "Mark 1 Autocode", foi desenvolvida para o Mark 1 por RA Brooker . Brooker também desenvolveu um autocódigo para o Ferranti Mercury na década de 1950 em conjunto com a Universidade de Manchester. A versão para o EDSAC 2 foi desenvolvida por Douglas Hartree do University of Cambridge Mathematical Laboratory em 1961. Conhecido como EDSAC 2 Autocode, foi um desenvolvimento direto do Mercury Autocode adaptado para as circunstâncias locais e foi conhecido por sua otimização de código de objeto e idioma de origem diagnósticos avançados para a época. Um segmento de desenvolvimento contemporâneo, mas separado, o Atlas Autocode foi desenvolvido para a máquina Atlas 1 da Universidade de Manchester .

Em 1954, o FORTRAN foi inventado na IBM por uma equipe liderada por John Backus ; foi a primeira linguagem de programação de alto nível amplamente usada a ter uma implementação funcional, em oposição a apenas um design no papel. Quando o FORTRAN foi introduzido pela primeira vez, ele foi visto com ceticismo devido a bugs, atrasos no desenvolvimento e a eficiência comparativa de programas "codificados manualmente" escritos em assembly. No entanto, em um mercado de hardware em rápida evolução; a linguagem eventualmente se tornou conhecida por sua eficiência. Ainda é uma linguagem popular para computação de alto desempenho e é usada para programas que avaliam e classificam os supercomputadores mais rápidos do mundo .

Outra linguagem de programação inicial foi desenvolvida por Grace Hopper nos Estados Unidos, chamada FLOW-MATIC . Foi desenvolvido para o UNIVAC I na Remington Rand durante o período de 1955 a 1959. Hopper descobriu que os clientes de processamento de dados corporativos se incomodavam com a notação matemática e, no início de 1955, ela e sua equipe escreveram uma especificação para uma linguagem de programação em inglês e implementaram um protótipo. O compilador FLOW-MATIC tornou-se publicamente disponível no início de 1958 e estava substancialmente completo em 1959. Flow-Matic foi uma grande influência no design do COBOL , uma vez que apenas ele e seu descendente direto AIMACO estavam em uso na época.

Outras línguas ainda em uso hoje incluem LISP (1958), inventado por John McCarthy e COBOL (1959), criado pelo Short Range Committee. Outro marco no final dos anos 1950 foi a publicação, por um comitê de cientistas da computação americanos e europeus, de "uma nova linguagem para algoritmos"; o ALGOL 60 Relatório (o " ALGO rithmic L anguage"). Este relatório consolidou muitas ideias que circulavam na época e apresentou três inovações principais de linguagem:

  • estrutura de blocos aninhados: sequências de código e declarações associadas podem ser agrupadas em blocos sem ter que ser transformados em procedimentos separados e explicitamente nomeados;
  • Escopo léxico : um bloco pode ter suas próprias variáveis ​​privadas, procedimentos e funções, invisíveis para o código fora desse bloco, ou seja, ocultação de informações .

Outra inovação, relacionada a isso, foi a forma como a linguagem foi descrita:

  • uma notação matematicamente exata, forma Backus – Naur (BNF), foi usada para descrever a sintaxe da linguagem. Quase todas as linguagens de programação subsequentes usaram uma variante do BNF para descrever a parte livre de contexto de sua sintaxe.

Algol 60 foi particularmente influente no design de linguagens posteriores, algumas das quais logo se tornaram mais populares. Os grandes sistemas Burroughs foram projetados para serem programados em um subconjunto estendido de Algol.

As principais ideias de Algol foram continuadas, produzindo ALGOL 68 :

  • a sintaxe e a semântica tornaram-se ainda mais ortogonais, com rotinas anônimas, um sistema de tipagem recursiva com funções de ordem superior etc .;
  • não apenas a parte livre de contexto, mas a sintaxe e semântica completas da linguagem foram definidas formalmente, nos termos da gramática de Van Wijngaarden , um formalismo projetado especificamente para esse propósito.

Os muitos recursos de linguagem pouco usados ​​do Algol 68 (por exemplo, blocos simultâneos e paralelos) e seu sistema complexo de atalhos sintáticos e coerções automáticas de tipo o tornaram impopular entre os implementadores e ganharam a reputação de ser difícil . Niklaus Wirth realmente saiu do comitê de design para criar a linguagem Pascal mais simples .

Fortran

Algumas linguagens notáveis ​​que foram desenvolvidas neste período incluem:

Estabelecendo paradigmas fundamentais

Esquema

O período do final dos anos 1960 ao final dos anos 1970 trouxe um grande florescimento das linguagens de programação. A maioria dos principais paradigmas de linguagem agora em uso foi inventada neste período:

Cada uma dessas línguas gerou uma família inteira de descendentes, e a maioria das línguas modernas conta com pelo menos um deles em sua ancestralidade.

As décadas de 1960 e 1970 também viram um debate considerável sobre os méritos da " programação estruturada ", que essencialmente significava programar sem o uso de " goto ". Uma fração significativa de programadores acredita que, mesmo em linguagens que fornecem "goto", é um estilo de programação ruim usá-lo, exceto em raras circunstâncias. Esse debate estava intimamente relacionado ao design da linguagem: algumas linguagens não incluíam um "goto", o que forçava a programação estruturada no programador ou tutor.

Para fornecer tempos de compilação ainda mais rápidos, algumas linguagens foram estruturadas para " compiladores de uma passagem " que esperam que as rotinas subordinadas sejam definidas primeiro, como no Pascal , onde a rotina principal, ou função do driver, é a seção final da listagem do programa.

Algumas linguagens notáveis ​​que foram desenvolvidas neste período incluem:

  • 1967 - BCPL (precursor de B)
  • 1968 - Logo
  • 1969 - B (precursor de C)
  • 1970 - Pascal
  • 1970 - Avante
  • 1972 - C                                                   

1980: consolidação, módulos, desempenho

MATLAB
Erlang
Tcl

A década de 1980 foi de relativa consolidação em linguagens imperativas . Em vez de inventar novos paradigmas, todos esses movimentos se basearam nas ideias inventadas na década anterior. C ++ combinada orientada a objetos e programação de sistemas. O governo dos Estados Unidos padronizou a Ada , uma linguagem de programação de sistemas destinada ao uso por empreiteiros de defesa. No Japão e em outros lugares, grandes somas foram gastas investigando as chamadas linguagens de programação de quinta geração que incorporavam construções de programação lógica. A comunidade de linguagens funcionais mudou para padronizar ML e Lisp. A pesquisa em Miranda , uma linguagem funcional com avaliação preguiçosa , começou a se firmar nesta década.

Uma nova tendência importante no design de linguagem foi um maior foco na programação de sistemas de grande escala por meio do uso de módulos ou unidades organizacionais de código em grande escala. Modula , Ada e ML desenvolveram sistemas de módulos notáveis ​​na década de 1980. Os sistemas de módulo eram frequentemente vinculados a construções de programação genéricas --- sendo os genéricos, em essência, módulos parametrizados (veja também polimorfismo na programação orientada a objetos ).

Embora não tenham surgido novos paradigmas importantes para linguagens de programação imperativas, muitos pesquisadores expandiram as ideias de linguagens anteriores e as adaptaram a novos contextos. Por exemplo, as linguagens dos sistemas Argus e Emerald adaptaram a programação orientada a objetos para sistemas distribuídos .

A década de 1980 também trouxe avanços na implementação de linguagens de programação. O movimento RISC na arquitetura de computador postulou que o hardware deveria ser projetado para compiladores, e não para programadores de montagem humana. Auxiliado por melhorias na velocidade do processador que possibilitaram técnicas de compilação cada vez mais agressivas, o movimento RISC despertou maior interesse na tecnologia de compilação para linguagens de alto nível.

A tecnologia da linguagem continuou nessas linhas até a década de 1990.

Algumas linguagens notáveis ​​que foram desenvolvidas neste período incluem:

1990: a era da Internet

Haskell
Lua
PHP
Rebol

O rápido crescimento da Internet em meados da década de 1990 foi o próximo grande evento histórico em linguagens de programação. Ao abrir uma plataforma radicalmente nova para sistemas de computador, a Internet criou uma oportunidade para a adoção de novas linguagens. Em particular, a linguagem de programação JavaScript ganhou popularidade devido à sua integração inicial com o navegador Netscape Navigator. Várias outras linguagens de script alcançaram amplo uso no desenvolvimento de aplicativos personalizados para servidores da web, como PHP. A década de 1990 não viu nenhuma novidade fundamental nas linguagens imperativas , mas muita recombinação e maturação de ideias antigas. Esta era deu início à disseminação das linguagens funcionais . Uma grande filosofia de condução era a produtividade do programador. Surgiram muitas linguagens de "desenvolvimento rápido de aplicativos" (RAD), que geralmente vinham com um IDE , coleta de lixo e eram descendentes de linguagens mais antigas. Todas essas linguagens eram orientadas a objetos . Isso inclui Object Pascal , Visual Basic e Java . Java, em particular, recebeu muita atenção.

Mais radicais e inovadores do que as linguagens RAD foram as novas linguagens de script . Eles não descendiam diretamente de outras linguagens e apresentavam novas sintaxes e incorporação mais liberal de recursos. Muitos consideram essas linguagens de script mais produtivas do que até mesmo as linguagens RAD, mas geralmente devido a opções que tornam os programas pequenos mais simples, mas os programas grandes mais difíceis de escrever e manter. No entanto, as linguagens de script passaram a ser as mais proeminentes usadas em conexão com a web.

Algumas linguagens notáveis ​​que foram desenvolvidas neste período incluem:

Tendências atuais

A evolução da linguagem de programação continua, tanto na indústria quanto na pesquisa. Algumas das tendências recentes incluem:

Linguagem de Programação D
Groovy
PowerShell
Ferrugem
Arranhar

Algumas linguagens notáveis ​​desenvolvidas durante este período incluem:

Outras novas linguagens de programação incluem Red , Crystal , Elm , Hack , Haxe , Zig , Reason e Ballerina .

Pessoas proeminentes

Anders Hejlsberg
Yukihiro Matsumoto
Grace M. Hopper
Bjarne Stroustrup
Niklaus Wirth

Algumas pessoas importantes que ajudaram a desenvolver linguagens de programação:

Veja também

Referências

  1. ^ Hopper (1978) p. 16
  2. ^ Knuth, Donald E .; Pardo, Luis Trabb. "Desenvolvimento inicial de linguagens de programação". Enciclopédia de Ciência e Tecnologia da Computação . Marcel Dekker. 7 : 419–493.
  3. ^ Tese de doutorado de Corrado Böhm
  4. ^ J. Fuegi e J. Francis (outubro-dezembro de 2003), "Lovelace & Babbage and the creation of the 1843 'notes ' ", Annals of the History of Computing , 25 (4): 16-26, doi : 10.1109 / MAHC.2003.1253887
  5. ^ Em 1998 e 2000, compiladores foram criados para a linguagem como um exercício histórico. Rojas, Raúl , et al. (2000). "Plankalkül: a primeira linguagem de programação de alto nível e sua implementação". Institut frame Informatik, Freie Universität Berlin, Technical Report B-3/2000. (texto completo)
  6. ^ Sebesta, WS (2006). Conceitos de linguagens de programação . p. 44. ISBN 978-0-321-33025-3.
  7. ^ "O criador do Fortran, John Backus, morre - Tecnologia e dispositivos - Notícias da NBC" . NBC News. 20/03/2007 . Página visitada em 2010-04-25 .
  8. ^ "CSC-302 99S: Classe 02: Uma Breve História das Linguagens de Programação" . Math.grin.edu. Arquivado do original em 15/07/2010 . Página visitada em 2010-04-25 .
  9. ^ Pádua, David (fevereiro de 2000). "O compilador FORTRAN I" (PDF) . Computação em Ciência e Engenharia . 2 (1): 70–75. doi : 10.1109 / 5992.814661 . Página visitada em 7 de novembro de 2019 .
  10. ^ Eugene Loh (18 de junho de 2010). "The Ideal HPC Programming Language" . Queue . Association of Computing Machines. 8 (6).
  11. ^ "HPL - Uma implementação portátil do benchmark Linpack de alto desempenho para computadores com memória distribuída" . Retirado 2015-02-21 .
  12. ^ Hopper (1978) p. 16
  13. ^ Sammet (1969) p. 316
  14. ^ Sammet (1978) p. 204
  15. ^ Gordon, Michael JC (1996). "Do LCF ao HOL: uma breve história" (PDF) . p. 3 . Página visitada em 04/05/2015 . O LCF de Edimburgo, incluindo o interpretador ML, foi implementado em Lisp.
  16. ^ Manjoo, Farhad (29 de julho de 2020). "Como você sabe que um humano escreveu isso?" . The New York Times . ISSN  0362-4331 . Recuperado em 4 de agosto de 2020 .
  17. ^ TIOBE (25 de maio de 2018). "Índice TIOBE, 100 principais linguagens de programação de acordo com o Índice TIOBE" . www.tiobe.com . TIOBE_index .
  18. ^ "Outubro do GitHub 2018" . Arquivado do original em 22/03/2019.
  19. ^ Rojas, Raúl; Hashagen, Ulf (2002). Os primeiros computadores: história e arquiteturas . MIT Press. p. 292. ISBN 978-0262681377. Recuperado em 25 de outubro de 2013 .

Leitura adicional

  • Rosen, Saul , (editor), Programming Systems and Languages , McGraw-Hill, 1967.
  • Sammet, Jean E. , Linguagens de Programação: História e Fundamentos , Prentice-Hall, 1969.
  • Sammet, Jean E. (julho de 1972). "Linguagens de Programação: História e Futuro". Comunicações da ACM . 15 (7): 601–610. doi : 10.1145 / 361454.361485 . S2CID  2003242 .
  • Richard L. Wexelblat (ed.): History of Programming Languages , Academic Press 1981.
  • Thomas J. Bergin e Richard G. Gibson (eds.): História das Linguagens de Programação , Addison Wesley, 1996.

links externos