⚙️ Você sabe o que acontece quando manda o compilador executar?
Entender mais sobre os aspectos fundamentais da computação é importante para evoluir como desenvolvedor!
Bora explorar esse tópico nessa breve thread! 1/9
Começando pela definição: o que é um compilador?
Em linhas gerais, é converter a representação de dados A para a representação B, de forma que haja uma relação entre elas.
Por exemplo, Babel compila de JS para outra versão de JS (ex: ES6 -> ES5), ou num equivalente minificado
2/9
As etapas de compilação geralmente são: código fonte -> análise léxica -> parser -> análise semântica -> otimização -> geração de código.
Um compilador pode ter mais ou menos etapas, dependendo da complexidade exigida pela linguagem/arquitetura alvo/trade-off. 3/9
Caso não use abordagem de scannerless parser, a partir do código fonte precisará tokenizá-lo.
Isto é, dividí-lo em uma sequência de tokens: uma string com significado associado.
Exemplo: [ valor: "while", signficado: "keyword"] [ valor: "name", significado: "identificador" ] 4/9
Na etapa de parser o objetivo é construir a AST (Abstract Syntax Tree), que representa o código numa árvore.
Num compilador que fiz usei a abordagem de Parser Combinator. Nela se constrói parsers simples e, com composições, construímos parsers mais especializados. 5/9
Na etapa de análise semântica verificamos se o código é semanticamente válido. Exemplo: toda variável lida é declarada?
Para fazer essas análises usamos a AST para construir uma estrutura auxiliar chamada Symbol Table, da qual inserimos os identificadores escritos pelo código 6/9
Na etapa de otimização, uma forma trivial é simplificar a AST para uma equivalente. Exemplo: dead code strip otimiza apagando código inalcançável ou variáveis escritas e nunca lidas.
Há otimizações que não mexem na AST, como trampoline, ou que usam representação intermediária 7/9
Por fim, a etapa de geração de código! Nela mapeamos os nós da AST para o equivalente na representação alvo.
Por exemplo: se na linguagem de input você não precisa declarar variáveis, mas na target precisa, terá que mapear os nós de uma variável para a declaração prévia dela. 8/9
Essa thread foi um brevíssimo resumo da talk que apresentei e está linkada abaixo.
Nele apresento em bem mais detalhes esse tópico e assuntos correlatos, bem passo a passo com várias animações e recomendações de para se aprofundar.
Assiste lá ~~ 😋
9/9
• • •
Missing some Tweet in this thread? You can try to
force a refresh
🎵 O estilo de música que mais gosto e consumo são de vocaloid, utau e utaite. É bem popular no Japão, mas fora de ciclos de otakus quase ninguém conhece... então lá vai uma breve thread explicando o que é, para quem sabe despertar a sua curiosidade! 🪡
1/10
Começando do começo, ou seja, com Vocaloid!
O termo vem do nome do software de sintetização de canto desenvolvido pela Yamaha. Quem já comprou algum instrumento certamente já conhece essa empresa, pois ela é líder no segmento.
2/10
A primeira versão foi lançada em 2004, mas o sucesso só viria na segunda, lançada em 2007, especialmente por apresentar a Hatsune Miku, que se tornaria a vocaloid mais popular.
Sim, o termo "vocaloid" pode se referir tanto ao software como a um dos personagens/voicebanks.