13 de setembro de 2021

Quem programa as linguagens de programação?

Acredito que todo programador já se perguntou ou irá se perguntar como as linguagens de programação são feitas, principalmente se você não teve nenhuma disciplina como compiladores na faculdade. Eu me fiz essa pergunta algumas vezes e aprendi muito com ela. Se você pesquisar na internet sobre como compiladores são feitos ou perguntar por ai um dos conteúdos que irá descobrir é o excelente, porém bem complexo para iniciantes, Compiladores: Princípios, técnicas e ferramentas de Alfred V. Aho Et al.

O famigerado Livro do Dragão

Como a capa indica, você irá enfrentar um dragão e por isso já precisa ser um guerreiro ou guerreira medieval. O livro é denso e confesso que não consegui acompanhar logo de cara, mas é reconhecidamente uma referência no mundo das linguagens de programação. Tentar iniciar por ele pode frustrar a pessoa e afasta-la do conteúdo por um tempo, algo que aconteceu comigo principalmente pela falta de prática que o livro tem em seu inicio.

A minha sorte é que algum tempo atrás o Luciano Ramalho, escritor do Python Fluente, fez uma oficina de linguagens de programação no Garoa Hacker Clube e o gravou e disponibilizou as suas palestras online.

Esse conteúdo é baseado no excelente artigo How to write a (Lisp) interpreter in Python do Peter Norvig, onde ele cria uma linguagem baseada em Lisp em Python, mostrando todo os processos para você conseguir interpretar uma linguagem de programação. O artigo é bem didático e se você conseguir acompanhar o texto em inglês vale apena lê-lo. 

Com o conteúdo do Luciano Ramalho e o artigo do Peter Norvig eu consegui ter uma visão muito interessante sobre como as linguagens de programação são feitas, principalmente as interpretadas e os conceitos iniciais de linguagens compiladas (que vão além das intepretadas pois transformam as estruturas de dados criadas no início para outras linguagens).

Agora estou lendo o livro Crafting Interpreters de Robert Nystron. O Robert Nystron trabalha no Google no desenvolvimento da linguagem Dart, utilizada por exemplo no famoso framework para aplicações móveis Flutter. O livro que está disponível gratuitamente na internet e explica como criar interpretadores e compiladores, porém diferentemente do livro do dragão o Crafting Interpreters passa pelos conceitos teóricos como uma referência para a implementação prática que ele está fazendo. O livro é muito rico e segue um formato incremental de aprendizado, abusando de ilustrações e código explicado é um conteúdo que recomendo muito mesmo para quem domina apenas o básico de programação e orientação a objetos (mas não acho que seja um livro para iniciantes em programação). 

Crafting Interpreters de Robert Nystron

O livro é basicamente dividido em duas partes, a primeira, a qual estou lendo agora, é dedicada a criação de um interpretador feito em Java para uma linguagem básica porém com diversos conceitos (funções de primeira ordem, classes, análise semântica do código) chamada Lox. Apesar do Java não ser a linguagem mais convidativa para iniciantes o autor não utiliza nenhum recurso mirabolante (apenas umas interfaces com um pouco de tipos genéricos, mas que é possível abstrair num primeiro momento), o que faz com o que o foco fique nos algoritmos utilizados e no entendimento dos conceitos e funcionalidades da Lox. Vamos desde a implementação de operadores simples criando assim uma calculadora básica até a criação de funções de primeira ordem e classes. Quase todos os capítulos encerram com um pequeno texto do autor discutindo os conceitos ensinados e também as diferenças entre diversas linguagens de programação e os prós e contras de cada decisão implementada em linguagens já bem conhecidas.

A segunda parte do livro é dedicada a implementação em C da linguagem junto com uma máquina virtual, visando tópicos mais avançados como a própria máquina virtual, compilação e otimizações internas, avançando assim para os tópicos mais avançados. 

Depois irei tentar novamente enfrentar o dragão, acreditando que estarei mais preparado, o que é inclusive uma proposta do Robert Nystron no Crafting Interpreters. Mesmo que você nunca venha trabalhar implementando uma linguagem de programação a visão de como as linguagens são implementadas e também apreciar melhor cada decisão tomada nas linguagens que você utiliza.

 

Nenhum comentário:

Postar um comentário