Est-il possible d'implémenter, par exemple, un verrouillage avec des types uniques?
J'ai suivi le lien fourni par Robert Harvey et j'ai fait une lecture rapide. Je ne peux pas dire que j'ai tout compris ou que j'ai un niveau élevé de confiance que j'ai vraiment compris ce que je pense avoir compris, mais il me semble que tout le point de l'unicité externe et de l'immuabilité de référence est de ne pas avoir besoin de verrouillage.
Les approches modernes du multithreading essaient d'éviter le verrouillage car seuls des programmeurs hautement expérimentés peuvent écrire du code qui utilise le verrouillage, et même leur code est très sujet aux bogues. Si vous ajoutez en plus le fait que le code de verrouillage est pratiquement non testable, il devrait être évident que c'est une façon hautement indésirable de faire les choses, et toute solution visant à nous libérer du verrouillage promet de dire le moins.
La façon dont nous avons évité le verrouillage consiste à transmettre des messages, ce qui nécessite que les messages soient immuables. En gros, (à première vue), l'immuabilité de référence semble être une technique qui peut nous aider à garantir l'immuabilité sans avoir à construire réellement des types immuables, et l'unicité externe semble être une technique qui peut nous aider à assouplir localement l'exigence stricte d'immuabilité.
Les types d'unicité peuvent-ils être utilisés pour partager des données mutables entre les threads?
Le document ne l'a pas clairement énoncé, mais d'après ce que je comprends, un cluster d'objets extérieurement unique est sûr pour les threads parce qu'en quelque sorte (vraiment, comment? ), Il est garanti qu'il n'existe qu'une seule référence extérieure dans ce cluster d'objets, ce qui signifie que un thread recevant une telle référence peut traiter les objets référencés comme mutables sans avoir à se soucier qu'un autre thread puisse également les muter, car aucun autre thread ne peut possiblement avoir une autre référence. Je serais curieux de savoir comment une telle construction théorique peut être mise en œuvre et appliquée.
Est-il possible d'utiliser des types uniques pour créer des primitives de synchronisation (comme les mutex), ou le passage de messages est-il nécessaire?
Encore une fois, d'après ce que je comprends, les types externes uniques et l'immuabilité de référence sont censés rendre inutiles les verrous, les mutex et autres. La transmission des messages semble être la voie à suivre, et c'est bien.