Você está na página 1de 5

UNIVERSIDADE ESTADUAL DO NORTE DO PARANÁ

CIÊNCIA DA COMPUTAÇÃO

JOÃO VICTOR SEYDI ARON SATO


MARIA LUISA MOREIRA DE SOUZA
ANDRÉ MALSEMIRO DA SILVA DE OLIVEIRA

BANDEIRANTES-PR
2023
Conhecendo a linguagem de
programação Lua.

1. Introdução.

Como base para o entendimento da linguagem Lua, podemos começar pelo histórico
do que chamamos de programação extensiva. A programação extensiva começou como um
movimento de 1960 em um paper do engenheiro Malcolm Douglas McIlroy. O conceito foi
desenvolvido em uma pesquisa que abordava os conceitos de macro.
A macro, em nosso meio é um conceito muito abrangente que ficou popular nessa
época, essa técnica consiste basicamente em uma série de tokens léxicos, árvores de sintaxe
ou caracteres, que no final são traduzidos para uma sequência de tarefas, ou seja, uma
tradução de um pequeno conjuntos de palavras que geram um bloco de código.

Prosseguindo com o que teríamos ao abordar o tópico de programação extensiva


devemos ter em mente os 3 principais conceitos que giram em torno desse ambiente.

● Paráfrase.
A paráfrase define o conceito de trocar algo facilitando sua utilização, por algo
previamente definido, ou que possa vir a ser definido. Levando-nos novamente ao
conceito de macro, onde substituímos um conjunto pré-definido de uma sequência
maior de códigos com uma tradução menor.

● Ortofrase
A ortofrase pode ser definida como a adição de uma capacidade que não está descrita
na linguagem base, ou seja, ela pode por exemplo adicionar a capacidade de uma
comunicação com i/o de uma linguagem que não possibilita isso. Nesse caso a
segunda linguagem deve descrever essa adição em sua documentação. Podemos
traduzir essa técnica como o que comumente denominamos hoje em dia de plug-ins.

● Metáfrase
A metáfrase tem como objetivo criar um sentido a uma parte do código que ainda não
existe, como uma assinatura para ditar suas regras, um conceito que hoje chamamos
de reflexão, utilizada em Java, linguagens que são orientadas a reflexão observam
cápsulas de códigos durante o tempo de execução que podem se adaptar a medida do
objetivo que se é imposto para elas.

O conceito de linguagens de extensão passou por muito, morta, a dificuldade de sua


utilização era demasiada, pois deveria se ter conhecimento do baixo nível de sua linguagem
base para sua utilização, o que era custoso demais até haver necessariamente algum ganho.
Sem contar com seu nível de abstração extremamente alto.

Tendo esses conceitos estabelecidos podemos passar para o que se tem hoje em dia
como linguagens de extensão. A definição moderna dessa técnica pode ser separada em
cinco passos:

● Extensão em sintaxe.
De maneira simples, a linguagem base deve permitir a adição e modificação
de conceitos, palavras-chaves. Algumas linguagens permitem essa construção
feita pela usuário, no caso de Lua, sua base é feita em C limpo, ou seja, é um
subconjunto de C++ e ANSI C.

● Extensão em compilação.
Na programação extensiva o compilador não é um programa monolítico que
traduz um código fonte para um binário, necessariamente. Um compilador
extensivo deve ter as seguintes capacidades:
➔ Usar um plug-in ou componente de arquitetura para quase todos os
aspectos de suas funções, que irão traduzir os mesmo.
➔ Determinar qual linguagem (ou variante) está sendo compilada, para
utilizar um plug-in para reconhecer essa linguagem e a validar de
maneira apropriada..
➔ Usar as definições formais da linguagem, para estruturalmente e
sintaticamente, validar arbitrariamente o código fonte.
➔ Dar assistência a validação da semântica por meio da chamada de um
plug-in que é adequado para fazer isso.
➔ Permitir ao usuário ditar qual será o formato final do executável para
que seja utilizado em qualquer sistema (e processador), seja virtual ou
não.
➔ Prover algumas facilidades para a geração de erros que podem ocorrer
na extensão da linguagem base.
➔ Permitir novos tipos de nós em sua árvore de sintaxe.
➔ Permitir novos valores aos nós já existentes na árvore de sintaxe.
➔ Permitir novas pontas (quinas) entre os nós, nas árvores de sintaxe.
➔ Permitir a transformação dos inputs da árvore de sintaxe ou uma parte
de si mesmo em um novo “passe” externo, possibilitando sua
reutilização.
➔ Permitir a tradução dos inputs da árvore de sintaxe ou uma parte de si
mesmo em outro formulário a partir de algum “passe” externo.
➔ Permitir que a informação que está fluindo entre os passes internos e
externos sejam transformadas e traduzidas em suas árvores de sintaxe
para a criação de novas árvores de sintaxe.

● Extensão em tempo de execução.


Linguagens de programação de extensão permitem que programas, durante o
tempo de execução, utilizem a abstração da utilização de interpretadores para
bytecodes.
● O conteúdo separado do formulário.
Programas de extensão devem tratar programas em execução como dados a
serem processados, o display visual e a edição desses dados devem ser
passados em formulários separados que vão ser processados. Naturalmente
essa tradução ocorre tanto na parte do programa hospedeiro quanto na parte do
programa de extensão.

● Suporte ao debug da linguagem base.


Os programas de extensão também devem ser capazes de utilizar os debugs da
linguagem base para poder visualizar o programa hospedeiro em seu código
fonte, permitindo visualizar como tabelas de dados, nesse caso debug estaria
como um “inspetor de programas”.

2. O Paradigma, as utilizações, e seu ambiente de execução.

A linguagem de programação lua é multiparadigma e extensível, pode ser programada


tanto quanto em paradigmas mais conhecidos como o paradigma funcional, orientado a
objetos e orientado a dados. Nesse sentido, como aprendemos anteriormente, a linguagem
Lua por conta de ser uma linguagem de extensão, trabalha com base em outras linguagens.
Especificamente com ANSI C; em sua documentação, a principal proposta da linguagem é
ser utilizada em conjunto com programas hospedeiros, uma linguagem de script, leve, rápida,
para ser utilizada em qualquer local onde nativamente há um compilador em C.
Lua foi criada na PUC-Rio no ano de 1993, pelo Grupo de Tecnologia em
Computação Gráfica.
A linguagem é dinamicamente tipada, como não é seu principal foco pode deixar a
desejar no sentido de segurança de tipos, mas existem bibliotecas que suprem essa
necessidade, uma versão alternativa a sistemas em Lua que possibilitam mais possibilidades
de tipagem.
Um outro fator que é muito nítido em Lua é sua estrutura de dados, as tables ou
tabelas em português; as tabelas podem representar variáveis como vetores, além de criar
name spaces para simulação de objetos, que podem conter campos de atributos e funções que
representam métodos, além das tabelas também terem suas operações básicas que já
conhecemos de outras estruturas, como pilhas, filas e etc…
As bibliotecas em Lua tem várias funcionalidades como criptografia, testes, redes e
muitas outras coisas, é importante ressaltar que as suas bibliotecas que são voltadas para
sistemas embarcados tem um foco especial pois uma das propostas da linguagem é
justamente ser utilizada em sistemas como esse (e também utilização em conjunto com outros
sistemas ou programas hospedeiros). Mas deixa a desejar em questão de frameworks para sua
utilização, apesar de haver uma comunidade grande da linguagem, seus frameworks não se
equiparam a outras linguagens que tem outros objetivos. Os frameworks de Lua são em sua
maioria voltados para desenvolvimento de jogos.
Alguns dos lugares que a linguagem lua pode ser utilizada como citado acima (desde
que haja um compilador nativo de C), são sistemas operacionais como o windows, linux,
sistemas embarcados, smartwatches e até mesmo jogos.
No geral, Lua é uma linguagem consideravelmente popular quando se trata de
aplicações que necessitam de uma linguagem poderosa que possibilita uma grande
maleabilidade quanto ao que se trata de paradigmas mas ainda seja leve e que possibilita
mudanças e adição de funcionalidades.
A fins de curiosidade podemos citar algumas das aplicações e projetos que atualmente
utilizam Lua alguns exemplos são:

1. -

E por fim, quanto ao seu ambiente de execução, Lua é uma linguagem interpretada,
pois como citado anteriormente, ela é uma linguagem de extensão e roda em cima de uma
linguagem base, necessariamente o ANSI C. Nesse sentido o processo de compilação da
linguagem pode ser representado pelo seguinte fluxograma:

Você também pode gostar