Olá pessoal,

Hoje venho falar de mais um evento ocorrido em Natal-RN (em 02/03/2010), no auditório da Biblioteca Zila Mamede (UFRN), o qual teve como palestrante o prof. Dr. Roberto Ierusalimschy, da PUC-RJ, criador da linguagem de programação Lua, utilizada em diversos projetos pelo mundo. A palestra abordou temas como o que considerar na criação de uma linguagem de programação e aspectos técnicos de Lua, como seu sistema de números e as chamadas co-rotinas. Em seguida, darei uma breve descrição do evento.

O que escolher ao projetar uma linguagem

Primeiramente, o professor Roberto definiu que não há uma linguagem ótima para tudo, pois na criação de qualquer uma é preciso escolher entre temas como Segurança vs. Flexibilidade, ao escolher tipagem estática ou dinâmica; Legibilidade vs. Concisão, no caso de haver diversos modos para realizar a mesma tarefa; e Desempenho vs. Abstração, principalmente em linguagens interpretadas. No entanto, o foco é Simplicidade vs. Quase todo o resto, ou seja, se você deseja criar uma linguagem bem simples, é preciso abdicar de muitas outras qualidades, já que muitos problemas podem ser resolvidos ao adicionar complexidade.

Lua

Em seguida, o docente da PUC-RJ explicou que um dos objetivos principais de Lua, se não o principal, é a simplicidade (“Tão simples quanto possível, mas não mais do que isso.”). Contudo, eles almejaram sempre algo com muitos usos e usuários, focando também em portabilidade e o termo “embedability”, criado pelo próprio Ierusalimschy para designar que pode ser incorporada a diversos outros projetos, como C/C++, Java, Fortran, C#, Perl, Ruby, Python, Ada, etc.

Lua possui um tamanho extremamente pequeno se comparada com outras linguagens com o mesmo poder que ela, pois tem seu binário com menos do que 200KB e possui o núcleo da linguagem separado de diversas bibliotecas, sendo bem fácil removê-las e tornar um projeto ainda menor, sendo possível rodar em quase tudo o que já se ouviu falar. O professor Roberto deu algumas características fundamentais da linguagem, como: sintaxe convencional; sintaticamente parecida com Scheme; escopo estático; tipagem dinâmica; procedimentos são objetos e argumentos são passados por valor (as alterações no valor dos parâmetros não são feitos na própria variável passada, mas em uma cópia dela); modelo de aritmética do IEEE 754.

Design

Nesse ponto da palestra a discussão começou a ser mais técnica, abordando aspectos do projeto da linguagem Lua, como seu sistema numérico, as tabelas, as co-rotinas e o casamento de padrões (também conhecido por expressões regulares, mas de forma equivocada, segundo o professor Roberto Ierusalimschy).

Os números em Lua são tratados em um único tipo numérico, o que possibilita regras claras e bem documentadas, evitanto regras de conversão entre tipos e possuindo uma implementação simples em C, contudo há uma enorme lentidão quando o hardware não suporta ponto flutuante e é difícil lidar com operações bit-a-bit, pois não se sabe quantos bits exatamente estão sendo usados para representar o número.

As tabelas são arrays associativos, ou seja, permitem qualquer valor como chave, e é a única estrutura de dados em Lua, podendo implementar tanto módulos (math.sin(3)) quanto objetos, no entanto não há controle de acesso com as palavras reservadas private, protected, etc., sendo necessário convencionar entre os próprios programadores essa permissão. Outro problema é a determinação de tamanho de sequências utilizando tabelas, pois índices nil são tratados como inexistentes, gerando inconsistência em situações como (1, 2, nil, 4) [Quantos elementos há nessa sequência?].

A co-rotina é uma funcionalidade de Lua pouco presente em outras linguagens (parecida com as continuações de Scheme, mas com implementação e semântica mais simples) e podem ser chamadas em qualquer ponto do programa e controladas em qualquer nível de função (no caso de recursividade). Para entender melhor esse conceito e os outros, é recomendado que se veja a documentação da linguagem.

Também foi abordado o casamento de padrões, funcionalidade não muito completa na linguagem, possuindo uma biblioteca padrão pequena e sendo desenvolvida a biblioteca LPEG, ainda não-padrão, com muitas alternativas, todavia ainda muito grande para ser incorporada a Lua (~ 2200 linhas de código).

Conclusão

Por fim, pôde-se perceber que o projeto de qualquer linguagem envolve conflitos de objetivos e, dessa forma, é preciso ter bem definido na mente do criador quais são suas prioridades, porque, como o professor Roberto também frizou, é mais fácil fazer algo novo em uma linguagem do que tirar.

Posts interessantes:

E você, o que achou da palestra sobre a criação da linguagem Lua? Alguma dúvida? Comente e vamos discutir o assunto!

Helton de Melo Duarte

“Porque vale mais um dia nos teus átrios do que, em outra parte, mil. Preferiria estar à porta da Casa do meu Deus, a habitar nas tendas da impiedade.” Salmos 84.10

“Porque o SENHOR Deus é um sol e escudo; o SENHOR dará graça e glória; não negará bem algum aos que andam na retidão.” Salmos 84.11

One Response to “Small is Beautiful: The Design of Lua”

  1. Google Summer of Code – Ajude o Software Livre! | Blog de Helton Duarte Says:

    [...] Sugestões « Small is Beautiful: The Design of Lua [...]

Leave a Reply

Spam Protection by WP-SpamFree