É possível implementar, por exemplo, bloqueio com tipos exclusivos?
Segui o link fornecido por Robert Harvey e fiz uma rápida leitura. Não posso dizer que entendi tudo ou que tenho um alto nível de confiança de que realmente entendi o que acho que entendi, mas parece-me que todo o ponto da singularidade externa e da imutabilidade de referência é que não há necessidade de bloqueio.
As abordagens modernas do multithreading tentam evitar o bloqueio, porque somente programadores altamente experientes podem escrever código que usa o bloqueio, e mesmo o código deles é altamente propenso a ter bugs. Se você acrescenta ainda que o fato de o código de bloqueio ser praticamente impossível de ser testado, deve ser óbvio que é uma maneira altamente indesejável de fazer as coisas, e qualquer solução com o objetivo de nos libertar do bloqueio é promissora, no mínimo.
A maneira como evitamos o bloqueio é com a passagem de mensagens, o que exige que as mensagens sejam imutáveis. Grosso modo, (à primeira vista), a imutabilidade de referência parece ser uma técnica que pode nos ajudar a garantir a imutabilidade sem ter que realmente construir tipos imutáveis, e a exclusividade externa parece ser uma técnica que pode nos ajudar a relaxar localmente o estrito requisito de imutabilidade.
Tipos de exclusividade podem ser usados para compartilhar dados mutáveis entre threads?
O artigo não afirmou claramente, mas, pelo que entendi, um cluster de objetos externo único é seguro para threads porque, de alguma forma (realmente, como? ), É garantido que exista apenas uma referência externa nesse cluster de objetos, o que significa que um encadeamento que recebe tal referência pode tratar os objetos referenciados como mutáveis sem ter que se preocupar que outro encadeamento também possa modificá-los, porque nenhum outro encadeamento pode ter outra referência. Gostaria de saber como essa construção teórica pode ser implementada e aplicada.
É possível usar tipos exclusivos para criar primitivas de sincronização (como mutexes) ou é necessária a passagem de mensagens?
Novamente, pelo que entendi, tipos externamente exclusivos e imutabilidade de referência têm como objetivo tornar desnecessários bloqueios, mutexes e similares. A passagem de mensagens parece ser o caminho a seguir, e isso é bom.