Cela fait un moment que j'observe la visibilité croissante des langages de programmation fonctionnelle et de leurs fonctionnalités. Je les ai examinés et je n'ai pas vu la raison de cet attrait.
Puis, récemment, j'ai assisté à la présentation de Kevin Smith sur les "Bases d'Erlang" à l'occasion de la conférence de la Commission européenne. Codemash .
J'ai apprécié la présentation et j'ai appris que de nombreux attributs de la programmation fonctionnelle permettent d'éviter beaucoup plus facilement les problèmes de threading/concurrence. Je comprends que l'absence d'état et de mutabilité rend impossible la modification des mêmes données par plusieurs threads, mais Kevin a dit (si j'ai bien compris) que toute la communication se fait par le biais de messages et que les messages sont traités de manière synchrone (ce qui évite à nouveau les problèmes de concurrence).
Mais j'ai lu qu'Erlang est utilisé dans des applications hautement évolutives (la raison pour laquelle Ericsson l'a créé en premier lieu). Comment peut-il être efficace de traiter des milliers de demandes par seconde si tout est traité comme un message synchrone ? N'est-ce pas la raison pour laquelle nous avons commencé à évoluer vers le traitement asynchrone, afin de pouvoir tirer parti de l'exécution de plusieurs fils d'opérations en même temps et d'atteindre l'évolutivité ? Il semble que cette architecture, bien que plus sûre, constitue un pas en arrière en termes d'évolutivité. Qu'est-ce qui m'échappe ?
Je comprends que les créateurs d'Erlang aient intentionnellement évité de prendre en charge le threading pour éviter les problèmes de concurrence, mais je pensais que le multi-threading était nécessaire pour atteindre l'évolutivité.
Comment les langages de programmation fonctionnels peuvent-ils être intrinsèquement sûrs pour les threads, tout en restant évolutifs ?
1 votes
[Non mentionné] : La VM d'Erlangs porte l'asynchronisme à un autre niveau. Par magie vaudou (asm), elle permet aux opérations de synchronisation comme socket:read de se bloquer sans arrêter un thread OS. Cela vous permet d'écrire du code synchrone alors que d'autres langages vous forceraient à utiliser des nids de callback asynchrones. Il est beaucoup plus facile d'écrire une application évolutive en ayant à l'esprit des micro-services à fil unique plutôt que de garder la vue d'ensemble à l'esprit chaque fois que vous ajoutez quelque chose à la base de code.
0 votes
@Vans S Intéressant.