Dúvidas Frequentes
Há tipos recursivos em PIG?
Para os tipos recursivos na linguagem seria necessário ter alocação dinâmica de memória em heap. Como não teremos esse recurso, a estrutura recursiva inteira deveria definida estaticamente (isto é, "hard coded" pelo programador), o que não tem muita utilidade. Sendo assim, não temos tipos recursivos.
A ausência de tipos recursivos não deve causar muito prejuízo, já que a natureza dos problemas em computação gráfica, processamento de imagem e geometria computacional geralmente não envolve recursão (ou ela é evitada a todo custo).
Existe alias em PIG?
Aliasing se refere a existência de dois ou mais nomes para acessar o mesmo endereço de memória. A maioria das linguagens permitem alguma forma de \textit{aliasing} -- ponteiros podem apontar para o mesmo endereço; referências podem indicar o mesmo objeto; tipos podem ser apelidados; uniões permitem acessar o mesmo endereço de memória de duas formas diferentes; operadores podem ser sobrecarregados; constantes/enumerações podem "renomear" literais.
A existência de aliasing na linguagem é uma complicação para a redigibilidade dos programas, uma vez que, no geral, não há indicadores de que duas variáveis referenciam um mesmo endereço de memória. Pela mesma razão surgem os problemas de segurança: alterar a variável via um alias automaticamente altera o outro, e pode não ser claro quando ou onde a mudança ocorre. O exemplo clássico é quando dois ponteiros apontam para o mesmo endereço e deletamos a variável via um deles: o outro ponteiro é invalidado e o programador é forçado a ter isso em mente para não cometer erros. Além disso, aliasing complica a verificação formal de programas.
Na linguagem PIG, temos:
- passagem de parâmetros por referência usam referências;
- sobrecarga de funções e operadores (e funcoes, que ta incluso em operadores).