História das linguagens de programação - History of programming languages
História da Computação |
---|
Hardware |
Programas |
Ciência da Computação |
Conceitos modernos |
Por país |
Linha do tempo da computação |
Glossário de ciência da computação |
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 .
Algumas linguagens notáveis que foram desenvolvidas neste período incluem:
|
Estabelecendo paradigmas fundamentais
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:
- Speakeasy , desenvolvido em 1964 no Argonne National Laboratory (ANL) por Stanley Cohen , é umpacote numéricoOOPS (sistema de programação orientado a objetos , muito parecido com o posterior MATLAB , IDL e Mathematica ). O Speakeasy tem umasintaxe de base Fortran clara. Ele primeiro abordou computação de física eficiente internamente no ANL, foi modificado para uso em pesquisa (como "Modeleasy") para o Federal Reserve Board no início dos anos 1970 e, em seguida, foi disponibilizado comercialmente; Speakeasy e Modeleasy ainda estão em uso atualmente.
- Simula , inventada no final dos anos 1960 por Nygaard e Dahl como um superconjunto do Algol 60, foi a primeira linguagem projetada para oferecer suporte à programação orientada a objetos .
- C , uma das primeiraslinguagens de programação de sistemas , foi desenvolvida por Dennis Ritchie e Ken Thompson no Bell Labs entre 1969 e 1973.
- Smalltalk (meados da década de 1970) forneceu um projeto totalmente desenvolvido de uma linguagem orientada a objetos.
- Prolog , projetado em 1972 por Colmerauer , Roussel e Kowalski , foi a primeiralinguagem de programação lógica .
- ML construiu um sistema de tipos polimórficos (inventado por Robin Milner em 1973) em cima do Lisp, sendo pioneiro em linguagens de programação funcional de tipo estático .
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:
1980: consolidação, módulos, desempenho
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
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:
- Aumentar o suporte para programação funcional em linguagens convencionais usadas comercialmente, incluindo programação funcional pura para tornar o código mais fácil de raciocinar e mais fácil de paralelizar (em níveis micro e macro)
- Construções para oferecer suporte à programação concorrente e distribuída .
- Mecanismos para adicionar verificação de segurança e confiabilidade à linguagem: verificação estática estendida, digitação dependente , controle de fluxo de informações, segurança de thread estática .
- Mecanismos alternativos de composição e modularidade: mixins , traits , typeclasses , delegados , aspectos .
- Desenvolvimento de software orientado a componentes.
-
Metaprogramação , reflexão ou acesso à árvore de sintaxe abstrata
- AOP ou Programação Orientada a Aspectos, permitindo aos desenvolvedores inserir código em outro módulo ou classe em "pontos de junção"
- Linguagens específicas de domínio e geração de código
- Maior interesse em distribuição e mobilidade.
- Integração com bancos de dados, incluindo XML e bancos de dados relacionais .
- Código aberto como uma filosofia de desenvolvimento para linguagens, incluindo a GNU Compiler Collection e linguagens como PHP , Python , Ruby e Scala .
- Mais interesse em linguagens de programação visual como Scratch , LabVIEW e PWCT
- Linguagens massivamente paralelas para codificar unidades de processamento gráfico de GPU com 2000 processadores e matrizes de supercomputador, incluindo OpenCL
- Pesquisa inicial em linguagens de programação de computação quântica (ainda não implementáveis)
- Pesquisa inicial na aplicação de técnicas de Inteligência Artificial para gerar código, como o uso de GPT-3
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
Algumas pessoas importantes que ajudaram a desenvolver linguagens de programação:
- Alan Cooper , desenvolvedor de Visual Basic .
- Alan Kay , trabalho pioneiro em programação orientada a objetos e criador de Smalltalk .
- Anders Hejlsberg , desenvolvedor de Turbo Pascal , Delphi , C # e TypeScript .
- Arthur Whitney , desenvolvedor de A + , k e q .
- Bertrand Meyer , inventor da Eiffel .
- Bjarne Stroustrup , desenvolvedor de C ++ .
- Brendan Eich , desenvolvedor de JavaScript .
- Brian Kernighan , co-autor do primeiro livro sobre a linguagem de programação C com Dennis Ritchie , co-autor das linguagens de programação AWK e AMPL .
- Chuck Moore , inventor do Forth , a primeira linguagem de programação concatenativa e um nome proeminente no projeto de microprocessador de máquina de pilha .
- Chris Lattner , criador do Swift e LLVM .
- Cleve Moler , criador do MATLAB .
- Dennis Ritchie , inventor C . Sistema Operacional Unix, Plan 9 Sistema Operacional.
- Douglas McIlroy influenciou e projetou linguagens como SNOBOL , TRAC , PL / I , ALTRAN , TMG e C ++ .
- Grace Hopper , a primeira a usar o termo compiladora e desenvolvedora de FLOW-MATIC , influenciou o desenvolvimento de COBOL . Linguagens de programação independentes de máquina popularizadas e o termo " depuração ".
- Guido van Rossum , criador do Python .
- James Gosling , desenvolvedor líder de Java e seu precursor, Oak .
- Jean Ichbiah , designer-chefe da Ada , Ada 83 .
- Jean-Yves Girard , co-inventor do cálculo lambda polimórfico (Sistema F).
- Jeff Bezanson , designer principal e um dos principais desenvolvedores de Julia .
- Jeffrey Snover , inventor do PowerShell .
- Joe Armstrong , criador de Erlang .
- John Backus , inventor do Fortran e colaborou no projeto do ALGOL 58 e ALGOL 60 .
- John C. Reynolds , co-inventor do cálculo lambda polimórfico (Sistema F).
- John McCarthy , inventor do LISP .
- John von Neumann , criador do conceito de sistema operacional .
- Graydon Hoare , inventor da ferrugem .
- Ken Thompson , inventor do B , Go , Inferno (sistema operacional) e co-autor do Sistema Operacional Unix .
- Kenneth E. Iverson , desenvolvedor do APL e co-desenvolvedor do J junto com Roger Hui .
- Konrad Zuse , projetou a primeira linguagem de programação de alto nível , Plankalkül (que influenciou o ALGOL 58 ).
- Kristen Nygaard , pioneira na programação orientada a objetos, co-inventou o Simula .
- Larry Wall , criador da linguagem de programação Perl (veja Perl e Raku ).
- Martin Odersky , criador do Scala e anteriormente um contribuidor do design do Java .
- Martin Richards desenvolveu a linguagem de programação BCPL , precursora das linguagens B e C.
- Nathaniel Rochester , inventor do primeiro montador (IBM 701).
- Niklaus Wirth , inventor de Pascal , Modula e Oberon .
- Ole-Johan Dahl , pioneiro da programação orientada a objetos, co-inventou o Simula .
- Rasmus Lerdorf , criador do PHP .
- Rich Hickey , criador do Clojure .
- Jean Paoli , co-criadora do XML
- Robert Gentleman , co-criador do R .
- Robert Griesemer , co-criador do Go .
- Robin Milner , inventor do ML , e compartilhando o crédito pela inferência de tipo polimórfico Hindley-Milner .
- Rob Pike , co-criador do Go , Inferno (sistema operacional) e Plan 9 (sistema operacional) Operating System co-autor.
- Ross Ihaka , co-criador do R .
- Stanley Cohen , inventor do Speakeasy , que foi criado com um OOPS, sistema de programação orientado a objetos, a primeira instância, em 1964.
- Stephen Wolfram , criador do Mathematica .
- Brad Cox , co-criador de Objective-C .
- Walter Bright , criador de D .
- Yukihiro Matsumoto , criador do Ruby .
- Ryan Dahl , criador do Node.js .
Veja também
Referências
- ^ Hopper (1978) p. 16
- ^ 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.
- ^ Tese de doutorado de Corrado Böhm
- ^ 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
- ^ 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)
- ^ Sebesta, WS (2006). Conceitos de linguagens de programação . p. 44. ISBN 978-0-321-33025-3.
- ^ "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 .
- ^ "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 .
- ^ 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 .
- ^ Eugene Loh (18 de junho de 2010). "The Ideal HPC Programming Language" . Queue . Association of Computing Machines. 8 (6).
- ^ "HPL - Uma implementação portátil do benchmark Linpack de alto desempenho para computadores com memória distribuída" . Retirado 2015-02-21 .
- ^ Hopper (1978) p. 16
- ^ Sammet (1969) p. 316
- ^ Sammet (1978) p. 204
-
^ 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.
- ^ 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 .
- ^ 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 .
- ^ "Outubro do GitHub 2018" . Arquivado do original em 22/03/2019.
- ^ 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.