História das linguagens de programação
A história das linguagens de programação data da criação dos primeiros computadores mecânicos. No início as linguagens eram altamente especializadas, totalmente baseadas em notações matemáticas, e por consequência tinham uma sintaxe extremamente difícil de entender e reproduzir.[1]
Durante o século vinte, pesquisas e o desenvolvimento dos compiladores lideraram a criação das linguagens de programação de alto nível, que por sua vez possuem sintaxes mais acessíveis e de fácil entendimento para os desenvolvedores. A primeira linguagem de programação de alto-nível foi a Plankalkül, criada por Konrad Zuse entre 1942 e 1945.[2] Já a primeira linguagem comercializada foi a FORTRAN, que foi desenvolvida e disponibilizada em 1954, por um time da IBM liderado pelo cientista da computação John Backus.[3]
Antes de 1940
Durante um período de nove meses entre 1842-1843, Ada Lovelace traduziu as memórias do matemático italiano Luigi Menabrea sobre a mais nova máquina proposta por Charles Babbage, a sua máquina analítica.[1] Com o artigo, ela anexou uma série de anotações que especificavam em completo detalhe um método para calcular números de Bernoulli com a máquina, reconhecido por alguns historiadores como o primeiro programa de computador do mundo.[4]
O tear de Jacquard, inventado em 1801 por Joseph-Marie Jacquard, usava furos em cartões perfurados para representar os movimentos do braço do tear ao realizar costuras, a fim de gerar padrões decorativos automaticamente.[5] Foi Herman Hollerith que percebeu que poderia codificar a informação em cartões perfurados, quando observou que o condutor de trens controlava a presença dos titulares dos bilhetes de trem com a posição dos furos no bilhete. Hollerith, então, começou a codificar os dados do censo de 1890 em cartões perfurados.[6]
Os primeiros códigos para computador eram especializados segundo as aplicações. Nas primeiras décadas do século XX, os cálculos numéricos eram baseados em números decimais. Eventualmente, se percebeu que a lógica podia ser representada com números, tão bem como com as palavras. Por exemplo, Alonzo Church foi capaz de expressar o cálculo lambda de uma maneira formalizada. A máquina de Turing era uma abstração do funcionamento da máquina de uma fita de marcação, por exemplo, em uso em empresas de telefonia. No entanto, ao contrário do cálculo lambda, os código elaborados por Turing não serviam como uma base para linguagens de alto nível - a sua utilização principal era na análise rigorosa da complexidade algorítmica.[6]
Apesar de que os teares de Jacquard e a máquina diferencial de Charles Babbage tinham linguagens simples, e extremamente limitadas para descrever as ações que estas máquinas deviam executar, ambos são abertamente reconhecidos como os criadores das linguagens de programação.[7]
Os anos 1940
Na década de 1940 os primeiros computadores elétricos, reconhecidamente modernos, foram criados. A velocidade limitada e a pequena capacidade da memória forçavam os programadores a escrever à mão, economicamente, programas em linguagem de montagem (Linguagem assembly), logo, descobriu-se que programar em linguagem de máquina exigia um grande esforço intelectual e era uma atividade suscetível a erros.[8]
Em 1948, Konrad Zuse publicou um artigo sobre a sua linguagem de programação Plankalkül. No entanto, esta não foi implementada em sua época e suas contribuições originais foram isoladas de outros desenvolvimentos.[2]
Algumas linguagens importantes que foram desenvolvidas durante este período incluem:
Décadas de 1950 e 1960
Na década de 1950 as primeiras três linguagens de programação modernas, cujos descendentes ainda estão em uso difundido hoje, foram concebidas:
Outro marco na década de 1950 foi a publicação, por um comitê de cientistas americanos e europeus, de "uma nova linguagem para os algoritmos", a ALGOL 60 através da publicação do relatório "The ALGOL 60 Report (the "ALGOrithmic Language")".[11] Este relatório consolidou muitas ideias que circulavam na época e apresentou duas inovações chave quanto ao projeto de linguagens:[12]
- Estrutura de blocos aninhados: pedaços significativos de código poderiam ser agrupados em bloco de instruções, sem ter que ser transformados em procedimentos separados e ser explicitamente chamados;
- Escopo léxico: um bloco podia ter suas próprias variáveis não acessíveis fora do bloco, e muito menos manipuláveis de fora do bloco.
Outra inovação, relacionada a esta última, foi na forma como a linguagem foi descrita:
- Uma notação matemática exata, Backus-Naur (BNF), foi utilizada para descrever a sintaxe da linguagem. Quase todas as linguagens de programação posteriores utilizaram uma variante da BNF para descrever a parte livre de contexto de sua sintaxe.
Algol 60 foi particularmente influente na concepção das linguagens posteriores, algumas das quais logo se tornaram mais populares. Os grandes sistemas da Burroughs foram projetados para serem programados em um subconjunto estendido do Algol, a WFL (Work Flow Language).
Algumas ideias-chave da linguagem Algol foram tomadas, produzindo-se a linguagem ALGOL 68:[13]
- A sintaxe e semântica se tornaram ainda mais ortogonais, com rotinas anônimas, um sistema recursivo de digitação com funções de ordem superior, etc;
- não somente a parte livre de contexto da linguagem, mas a sintaxe da linguagem completa e a semântica foram definidos formalmente, em termos da gramática de Van Wijngaarden, um formalismo desenvolvido especificamente para esta finalidade.
Os recursos pouco utilizados de Algol 68 (por exemplo, blocos simultâneos e paralelos) e seu complexo sistema de atalhos sintáticos e coerções de tipo automático tornou a linguagem impopular entre os implementadores e ganhou a reputação de ser difícil. Niklaus Wirth realmente saiu do comitê de projeto para criar uma linguagem mais simples: Pascal.[14]
Panorama geral das duas décadas:
1967-1978: estabelecendo os paradigmas fundamentais
O período compreendido entre o final dos anos 1960 à década de 1970 trouxe um grande florescimento de linguagens de programação. A maioria dos principais paradigmas de linguagem agora em uso foram inventados durante este período:[2]
- Simula, inventada nos anos 1960 por Nygaard e Dahl como um super conjunto de Algol 60, foi a primeira linguagem a suportar os conceitos programação orientada a objetos.[15]
- C, uma das primeiras linguagens de programação de sistemas, foi desenvolvido por Dennis Ritchie e Ken Thompson nos laboratórios da Bell entre 1969 e 1973.[16]
- Smalltalk (meados de 1970) forneceu uma base completa para o projeto de uma linguagem orientada a objetos.[17]
- Prolog, projetada em 1972 por Colmerauer, Roussel, e Kowalski, foi a primeira linguagem de programação do paradigma lógico.[18]
- ML, inventada por Robin Milner em 1973, é uma linguagem funcional, baseada em Lisp,[19] estaticamente tipada.[20]
Cada uma dessas línguas gerou toda uma família de descendentes, e linguagens mais modernas contam, pelo menos, com uma delas em sua ascendência.
A década de 1960 e 1970 também viu um considerável debate sobre os méritos da "programação estruturada", que, entre outros aspectos, envolvia a programação sem o uso de Goto. Este debate foi estreitamente relacionado com projeto de linguagem: algumas linguagens não incluíram o comando GOTO, ou o desestimularam, o que obrigou o programador a utilizar a programação estruturada. Apesar de o debate ter ficado quente na época, quase todos os programadores agora concordam que, mesmo em linguagens que fornecem um comando de desvio incondicional como o GOTO, é um mau estilo de programação usá-lo, exceto em raras circunstâncias. Como resultado, as gerações posteriores de projetistas da linguagem consideram o debate em torno da programação estruturada tedioso e até desconcertante.[21]
Algumas linguagens importantes que foram desenvolvidas durante este período incluem:
- 1970 - Pascal
- 1970 - Forth
- 1972 - C
- 1972 - Smalltalk
- 1972 - Prolog
- 1973 - ML
- 1978 - SQL (inicialmente apenas uma linguagem de consulta, mais tarde estendido com construções de programação)
A década de 1980 foi um tempo de relativa consolidação das linguagens imperativas. A linguagem C++ combinou orientação a objetos e programação de sistemas.[22] O governo dos Estados Unidos padronizou a Ada, uma linguagem de programação de sistemas destinados à utilização por parte dos contratantes de defesa. No Japão e em outros lugares, vastas somas foram gastas investigando as chamadas linguagens de programação de quinta geração que incorporavam a programação lógica em suas construções. A comunidade de linguagens funcionais se dedicou a padronizar a ML e o Lisp.[20] Ao invés de inventar novos paradigmas, todos estes esforços visaram aperfeiçoar as ideias inventadas na década anterior.
No entanto, uma tendência nova e importante na conceção de linguagens foi o aumento do foco na programação de sistemas de larga escala com o uso de módulos, ou em unidades organizacionais de código de larga-escala. As linguagens Modula, Ada e ML desenvolveram notáveis sistemas de módulos durante esta década, sendo que sistemas modulares muitas vezes eram associados com a programação genérica.
Embora os principais paradigmas novos para as linguagens de programação ainda não tivessem aparecido, muitos pesquisadores expandiram as ideias das linguagens existentes adaptando-os para novos contextos. Por exemplo, as linguagens dos sistemas Argus e Emerald adaptaram a programação orientada a objeto para os seus sistemas distribuídos.[23]
A década de 1980 também trouxe avanços na implementação das linguagens de programação. O movimento RISC, em arquitetura de computadores postulou que o hardware deveria ser concebido para os compiladores ao invés de ser voltado a assembleia de programadores. Ajudado por melhorias na velocidade dos processadores que permitiu cada vez mais técnicas agressivas de compilação, o movimento RISC despertou maior interesse na tecnologia de compilação para linguagens de alto nível.[24] A tecnologia de linguagens continuou ao longo destas linhas durante a década de 1990.
Algumas linguagens importantes que foram desenvolvidas durante este período incluem:
Década de 1990: A Era da Internet
A década de 1990 não viu nenhuma novidade fundamental, mas a recombinação e maturação das ideias antigas. Uma filosofia de grande importância era a produtividade do programador. Muitas linguagens com "aplicações de desenvolvimento rápido" (RAD) surgiram, geralmente vindo com um IDE, coleta de lixo, e eram descendentes de linguagens mais antigas. Todas essas linguagens foram orientadas a objeto. Entre estas estavam a Object Pascal, Visual Basic, e C#. Java em particular recebeu muita atenção. Mais radicais e inovadoras do que as línguas RAD, foram as novas linguagens de scripting.[25] Estas não descenderam diretamente das outras linguagens e contaram com sintaxes novas e incorporação mais liberal de novas funcionalidades. Muitos consideram as linguagens de scripting mais produtivas do que as linguagens RAD, sendo que linguagens de scripting vieram a ser mais proeminentes usadas para sistemas utilizados na web.
Algumas linguagens importantes que foram desenvolvidas durante este período incluem:
Tendências Atuais
A evolução das linguagens de programação continua, tanto na indústria quanto na pesquisa. Algumas das tendências atuais incluem
- Mecanismos para a adição de segurança e verificação da confiabilidade para a linguagem: verificação estática prolongada, controle de fluxo de informação, estático segurança em threads;
- Mecanismos alternativos de modularidade: mixin s, Delegação de programação, programação orientada a aspectos;
- Desenvolvimento de software orientado a componentes;
- Metaprogramação, Reflexão ou acesso a árvores de sintaxe abstratas...
- Maior ênfase na distribuição e mobilidade;
- Integração com bases de dados, incluindo XML e bancos de dados relacionais;
- Suporte para Unicode de forma que o código-fonte não esteja restrito aos caracteres contidos no código ASCII; permitindo, por exemplo, o uso de scripts não latinos ou pontuação estendida;
- XML para a interfaces gráficas (XUL, XAML);
- Arquitetura Orientada a Serviços (SOA).
- A utilização de linguagem de scripts para aplicar cultura DevOps.
- Aplicativo progressivo para a Web (PWA) [26]
- 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 [27]
Algumas linguagens importantes surgiram durante os ultimo 20 anos:
Pessoas de destaque na história das linguagens de programação
- Anders Hejlsberg, desenvolveu o Turbo Pascal, Delphi e o C#.[28]
- Alan Cooper, desenvolveu o Visual Basic.[29]
- Alan Kay, Pioneiro da programação orientada a objeto, e autor do Smalltalk.[17]
- Bill Joy, inventor do vi, um dos primeiros autores do BSD Unix, e criador do SunOS, que veio a se tornar o sistema operacional Solaris.[30]
- Bjarne Stroustrup, desenvolveu o C++.[22]
- Brian Kernighan, co-autor do primeiro livro sobre a linguagem C junto com Dennis Ritchie, co-autor das linguagens AWK e AMPL.
- Dennis Ritchie, inventor do C.[16]
- Edsger W. Dijkstra, desenvolveu o framework de programação adequada.[32]
- Grace Hopper, desenvolveu o Flow-Matic[7], influenciando o COBOL[10].
- James Gosling, desenvolveu a linguagem Oak, precursora do Java.[33]
- Jean Paoli, co-creater of XML[34]
- John Backus, inventor do Fortran.[3]
- John McCarthy, inventor do LISP.[9]
- John von Neumann, autor do conceito de Sistema Operacional.[35]
- Kenneth E. Iverson, desenvolveu o APL.
- Ken Thompson, inventor do Unix.[37]
- Niklaus Wirth inventor do Pascal, [14] Modula e Modula-2.[38]
- Yukihiro "Matz" Matsumoto, criador da linguagem de programação Ruby.[39]
- Rasmus Lerdorf criador da linguagem PHP.[40]
Referências
- ↑ a b Huskey, Velma R.; Huskey, Harry D. (1980). «Lady Lovelace and Charles Babbage». Annals of The History of Computing (em inglês). 2 (4). Arlington, VA: American Federation of Information Processing Societies. 384 páginas. ISSN 1058-6180
- ↑ a b c Knuth, Donald E.;Pardo, Luis Trabb. «Early development of programming languages». Marcel Dekker. Encyclopedia of Computer Science and Technology. 7: 419–493
- ↑ a b c John Backus. «The history of FORTRAN I, II and III» (PDF). Softwarepreservation.org. Consultado em 19 de Novembro 2014
- ↑ J. Fuegi; J. Francis (outubro–dezembro de 2003). Lovelace & Babbage and the creation of the 1843 'notes'. IEEE Annals of the History of Computing. pp. 16–26. doi:10.1109/MAHC.2003.1253887
- ↑ Eric Hobsbawm, "The Age of Revolution", (London 1962; repr. 2008), p.45.
- ↑ a b Randell (ed.), Brian (1982). The Origins of Digital Computers, Selected Papers, 3rd ed. [S.l.]: Springer-Verlag. ISBN 978-3-642-61812-3
- ↑ a b Wexelblat, Richard L.(Editor) (1981). History of Programming Languages. New York: Academic Press. p. 17-18. 758 páginas. ISBN 0-12-745040-8
- ↑ CERUZZI, Paul E. (1998). A History of Modern Computing (em inglês). Cambridge, Massachusetts: The MIT Press. 398 páginas. ISBN 0-262-03255-4
- ↑ a b
«Morre John McCarthy, criador do termo 'inteligência artificial'». Folha.com. 24 de outubro de 2011. Consultado em 25 de outubro de 2011
- ↑ a b Jean_Sammet, The Early History of COBOL, p.121–161, ACM SIGPLAN Notices, Association for Computing Machinery, Inc., 1978
- ↑ «ALGOL | computer language». Encyclopedia Britannica (em inglês). Consultado em 9 de outubro de 2021
- ↑ Knuth, Donald E. (dezembro de 1964). «backus normal form vs. Backus Naur form». Communications of the ACM (em inglês) (12): 735–736. ISSN 0001-0782. doi:10.1145/355588.365140. Consultado em 9 de outubro de 2021
- ↑ Koster, C. H. A. «A Shorter History of Algol 68». Cópia arquivada em 17 de dezembro de 2007
- ↑ a b Moore, Lawrie (1980). Foundations of Programming with Pascal (em inglês). Chichester: John Wiley & Sns. p. 84. 238 páginas. ISBN 0-85312-171-0
- ↑ «INTRODUCTION TO SIMULA». staff.um.edu.mt. Consultado em 9 de outubro de 2021
- ↑ a b Langer, Emily (13 de outubro de 2011). «Dennis Ritchie, founder of Unix and C, dies at 70». Washington Post (em inglês). ISSN 0190-8286. Consultado em 4 de setembro de 2021
- ↑ a b «The Early History of Smalltalk». gagne.homedns.org. Consultado em 27 de agosto de 2021
- ↑ Sterling, Leon (1986). The art of Prolog : advanced programming techniques. Ehud Y. Shapiro. Cambridge, Massachsuetts: [s.n.] OCLC 13665520
- ↑ Gordon, Michael J. C. (1996). «From LCF to HOL: a short history» (PDF). p. 3. Consultado em 9 de outubro de 2021
- ↑ a b Ullman, Jeffrey D. (1998). Elements of ML programming ML97 ed ed. Upper Saddle River, NJ: Prentice Hall. OCLC 38039662
- ↑ [1] KNUTH, Donald. Structured Programming with go to Statements.
- ↑ a b Stroustrup, Bjarne (2009). Programming : principles and practice using C++. Upper Saddle River, NJ: [s.n.] OCLC 191927017
- ↑ Liskov, Barbara (março de 1988). «Distributed programming in Argus». Communications of the ACM (em inglês) (3): 300–312. ISSN 0001-0782. doi:10.1145/42392.42399. Consultado em 9 de outubro de 2021
- ↑ Fisher, Joseph A. (2005). Embedded computing : a VLIW approach to architecture, compilers and tools. Paolo Faraboschi, Clifford Young. San Francisco, Calif.: Morgan Kaufmann. OCLC 57546513
- ↑ «MacTech | The journal of Apple technology.». preserve.mactech.com. Consultado em 9 de outubro de 2021
- ↑ «4 das principais tendências em desenvolvimento de sistemas sob medida». Smart Innovation. 10 de agosto de 2021. Consultado em 10 de outubro de 2021
- ↑ Manjoo, Farhad (29 de julho de 2020). «Opinion | How Do You Know a Human Wrote This?». The New York Times (em inglês). ISSN 0362-4331. Consultado em 10 de outubro de 2021
- ↑ Erickson, Jonathan. «Dr. Dobb's Excellence in Programming Award». Dr. Dobb's. Consultado em 10 de outubro de 2021
- ↑ Waite, Mitchell (1992). The Waite Group's Visual Basic How-To. Waite Group Press. ISBN 1-878739-09-3, ISBN 978-1-878739-09-4, pp. dedication page
- ↑ Bill Joy's greatest gift to man â the vi editor, The Register
- ↑
Raynal, Michel (2012). Concurrent Programming: Algorithms, Principles, and Foundations. [S.l.]: Springer. p. vi. ISBN 978-3-642-32027-9
- ↑ «James Gosling - Computing History». Computinghistory.org.uk. Consultado em 9 de outubro de 2017
- ↑ St.Laurent, Simon; Makoto, Murata; Kohn, Dan (janeiro de 2001). «XML Media Types». Consultado em 10 de outubro de 2021
- ↑ Kowaltowski, Tomasz (abril de 1996). «Von Neumann: suas contribuições à Computação». Estudos Avançados (26): 237–260. ISSN 0103-4014. doi:10.1590/S0103-40141996000100022. Consultado em 9 de outubro de 2021
- ↑ Ritchie, Dennis M. «The Evolution of the Unix Time-sharing System» (PDF) (em inglês). Consultado em 13 de Setembro de 2021
- ↑ Wirth, Niklaus (1988). Programming in Modula-2 Fourth edition ed. Berlin: [s.n.] OCLC 18746666
- ↑
«Já pensou porque é que o Ruby é tão popular? Os fãs dizem que é uma linguagem elegante, repleta de arte. E no entanto, dizem que é prática e conveniente. Afinal qual é o resultado?». ruby-lang.org. Consultado em 16 de agosto de 2021
- ↑ «Rasmus Lerdorf» (PDF). K.C.S.S. Alumni Association. Consultado em 7 de janeiro de 2014. Arquivado do original (PDF) em 29 de outubro de 2013
Ver também
Bibliografia
- CAMPBELL-KELLY, Martin (2003). From Airline Reservations to Sonic the Hedgehog. A History of the Software Industry. Cambridge, Massachusetts: The MIT Press. 372 páginas. ISBN 0-262-03303-8
- CORTADA, James W. (1990). A Bibliografic Guide to the History of Computing, Computers, and the Information Processing Industry. New York: Greenwood Press. 644 páginas. ISBN 0-313-26810-X
- IFRAH, Georges (2001). The Universal History of Computing. New York: John Wiley and Sons. 410 páginas. ISBN 0-471-39671-0
- METROPOLIS, N.; HOWLETT, J; ROTA, Gian-Carlo(editores) (1980). A History of Computing in the Twentieth Century. New York: Academic Press. 659 páginas. ISBN 0-12-491650-3
- ORGANICK, E. I.;FORSYTHE, A. I.;PLUMMER, R. P. (1978). Programming Language Structures. New York: Academic Press. 659 páginas. ISBN 0-12-528260-5
- SAMMET, Jean E (1969). Programming Languages: History and Fundamentals. Englewood Cliffs, New Jersey: Prentice Hall. 785 páginas. ISBN 0-13-729988-5
- IVERSON, Kenneth E. (1962). A Programming Language (em inglês). New York: John Wiley and Sons. 286 páginas. ISBN 978-0-471-43014-8. Consultado em 22 de agosto de 2021
- AHO, Alfred V.; KERNIGAN, Brian K.; WEINBERGER, Peter J. (1988). The AWK Programming Language. Reading, Massachusetts, EUA: Addison-Wesley. 210 páginas. ISBN 0-201-07981-X
Ligações externas