IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Unison : un langage de programmation qui propose une nouvelle approche de la programmation distribuée,
Il est statiquement typé et purement fonctionnel

Le , par Bill Fassinou

29PARTAGES

11  0 
Unison est un langage de programmation expérimental de type Haskell qui promet la possibilité de décrire des systèmes distribués entiers avec un seul programme. Il est présenté par ses créateurs comme "un langage de programmation convivial venu du futur". Unison est un langage de programmation moderne, statiquement typé, et purement fonctionnel. Il est open source et a été fondé sur la notion fondamentale que le code est immuable et identifié par son contenu. Le langage est actuellement en version alpha publique et le code source est disponible sur GitHub.

Unison est conçu pour offrir un support spécial pour la construction de systèmes distribués. Il est motivé par l'idée que la technologie de création de logiciels doit être conçue de manière réfléchie dans tous ses aspects. Les complexités doivent être supprimées. Paul Chiusano, l'un des principaux développeurs du langage, a déclaré qu'Unison était un projet de recherche dans le cadre duquel ils étaient prêts à repenser le fonctionnement de la programmation. Encore au stade expérimental, Unison est un langage de programmation fonctionnelle typée statiquement, similaire à Haskell, qui offre les possibilités suivantes :

  • la possibilité de décrire des systèmes distribués ;
  • gestion simplifiée de la base de code : Unison utilise une base de données de définitions qui conserve le hash de l'arbre syntaxique au lieu de la source réelle ;
  • mise en cache des résultats des tests ;
  • élimination les conflits de dépendances
  • typage persistant et stockage simple ;
  • renommage trivial.




Les définitions dans Unison sont identifiées par leur contenu, chaque définition constituant un arbre syntaxique. En hachant l'arbre d'une manière qui incorpore les hashs des dépendances de la définition, le hash d'Unison identifie de manière unique cette définition. Selon l'équipe de développement d'Unison, cette fonctionnalité est destinée à servir de base à de sérieuses améliorations de l'expérience de programmation, en éliminant les constructions et la plupart des conflits de dépendances et en permettant un déploiement facile du code et un stockage durable typé.

Pour la refactorisation, Unison offre un processus structuré dans lequel une nouvelle version compilable du code est construite de manière incrémentielle sur le côté, offrant des avantages tels qu'une base de code qui est toujours exécutable et jamais cassée, éliminant le besoin de mettre à jour une base de code entière. La fonction Remote.Transfer du langage fournit un "effet à distance" qui facilite le calcul sur plusieurs nœuds Unison. Le transfert dynamique de calculs arbitraires est possible, car les définitions dans Unison sont identifiées par un hachage cryptographique de leur contenu.

Lorsque les calculs sont transférés, le nœud destinataire vérifie si le contenu fait référence à des hashs inconnus. Les hashs inconnus sont synchronisés avec le destinataire avant que le transfert ne soit terminé et que le calcul ne se poursuive. « Cette hypothèse de départ offre des avantages surprenants : elle simplifie la programmation distribuée, élimine les constructions et les conflits de dépendances, prend en charge le stockage durable typé, les refactorisations structurées, permet de meilleurs outils pour travailler avec le code, et bien plus encore », a écrit l'équipe dans un billet de blogue.

Voici un exemple d'implémentation distribuée de MapReduce :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
-- comments start with `--`
mapReduce loc fn ifEmpty reduce data = match split data with
  Empty          -> ifEmpty
  One a          -> fn a
  Two left right ->
    fl = forkAt loc '(mapReduce loc fn ifEmpty reduce !left)
    fr = forkAt loc '(mapReduce loc fn ifEmpty reduce !right)
    reduce (await fl) (await fr)

Cette fonction peut être soit simulée localement (éventuellement avec des fautes injectées à des fins de test), soit exécutée sur un pool de calcul distribué. Bien que certains semblent enthousiasmés par l'approche proposée par Unison, elle fait néanmoins l'objet de quelques critiques. Certains critiquent la façon dont le projet est mené. « Je pense qu'ils font une erreur fréquente dans ce genre de projet : "essayer trop de nouvelles choses à la fois". Ils ont déjà une façon très innovante de gérer le code source, avec une base de données de définitions qui conserve le hash de l'arbre syntaxique au lieu de la source réelle », commente un critique.



« C'est une idée très intéressante qui résout de nombreux problèmes. La meilleure chose aurait été de développer cette idée suffisamment bien pour qu'elle fonctionne avec des outils de contrôle de source, des EDI et qu'elle puisse être déployée facilement et sans douleur sur l'infrastructure existante. Mais ils ont décidé de résoudre aussi l'informatique distribuée, un espace vraiment complexe. En outre, ils semblent se concentrer sur cela maintenant au lieu des idées "originales". Il me semble qu'il y a un énorme problème de dérapage à moins qu'ils aient pivoté vers l'informatique distribuée parce que les idées originales n'étaient pas assez attrayantes ».

En réponse, un développeur d'Unison a déclaré que ce n'était pas le cas. Un autre commentaire a suggéré que la gestion du code et le calcul distribué ne sont pas si éloignés : « les deux domaines de la gestion du code source et du calcul distribué ne sont pas aussi disjoints dans le contexte d'Unison. Ils découlent du principe sous-jacent d'adresser les fonctions non pas par leur nom, mais par un hash de leur arbre syntaxique normalisé. Il y a un tas d'implications pour le calcul distribué, à savoir que vous pouvez facilement distribuer des parties fines de votre application sur des serveurs et que vous pouvez mettre en cache le résultat de calculs coûteux ».

Un troisième a ajouté : « je pense que le problème de l'informatique distribuée est assez lié une fois que vous avez un code source "adressable par le contenu". Je suis d'accord pour dire que c'est beaucoup de travail, mais j'espère que ça va marcher ». Bien que Chiusano vante les avantages d'Unison, le débat semble se concentrer sur la relation réelle entre l'adressage du code source par le contenu et l'informatique distribuée. En outre, selon ceux qui pensent que cette relation n'existe pas, il n'est pas nécessaire de créer un nouveau langage pour avoir une distribution de code source "adressable par le contenu".

Conclusion

Unison est un pari intéressant qui teste de nouveaux concepts. Toutefois, il est difficile de dire s'il aura un grand avenir ou non. Mais l'idée des développeurs d'Unison est d'aider à repenser la façon dont nous abordons certains aspects du développement logiciel avec les langages de programmation. Pour beaucoup, il ne s'agit pas seulement d'une nouvelle syntaxe, mais plutôt d'un effort plus ambitieux.

Sources : Unison, Référentiel GitHub d'Unison

Et vous ?

Que pensez-vous du langage de programmation Unison ?
Que pensez-vous de l'approche proposée par Unison en matière de programmation distribuée ?
Selon vous, existe-t-il une relation réelle entre l'adressage du code source par le contenu et l'informatique distribuée ?

Voir aussi

La version 5.0 de Celery, le framework de programmation distribuée en Python, est disponible avec une nouvelle implémentation CLI, qui n'est pas complètement rétrocompatible

Jolie, un langage de programmation orienté services, il permet d'agréger directement les API de services dans un serveur Web

YDB, une base de données SQL distribuée et open source, sous licence Apache 2.0, elle fonctionne sur des plateformes x86 64 bits avec un minimum de 8 Go de RAM

Java, Python, Kotlin et Rust connaissent une croissance rapide, mais JavaScript reste le langage de programmation le plus populaire, selon une enquête de SlashData

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Pyramidev
Expert éminent https://www.developpez.com
Le 19/11/2022 à 16:54
Citation Envoyé par moldavi Voir le message
Cela ressemble de loin à du javascript (await, reduce)
MDR. Unison est un langage de programmation fonctionnelle statiquement typé. Il ne ressemble pas du tout à JavaScript. S'il suffit qu'un langage possède await et reduce pour ressembler de loin à JavaScript, alors le C++ aussi ressemble de loin à JavaScript, puisqu'il possède co_await et std::reduce.

Citation Envoyé par HaryRoseAndMac Voir le message
Au lieu de perdre du temps à vouloir en créer un nouveau pour combler un besoin de briller aux yeux du monde, ces ingénieurs auraient mieux fait d'améliorer les existants.
Je pense, au contraire, qu'il est important de créer de nouveaux langages quand ceux-ci permettent d'explorer des idées peu connues.

Si on prend l'exemple de Haskell, il n'est presque pas utilisé en entreprise, mais il a été une source très importante d'inspiration pour d'autres langages, y compris Rust qui s'est fait une place qui va grandir petit à petit. En effet, les traits de Rust sont inspirés des typeclasses de Haskell.

Je ne sais pas si la manière qu'a Unison de gérer l'arbre syntaxique inspirera de nouveaux outils ou de nouveaux langages. Mais c'est bien qu'il y ait des gens qui explorent cette piste.
14  2 
Avatar de fred!
Futur Membre du Club https://www.developpez.com
Le 28/11/2022 à 9:38
Pour info Il existe déjà un projet unison qui n'a à priori rien à voir.

C'est un outil de synchronisation dossier/fichier local/distant "type rsync" assez efficace

https://github.com/bcpierce00/unison
1  0 
Avatar de ratapenaille
Candidat au Club https://www.developpez.com
Le 01/02/2024 à 12:12
Ou la la la, j'ai 75 ans donc plus au charbon depuis longtemps,
Mais qd je vois ces réponses à propos des langages fonctionnels !!!! quelle misere, vous n'avez donc jamais entendu parlé d'Erlang et autres dérivés ????
Erlang par exemple n'est pas un langage industriel ???? Il ne se fait jamais rien en fonctionnel concurent et distribué ????
Pensez à votre cerveau s'il travailllait en mono-thread
Essayez donc de faire des applis aussi performantes, disponibles et sures avec les langages a la mode tels Javascript, Python, etc etc (je reconnais qd meme l'utilité de ces langages)
Au plaisir travaillez bien
1  0 
Avatar de HaryRoseAndMac
Membre extrêmement actif https://www.developpez.com
Le 20/11/2022 à 10:47
Citation Envoyé par Pyramidev Voir le message

Je pense, au contraire, qu'il est important de créer de nouveaux langages quand ceux-ci permettent d'explorer des idées peu connues.

Si on prend l'exemple de Haskell, il n'est presque pas utilisé en entreprise, mais il a été une source très importante d'inspiration pour d'autres langages, y compris Rust qui s'est fait une place qui va grandir petit à petit. En effet, les traits de Rust sont inspirés des typeclasses de Haskell.

Je ne sais pas si la manière qu'a Unison de gérer l'arbre syntaxique inspirera de nouveaux outils ou de nouveaux langages. Mais c'est bien qu'il y ait des gens qui explorent cette piste.
Pas besoin de créer tout un langage pour ça,
de la même manière que les revues scientifiques, les équivalents existent dans le monde du logiciel, il aurait suffit de poster ces idées si je suis ta logique.
3  5 
Avatar de moldavi
Inactif https://www.developpez.com
Le 22/11/2022 à 2:12
Bonjour.

Citation Envoyé par Pyramidev Voir le message
MDR. Unison est un langage de programmation fonctionnelle statiquement typé.
Au moins un bon point, c'est un langage typé. Par contre les langages de programmation fonctionnelle, personne n'y croit, hormis les universitaires.

Citation Envoyé par Pyramidev Voir le message

Il ne ressemble pas du tout à JavaScript. S'il suffit qu'un langage possède await et reduce pour ressembler de loin à JavaScript, alors le C++ aussi ressemble de loin à JavaScript, puisqu'il possède co_await et std::reduce.
Le langage C++ existe depuis les années 1980, et le javascript depuis 1995. Le C++ ne peut donc pas ressembler à des langages qui ont été créés après.

Citation Envoyé par Pyramidev Voir le message

Je pense, au contraire, qu'il est important de créer de nouveaux langages quand ceux-ci permettent d'explorer des idées peu connues.

Si on prend l'exemple de Haskell, il n'est presque pas utilisé en entreprise, mais il a été une source très importante d'inspiration pour d'autres langages, y compris Rust qui s'est fait une place qui va grandir petit à petit. En effet, les traits de Rust sont inspirés des typeclasses de Haskell.

Je ne sais pas si la manière qu'a Unison de gérer l'arbre syntaxique inspirera de nouveaux outils ou de nouveaux langages. Mais c'est bien qu'il y ait des gens qui explorent cette piste.

HaryRoseAndMac a raison, pas besoin de créer de nouveaux langages. Les bouffons qui créaient un nouveau langage, ne sont en général pas capables d'améliorer un langage existant.

Il faut quand même dire que javascript et nodejs, c'est du monothread, donc de la bouse intégrale. Unison c'est pareil ?
1  5 
Avatar de HaryRoseAndMac
Membre extrêmement actif https://www.developpez.com
Le 19/11/2022 à 2:06
Et hop,
encore un langage qui va finir à la poubelle ...

Il y en a déjà bien assez comme ça, chacun étant lié à une spécificité et des problématiques de performances.
Au lieu de perdre du temps à vouloir en créer un nouveau pour combler un besoin de briller aux yeux du monde, ces ingénieurs auraient mieux fait d'améliorer les existants.
6  11 
Avatar de moldavi
Inactif https://www.developpez.com
Le 19/11/2022 à 1:03
Bonjour.

Çà à l'air nul à chier comme langage. Cela ressemble de loin à du javascript (await, reduce), un autre langage qui est aussi nul à chier.
5  11