THE TWEETS ARE PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITN

Joined January 2019
Não tenho nada contra EAVs. Funcionam muito bem em Rust, por exemplo—mas isso porque o ecossistema já nasceu fazendo isso. O ecossistema de JS, por outro lado, é quase todo construído por cima de exceptions*, então de fato fica estranho jogar EAVs no meio. *e gambarras
Mesmo com esse overhead, acho que é razoável assumir que a maioria dos sistemas rodando em Node e afins não vão sofrer muito disso (IO bound e tal). Inclusive se exceptions fossem checked, provavelmente não ia haver essa pira de error as value em JS.
Sobre exceptions (EX) vs. error as values (EAV). Acho que recentemente EAVs têm ganhado mais adoção por ter melhor "type-safety" na IDE. Isso é realmente muito bom. Exceptions de fato têm um overhead maior (um tema comum em linguagens de programação). <...>
No V8 moderno, muitas dessas questões não são mais preocupações reais. No caso de usar error as value ainda mais. Há momentos que faz sentido usar como erros esperados de fluxo, validações e etc. Agora imagine uma query que busque por um item que não existe, ou melhor, que o usuário não tenha permissão de acessar, deveria ser uma exception com status code adequado. Seu sistema não perderá performance por conta disso. No final, “deveria” não é regra absoluta. No desenvolvimento, tudo precisa ser levado em consideração. Desde as necessidades do sistema até preferências e crenças dos desenvolvedores, que no final, moldam as regras. Via de regra, não pense excessivamente em performance prematuramente.
1
1
Replying to @joseph_h_garvin
Yes. The only option is writing these wrappers by hand these days: a typed interface over a type erased representation. This is, IMO, what makes TypeScript so “scalable”. Making a system with lots and lots of serde structs creates so much slow-to-compile code that runs cold.
1
2
Inclusive uma pergunta interessante que dá para tirar disso é por que, de modo geral, linguagens de programação podem se dar ao luxo de usarem runtimes cooperativos, mas sistemas operacionais (a não ser alguns muito nichados) *precisam* ser preemptivos?
1
1
4
Ótimo post sobre esse assunto, btw: os.phil-opp.com/async-await/
1
1
4
Por isso que em Go, mesmo sem await ou callbacks, as suas várias gorrotinas conseguem fazer progresso mutuamente. Ou os diversos processos do sistema, que podem estar com while (true), não vão te impedir de usar o resto do computador.
1
3
Por outro lado, em multitasking preemptivo (como o próprio sistema operacional, o runtime de Golang, etc), você não precisa se preocupar tanto com isso. Um ator "egoísta" que não cede o controle para os demais vai sempre ser periodicamente interrompido pelo scheduler.
1
1
3
Essa cessão muitas vezes é feita com um await, um callback, etc. Quando você tem um loop infinito (ou qualquer outra operação "bloqueante", o seu "ator" não irá ceder o controle para nenhum outro, o que pode interromper as outras partes do sistema de progredirem.
1
3
O negócio é entender a diferença entre cooperative multitasking e preemptive multitasking. No primeiro, os diversos "atores" precisam cooperar entre si. Isso significa ser um bom cidadão e não tomar todo o "tempo de CPU" para si—periodicamente, você precisa "ceder" o controle.
Há um tempo eu fiz um post mostrando que sua operação sincrona ia travar tua API Node. Esse é um post mais DEEP sobre esse tema. Sobre o termo "EventLoop Travar": O V8 executa os frames de funções referenciadas na CallStack. Enquanto houver pelo menos um frame ativo na CallStack, o V8 vai estar torando código síncrono e o EventLoop vai ficar afk. Ele só move essas callback pra CallStack quando a mesma está vazia. Dependendo da função assíncrona que lida com essa callback ela pode ir pra uma fila diferente: ex: setTimeout callback → Macrotask Promise callback → Microtask Existe uma prioridade entre essas filas: Microtasks tem prioridade total sobre Macrotasks. O Event Loop sempre processa TODAS as Microtasks disponiveis antes de pegar uma unica Macrotask. ex: Promises executam antes de setTimeout(fn, 0). Mas quando essas callbacks vão pra MicrotaskQueue? No caso das Promises, quando o status muda de pending pra resolved/rejected. Aí tudo que está dentro do seu .then(callback) ou abaixo do seu await (callbacks via sugar syntax) vai direto pra Microtask Queue. Enfim: Enquanto o V8 está torando a CallStack processando seu código síncrono JIT (Just in Time) a callback do seu .then nunca vai ser executada. Ou aquele codigo que vem abaixo do seu await. E por tal motivo sua API vai parar de responder geral e seu sistema continuará bronze V.
1
3
6
when you finish Designing Data Intensive Applicatios only to remember your actual job for the foreseeable future is still gonna be maintaining a PHP monolith from 2009.
Inegável
Os comentários achando q é RJ ou outo lugar Meus amigos, BH é a melhor e mais bela cidade do mundo, aceitem
2
Alguém me indica no lobsters por favor
E o elevador, que é pivotal para isso ser possível, quase nunca é recordado
Ten thousand people working on just 1.8 acres of land. The modern skyscraper is a technological and organizational miracle.
mongo db is web scale
1
1
mudei o tema do tcc pela 92981239128a vezkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
2
2
mais uma coisa pra infinita lista de side quests a fazer
With macOS Tahoe released today, it's time learn Metal 4 and upgrade my toy game engine
3
More broadly, I don't think a single definition of 'durable' (as in ACID D) for transactions is particularly useful. Much more useful is to ask "what kinds of failures could cause committed transactions to be lost?"
A transaction is not durable if it survives application crash but not OS crash. A committed transaction is either durable or not!