enum do TS (usando a keyword enum) é basicamente a mesma coisa de Java, C#, etc: uma lista de valores (geralmente escalares) do mesmo domínio/tipo
Union é outra coisa. Em TS você tem isso usando o `|`
enum do TS (usando a keyword enum) é basicamente a mesma coisa de Java, C#, etc: uma lista de valores (geralmente escalares) do mesmo domínio/tipo
Union é outra coisa. Em TS você tem isso usando o `|`
Nao
Programa em Rust q vc descobre; ou em alguma outra lang com sum types
TS tb dá pra ter isso com discriminated unions, mas imo é um pouco mais convoluto no caso simples pq na maioria dos casos vc precisa explicitamente definir a tag
IMHO o money do PG nao é muito aconselhável porque só suporta um locale (configurado ao nível do database inteiro!)
Numeric (aka decimal) já traz toda a precisão necessária e a flexibilidade
Aí não é fã o suficiente
Provinha de FTC na segunda né
Jeff dando aulas
Yeah, por ora eu só tô usando pra gerenciar uma infinidade de PDFs e ler alguns deles… Tô aprendendo conforme vou usando
Zotero é muito bom pra ler PDF também, dá até pra adicionar tags em highlights
já tem bastante coisa, mas nao esquece de isolation levels :P
Rings of Power tem todos os seus problemas etc etc, mas a cena de introdução do Tom Bombadil foi tão boa :v
Eu tive que apagar o aplicativo do twitter por causa disso
Isso garante a tal da serialização, assim como o lock :)
E o canal de mensagens consegue fazer isso justamente porque é implementado de modo a ser capaz de receber várias mensagens de vários atores ao mesmo tempo, *mas* só fornece *uma mensagem por vez* para o ator que consome seus elementos (afinal, o recurso só está na posse de um "ator").
A resposta é: fazendo a operação usando algum tipo de mensagem. O ator "dono" do recurso (a memória, por ex) fica continuamente processando essas mensagens e agindo de acordo com o que deve fazer.
Nesse caso o "elemento de sincronia" (que antes era o mutex) passa a ser o próprio canal de mensagens!
A outra abordagem, message passing, elimina a necessidade de sincronização com locking porque garante que uma região de memória *sempre* irá pertencer a um "ator"/"processo" por vez.
Mas aí você se pergunta: como outros processos vão usar aquele recurso (que eles precisam, afinal).
Um mutex, por exemplo, sincroniza os dados de modo a garantir que em um momento possa existir apenas um leitor/escritos mexendo na região compartilhada.
Shared memory é quando os processos concorrentes podem ler e escrever em uma mesma região de memória. Naturalmente, se você fizer isso de forma "descontrolada" (sem sincronização), você terá problemas graves, como data races. Na maior parte dos casos, dá pra sincronizar o acesso usando lock.
Vou reduzir o escopo para simplificar. Em um mesmo computador, existem duas "grandes" abordagens para se estruturar código concorrente dentro de um mesmo processo. Shared memory e message passing.
O problema de ter um único recurso que precisa ser compartilhado por mais de um processo de forma concorrente é bem comum--seja em um mesmo computador (paralelismo via multi-threading, por ex.) ou, como no exemplo do @zanfranceschi.bsky.social, em um sistema distribuído (vários nós).
Famigerada serialização por fila!!
Em um projetinho de Rust que participei há um tempo a gente (ab)usou bastante de message-passing pra não precisar de shared memory sincronizado com lock :)
Feedback-loop muito longo? Ou outra coisa?
Muuuuuuuito bom mesmo!! (embora o autor seja intragável no twitter)
oq vc faria?
A semântica é a mesma inclusive por fora do iex. Lembrando que em Elixir quase tudo é expressão, então quase tudo retorna um valor mesmo.
O ponto é que, em posição de pattern, um identificador sempre vai aceitar tudo. Por isso você precisa "dizer" para a linguagem que não quer usar um pattern-identificador, mas sim usar o *conteúdo* da variável como discriminante. O ^ faz isso.
No primeiro braço, você usa o pattern `^pie` (repare o carret antes, que faz com que o matcher "siga" a variável para usar o seu valor para fazer o pattern matching), que é a mesma coisa que `3.14`.
Obviamente a string "cherry pie" não dá match com `3.14`, então só resta o último braço.
Eu fico é feliz por ser forçado a abandonar aquele site.