Evolução das Linguagens de Programação
Por Ronaldo Melo Ferraz
http://logbr.reflectivesurface.com/2003/03/26/evolucao-das-linguagens-de-programacao/
Linguagens de programação, pela sua própria natureza, são criadas e
mudam muito rapidamente. Cada nicho, necessidade e mercado criam
oportunidades para o desenvolvimento de novas formas. Um documento
escrito no começo de 1995 listava a existência de 2350 diferentes linguagens.
Mesmo com essa abundância de linguagens, a sobreposição dos
conceitos comuns é muito grande. Se observamos a criação de linguagens nos
últimos dez anos, é fácil perceber que há pouquíssima evolução em termos de
estruturas e conceitos. Perl, Python, PHP, Java, C, C++, C# e Delphi
apresentam diferenças mínimas entre si. E, na maioria das vezes, essas
diferenças não passam de um “açúcar sintático” que simplesmente mudam a
maneira de escrever determinadas construções, sem alterar a semântica das
mesmas. Pelas listas mencionadas anteriormente, pode-se também perceber
que muitas linguagens não passam de pequenas ligeiras variações de uma
linguagem base. Para esclarecer, a palavra evolução aqui está sendo usada
para denotar reais mudanças de conceitos em oposição às mudanças que
ocorrem devido à escolha de características para uma linguagem em função de
necessidades e/ou gostos pessoais. Embora as linguagens citas acima sejam
todas imperativas, o mesmo padrão é repetido em outras classes de
linguagens. Por exemplo, a maioria das linguagens funcionais não ultrapassam
muito dos paradigmas vistos em LISP. Para compensar essa homogeneidade, o
foco de desenvolvimento parece ter mudado atualmente para a criação de
metodologias que empregam melhor as linguagens já existentes. Extreme
Programming e UML são exemplos dessa tendência. São técnicas que se
encaixam em praticamente qualquer tipo de linguagem de programação, mas
não alteram fundamentalmente as mesmas. Um outro foco é a criação de
grandes bibliotecas que cercam, muitas vezes de maneira inferior, as
limitações de algumas linguagens.
Uma exceção ao padrão acima é a lenta adoção de conceitos com
programação orientada a aspectos, design por contrato e genéricos. Embora
esses conceitos não seja novos, a implementação dos mesmos ainda é
relativamente rara. Certas linguagens — como Smalltalk, por exemplo —
apresentam alguns desses conceitos de maneira natural, mas a vasta maioria
das outras linguagens permanece estacionada em locais próximos às suas
origens. Um exemplo é o Delphi, uma variante do Object Pascal, usada na
ferramenta homônima da Borland. Depois de tornar-se uma linguagem
orientada a objetos — o que aconteceu por volta de 1989 — pouca coisa nova
foi acrescentada à mesma. Outras linguagens, como Beta, estão realmente
procurando criar novos paradigmas, mas em geral permanecem no domínio
acadêmico e têm pouco foco comercial.
É interessante notar que algumas das linguagens mais usadas no
mundo saíram de sua infância procedural há relativamente pouco tempo. PHP é
um exemplo desse tipo de linguagem. Outras, embora já tendo nascido
orientadas a objetos, não acrescentaram nenhuma novidade ao conceito. Neste
caso, Python e Java seria exemplos típicos. Isso quer dizer que muitas
linguagens estão repetindo um ciclo evolutivo que já é antigo.
Apesar de todos esses fatos, um questionamento pode ser feito: até
que ponto a evolução das linguagens é necessária para determinados tipos de
tarefa? Smalltalk, por exemplo, permanece significativamente inalterada por
décadas e mesmo assim se mostra incrivelmente capaz de se adaptar às novas
realidades da programação. De maneira similar, LISP é capaz de dobrar-se às
mais diversas tarefas sem mudanças significativas no núcleo da linguagem. É
um fato interessante notar que ambas a linguagens são consideradas como
segredos
bem-guardados
por
algumas
empresas
que
se
utilizam
da
produtividamente das mesmas para manter vantagens competitivas. Estaria o
futuro da programação em um forte retorno comercial dessas linguagens?
Smalltalk e LISP possuem uma característica em comum que pode
explicar o fato de ambas permanecerem atuais: a simplicidade. Smalltalk conta
com apenas cinco palavras-chave e umas poucas regras sintáticas para
expressar suas construções. Ainda assim, o número de linhas requerido para
implementar uma determinada tarefa em Smalltalk é patentemente menor do
que na maioria das outras linguagens imperativas. LISP segue o mesmo
padrão. As expressões que constituem o cerne da linguagem permitem uma
flexibilidade
enorme
na
programação
e
são
capazes
de
representar
praticamente qualquer construção requerida. Essa flexibilidade confere a LISP
a mesma capacidade de implementar uma tarefa em menor quantidade de
linhas e tempo mostrada por Smalltalk. O fato de ambas usam o conceito de
uma imagem que contém o ambiente de desenvolvimento dinamicamente
também contribui enormemente para a eficiência das mesmas
Embora
restrita,
uma
a
evolução
tendência
das
atual
linguagens
pode
ter
permaneça
um
impacto
aparentemente
positivo
no
desenvolvimento e aperfeiçoamento dos conceitos de programação. Essa
tendência é a adoção em maior escala de máquina virtuais. A era da
ineficiência ficou para trás e as novas máquina virtuais, que combinam
compilação e interpretação para aproveitar eficientemente os recursos da
máquina, apresentam excelente desempenho e fornecem um bom campo para
a experimentação e uso de conceitos que não ficam restritos aos tradicionais
ambientes profundamente ligados às suas origens de baixo nível. É notório
também o fato de que tanto Smalltalk quanto LISP são normalmente
implementadas usando máquina virtuais. Algumas linguagens modernas têm
procurado ganhar a mesma flexibilidade introduzindo novas palavras-chave às
custas de uma aumento na complexidade geral das mesmas.
Um outro conceito que também vem ganhando força nos últimos anos
é o de tipos dinâmicos, determinados em tempo de execução, versus o
conceito de tipos estáticos, determinados em tempo de compilação. Muitas das
linguagens atuais (PHP, Python, Perl) optaram por tipos dinâmicos para ganhar
flexibidade e produtividade. É curioso que Java e C#, linguagens criadas
apenas com preocupações mercadológicas, usem tipos estáticos e apresentem
vários recursos para “violar” esses conceitos em virtude de falhas óbvias
(boxing é um desses recursos, que procura remediar o fato de que nem todos
os valores nessas linguagens são objetos). Mais uma vez podemos observar
que tanto Smalltalk quanto LISP estavam à frente de seu tempo nesse
aspecto.
Assim, qual será o caminho evolucionário que as nova linguagens
seguirão? Obviamente, as necessidades atuais em termos de programação não
permanecerão constantes. Será que os modelos procedurais e/ou orientados a
objeto,
tais
como
existem
hoje
serão
capazes
de
atender
a
essas
necessidades? Será que linguagens como Smalltalk e LISP, que provaram-se
resistentes à passagem do tempo, serão capazes de se manter atuais sem
mudanças significativas em sua sintaxe e semântica? Quais serão os grandes
temas futuros das linguagens de programação? Essas são perguntas que não
sei nem por onde começar a responder, mas que acredito serem cruciais para o
futuro do desenvolvimento de aplicações.
Download

Evolução das Linguagens de Programação Linguagens