Slide 1

Slide 1 text

Aventuras com a BEAM: Por que essa VM está sendo tão falada ultimamente? Ou em outras palavras: Uma iniciante em elixir tentando compilar uma mini linguagem para a BEAM e descobrindo coisinhas novas

Slide 2

Slide 2 text

Quem sou eu? - Cherry Ramatis - Mulher trans 🏳⚧ - Desenvolvedora web a 5 anos - Curiosa por Elixir e programação funcional - Usuária de vim em recuperação após usar emacs - Escritora técnica no dev.to - Moderadora da He4rt Delas - Fun fact: Essa é minha primeira palestra presencial \o/

Slide 3

Slide 3 text

Postem fotos e marquem a #elixirdays 
 @cherry.ramatis @cherryramatis @elixirdays

Slide 4

Slide 4 text

Por que estou fazendo essa palestra?

Slide 5

Slide 5 text

Por que estou fazendo essa palestra?

Slide 6

Slide 6 text

Por que estou fazendo essa palestra?

Slide 7

Slide 7 text

O que diacho é a BEAM? My Code OTP (Lib Erlang) BEAM Erlang Runtime (ERTS) OS My Code OTP (Lib Erlang) BEAM Erlang Runtime (ERTS) OS Elixir

Slide 8

Slide 8 text

O que diacho é a BEAM?

Slide 9

Slide 9 text

O que diacho é a BEAM?

Slide 10

Slide 10 text

Distribuido por padrão My Code OTP (Lib Erlang) BEAM Erlang Runtime (ERTS) OS My Code OTP (Lib Erlang) BEAM Erlang Runtime (ERTS) OS Network

Slide 11

Slide 11 text

Distribuido por padrão

Slide 12

Slide 12 text

Qual o objetivo desse projetinho? Fazer o parse de uma pseudo linguagem com seguinte estrutura: func_name = Integer Gerar um arquivo .beam com o módulo e a função carregadas Carregar o módulo em um REPL erlang ou elixir

Slide 13

Slide 13 text

Planos futuros para o projeto - Suportar operadores com os números - Suportar encoding de string - Entender como executar funções

Slide 14

Slide 14 text

Como se parece um arquivo .beam?

Slide 15

Slide 15 text

Como se parece um arquivo .beam?

Slide 16

Slide 16 text

Um pouco sobre os chunks desse arquivo que compilamos Import Chunk Export Chunk Contem os indexes do atom que representa as funções importadas do módulo Contem os indexes do atom que representa as funções exportadas do módulo Atoms Chunk Contem uma lista de todos os simbolos encontrados no módulo (inclusive nome do modulo e de funções) String Chunk Contem todas as strings constantes do módulo como uma string concatenada.

Slide 17

Slide 17 text

Code Chunk Contém o encoding de cada função no módulo com suas respectivas instruções asm Um pouco sobre os chunks desse arquivo que compilamos

Slide 18

Slide 18 text

Code Chunk Contém o encoding de cada função no módulo com suas respectivas instruções asm Um pouco sobre os chunks desse arquivo que compilamos

Slide 19

Slide 19 text

Code Chunk Contém o encoding de cada função no módulo com suas respectivas instruções asm Um pouco sobre os chunks desse arquivo que compilamos

Slide 20

Slide 20 text

Minha experiência com essa aventura toda - Mesmo sem tanta documentação ao redor dos detalhes da BEAM e ERTS, é relativamente acessível de entender e construir algo em volta - Pessoas que criam linguagens de programação são realmente incríveis - Debug de byte no elixir?.....Tricky - No geral? Foi muito divertido aprender mais sobre o ecossistema!

Slide 21

Slide 21 text

Referências para quem quiser se aventurar - The Beam Book: https://blog.stenmans.org/theBeamBook - [Tsoding] I made a new programming language: https:// www.youtube.com/watch?v=6k_sR6yCvps - [Mariano Guerra & Robert Virding] - Implementing Languages on the BEAM: https://www.youtube.com/watch?v=0MTiqI9v-ck

Slide 22

Slide 22 text

OBRIGADA!