Que cor é sua função?
Você pode estar interessado em de Bob Nystrom Qual é a sua função 1 .
Neste artigo, ele descreve uma linguagem fictícia onde:
- Cada função tem uma cor: azul ou vermelho.
- Uma função vermelha pode chamar funções azuis ou vermelhas, sem problemas.
- Uma função azul só pode chamar funções azuis.
Embora fictício, isso acontece com bastante regularidade nas linguagens de programação:
- Em C ++, um método "const" só pode chamar outros métodos "const" em
this
. - No Haskell, uma função não-IO só pode chamar funções não-IO.
- Em C #, uma função de sincronização só pode chamar funções de sincronização 2 .
Como você percebeu, por causa dessas regras, as funções vermelhas tendem a espalhar ao redor da base de código. Você insere um, e pouco a pouco coloniza toda a base de código.
1 Bob Nystrom, além de blogar, também faz parte da equipe de Dart e escreveu esta pequena série Crafting Interpreters; altamente recomendado para qualquer aficionado por linguagem de programação / compilador.
2 Não é bem verdade, pois você pode chamar uma função assíncrona e bloquear até que ela retorne, mas ...
Limitação de idioma
Esta é, essencialmente, uma limitação de idioma / tempo de execução.
Linguagem com encadeamento M: N, por exemplo, como Erlang e Go, não tem async
funções: cada função é potencialmente assíncrona e sua "fibra" será simplesmente suspensa, trocada e trocada novamente quando está pronto de novo.
O C # foi com um modelo de segmentação 1: 1 e, portanto, decidiu exibir a sincronicidade na linguagem para evitar o bloqueio acidental de threads.
Na presença de limitações de linguagem, as diretrizes de codificação precisam ser adaptadas.