Pois é, tem o trabalho do Rivera. Mas não achei adequado incluir este tópico dentro de Ciência da Computação se não diz respeito a uma de nossas matérias diretamente - neste caso Paradigmas de Linguagens de Programação, que trata da avaliação de linguagens -, mas a uma linguagem em sí.
Falei com o Max sobre o trabalho (criar um programa em C que chame uma aplicação em Lua que por sua vez chama duas co-rotinas) e ele me mostrou esse site[1]. Nele é utilizada a notação BNF estendida usual, o que vai ser ótimo para praticarmos o que aprendemos enquanto aprendemos.
Costumo fazer um mapmind quando estudo algo novo e importante, mas não tenho como escanear meu desenho então só vou copiar algumas anotações mais importantes.
Lua
Lua é uma linguagem de extensão, sempre usada em conjunto com outras (chamado de programa hospedeiro ), criando-se uma aplicação menor. Por isso ela nem mesmo possui uma função principal. Lua é ainda uma linguagem de script. Sempre imaginei que essa seria o último paradigma com o qual me depararia. Pensava em estudar alguma funcional porque Scheme - do último trabalho -, apesar de ser perturbadora com tantos parênteses, me deixou curioso pelo fato de ser baseada apenas em funções, mas Lua também possui suporte à funcionalismo... a orientação a objetos e a dados!
Em Lua são permitidas atribuições múltiplas: x, y, z = y, z, x[;] ponto-e-vírgula opcional como em JavaScript
Variáveis não possuem tipos, apenas os valores os possuem.
Funções e trechos[2] de comandos ou expressões podem retornar mais de um valor e "qualquer expressão delimitada por parênteses sempre resulta em um único valor. Dessa forma, (f(x,y,z)) é sempre um único valor, mesmo que f retorne múltiplos valores. (O valor de (f(x,y,z)) é o primeiro valor retornado por f, ou nil se f não retorna nenhum valor.)"
Peço que tenham atenção dobrada ao passar pelas seções 2.5 Expressões e 2.5.9 Definições de Funções, pois elas explicam a regras de ajustes de parâmetros de funções que podem ser um tanto complicadas.
Exponenciação é um dos operadores aritméticos. "Por exemplo, x^(-0.5) calcula o inverso da raiz quadrada de x."
"Os comandos return e break somente podem ser escritos como o último comando de um bloco. Se é realmente necessário ter um return ou break no meio de um bloco, então um bloco interno explícito pode ser usado, como nas expressões idiomáticas do return end e do break end, pois agora tanto o return como o break são os últimos comandos em seus respectivos blocos (internos)."
"Módulo é definido como a % b == a - math.floor(a/b)*b
ou seja, é o resto de uma divisão arredondada em direção a menos infinito."
Não entendi como é calculado o 'arredondada em direção a menos infinito', se alguém compreender me explique.
No mais, achei Lua uma versão refinada do C, com o código muito mais limpo e legível já que usa palavras-chave como then, do e end. Mas a confiabilidade, já ruin em C, foi estilhaçada ao não considerar tipos para as variáveis. Além disso Lua trata de estruturas que nunca vi antes, como metatabelas e ambientes - que pude, antes no máximo deduzir -, que exigem um nível bem maior de habilidade de programação.
Desejo propor um Forkin sobre Lua para os próximos encontros, já começando nessa quarta (17). Assim devemos ler as três primeiras seções do site[1], as quais primordialmente nos interessam nesse momento, até lá. Se concordarem...!
[1] http://www.lua.org/manual/5.1/pt/manual.html
[2] A unidade de execução de Lua é denominada de trecho.