Linguagens de Programação

Palavras-Chave

Existem dois pontos principais que relacionam o programa desenvolvido em uma linguagem de programação e sua execução em um sistema operacional:

  1. Não é necessário saber todas as instruções de um processador para a construção de um programa;
  2. As linguagens de programação são as ferramentas existentes para o programador não ter de lidar com todas as instruções de um processador ao desenvolver um programa.

A motivação para a criação das linguagens de programação vem do fato de que as instruções que são utilizadas por um processador serem muito difíceis. Os códigos escritos em alguma linguagem de programação são traduzidas para um conjunto de instruções específicas de um processador. Esta prática facilita a rotina de um programador, que já não necessitam saber destas instruções de “baixo nível” para trabalhar com instruções de “alto nível” (ou instruções abstratas), que são mais fáceis para o programador relacionar com os problemas do dia a dia, ou seja, que são mais fáceis trabalhar.

As linguagens de programação são parecidas com as línguas faladas e escritas. Elas possuem palavras com significado, uma gramática e uma sintaxe. Mais especificadamente, as linguagens de programação são uma abstração das linguagens faladas e escritas.

Existe uma diversidade enorme de linguagens de programação (Figura 01).

Figura 01 – Linguagens de programação.
Fonte: https://miro.medium.com/max/2400/1*WarAc0Jghane6KFJiqZUEg.png

Cada linguagem de programação automatiza partes de um processo com algum nível de abstração. Quanto mais próxima a relação de uma linguagem de programação com as instruções de um processador (linguagem de máquina) mais baixo é o seu nível (Assembly). Em contrapartida, existem as linguagens de mais alto nível (Java, PhP, Python etc) em que as instruções em nada se parecem com as instruções de um processador.

Exemplo de um código JavaScript (Alto nível):

E seu equivalente em Assembly (Baixo nível):

Logo, um programador pode desenvolver uma solução apenas conhecendo a linguagem de programação na qual trabalha, sem a necessidade de ele saber, efetivamente, como um computador funciona.

A vantagem de se entender como um processador lida com endereços de memória, barramentos, dados etc; é ser capaz de relacionar algum aspecto do desenvolvimento de sua aplicação a algum aspecto da arquitetura de um computador. Assim, o programador poderá solicitar modificações de hardware e software ao engenheiro, visando obter melhores resultados de execução e, consequentemente, a qualidade de seus programas.

Uma linguagem de programação geralmente possui dois tipos de automação, são elas:

  1. Um conjunto de instruções para lidar com o processador;
  2. Ferramentas para organização da memória.

Onde cada linguagem tem uma forma diferente de lidar com esta automação.

Em algumas linguagens (C, C++ etc), o processo para criação de um programa é:

  1. Escrever o código;
  2. O código será interpretado pelo compilador;
  3. O compilador “traduzirá” o código para uma linguagem de máquina;
  4. O programa está pronto para ser executado no computador.

Em outras linguagens este processo de tradução ocorre de instrução por instrução, ou seja, cada instrução é traduzida em linguagem de máquina e executada em tempo real. Estas linguagens são conhecidas como linguagens interpretadas (Octave, Python etc).

Uma das principais vantagens das linguagens interpretadas é de que é possível modificar um programa durante sua execução com a criação de terminais iterativos e de scripts.

Existem ainda linguagens (Java, JavaScript etc) em que se traduz o código escrito em uma linguagem intermediária que não é entendida pelo programador nem pelo computador. Mas em cada computador, esta linguagem intermediária é traduzida para sua arquitetura específica através de um Runtime Engine (ou motor de execução em tempo real).

A vantagem destas linguagens intermediárias é a de que um mesmo programa pode ser executado em várias arquiteturas diferentes, sem a necessidade de se modificar o código escrito ou recompilar o código para cada arquitetura toda vez que ele for executado.

Objetivamente, existem situações em que se a compilação for realizada antes da execução, a execução do programa será mais rápida como, por exemplo, nos Sistemas Operacionais. E existem situações em que se necessita modificar um programa rapidamente, nessas situações a compilação pode atrasar o processo de criação do programa como, por exemplo, em aplicações web.

Concluindo, existem uma diversidade enorme de linguagens de programação, com diversas características e processos. Entender como estes processos funcionam possibilita ao programador comparar a eficiência de cada linguagem para cada solução.

Referências

  • PIVA JÚNIOR, Dilermando (et al). Estrutura de dados e técnicas de programação. 1. ed. Rio de Janeiro, RJ: Campus, 2014. 399 p. ISBN: 9788535274370.
  • ASCENCIO, Ana Fernanda Gomes. Estruturas de dados: algoritmos, análise da complexidade e implementações em Java e C/C++. São Paulo: Pearson, c2010. 432 p. ISBN: 9788576052216, 978857605816.