Para aprender o que é um processo em Elixir, antes você tem que saber o que é uma função.
Por exemplo, IO.puts/1 é uma função que escreve algo na tela. A função se chama puts, ela está no módulo IO (de entrada I e saída O) e ela recebe um argumento:
iex(1)> IO.puts("Adolfo")
Adolfo
:ok
Se tudo dá certo ela retorna o átomo :ok.
Uma função que te permite gerar (tradução talvez imprecisa de spawn, em inglês) é Kernel.spawn/1.
Novamente, o nome dela é spawn, ela faz parte do módulo Kernel e recebe um argumento.
Eu consigo fazer
Kernel.spawn(IO.puts("Adolfo"))
?
Não!
Vamos começar simplificando: toda função que faz parte do módulo Kernel não precisa do nome do módulo antes.
Basta chamar
spawn(IO.puts("Adolfo"))
Vai continuar errado mas com menos letras.
O que Kernel.spawn/1 recebe é uma função de aridade 0, ou seja, que não recebe nenhum argumento.
Como fazemos isso?
Assim:
fn -> 1 end
A função acima não tem nome (anônima) e retorna 1.
Mas veja na imagem que se você dá um spawn nela, nada de interessante acontece:
Em primeiro lugar, veja que
fn -> 1 end
retornou uma espécie de "código" que identifica a função:
E
spawn(fn -> 1 end)
retornou um PID, um Process Identifier, um identificador de processo: #PID<0.120.0>
Eu posso atribuir este PID a uma variável:
iex(1)> pid = spawn(fn -> 1 end) #PID<0.110.0>
E depois perguntar se o processo que foi gerado está vivo:
iex(2)> Process.alive?(pid)
false
Não está pois era uma função muito rápida, que só retornava 1.
Eu posso, por exemplo, fazer o processo "dormir" por 10 segundos antes de retornar o 1.
iex(3)> pid = spawn(fn -> Process.sleep(10000); 1 end) #PID<0.113.0>
Se rapidamente eu pergunto se o processo, cujo identificador está na variável pid, está vivo, a resposta é sim.
iex(4)> Process.alive?(pid)
true
Mas se pergunto novamente depois de 10 segundos, a resposta será não.
iex(5)> Process.alive?(pid)
false
Seu eu fizer isto aqui
iex(6)> pid = spawn(fn -> Process.sleep(10000); IO.puts("Adolfo") end) #PID<0.117.0>
Adolfo
vai demorar 1 segundos para "Adolfo" ser escrito na tela.
Já se eu fizer isto, será imediato para "Adolfo" aparecer na tela.
Elixir é bem ameaçador mesmo...
"Esta conta foi encerrada devido a violações recorrentes ou graves da política do YouTube que proíbe conteúdo criado para assediar, intimidar ou ameaçar." youtube.com/c/AdolfoNeto
Vou deixar aqui o texto do email que o @YouTubeBrasil me mandou após eu publicar um vídeo sobre o Kernel.then/2 do Elixir:
"Revisamos seu conteúdo e encontramos violações graves ou recorrentes das nossas diretrizes da comunidade. Por isso, removemos seu canal do YouTube.
(...)"
Vou assistir agora a palestra do @DNAutics na ElixirConf 2021: Zig ama Elixir.
Pra começar, nem sei direito o que é Zig.
Mas gostei de saber que a formação do Isaas é em bioquímica.