8 points par GN⁺ 2024-03-07 | 1 commentaires | Partager sur WhatsApp
  • Dada est une expérience de pensée visant à créer un langage comme Rust, mais avec une sensation proche de Java ou JavaScript, et moins complexe que C++
  • À quoi ressemblerait un langage qui ne vise ni les kernels ni les petits appareils embarqués, mais qui exige tout de même un runtime minimal ?
  • Dada est un langage fondé sur la propriété, avec plusieurs similarités avec Rust :
    • Comme Rust, Dada n’a pas besoin de garbage collector.
    • Comme Rust, Dada garantit la sûreté mémoire et l’absence de data races.
    • Comme Rust, les structures de données de Dada sont allouées sur la pile et utilisent une disposition mémoire plate.
  • Mais Dada s’en distingue aussi sur de nombreux points :
    • Comme TypeScript, Dada est un langage à typage progressif :
      • Il est possible d’utiliser Dada dans un interpréteur sans annotations de type pour comprendre le fonctionnement du langage.
      • Une fois familiarisé, on peut ajouter des annotations de type et utiliser un compilateur offrant des performances proches de Rust.
    • Dada cible principalement WebAssembly :
      • Il est possible de compiler Dada vers des cibles natives, mais son système FFI repose sur les types d’interface WebAssembly.
    • Dada est orienté objet, mais pas de manière pure :
      • Dada combine l’OO avec de bonnes fonctionnalités comme le pattern matching, en s’inspirant de langages comme Scala.
  • Par rapport à Rust, Dada a aussi certaines limitations :
    • Dada impose un runtime obligatoire et ne cible ni les « bare metal systems » ni les kernels.
    • Dada ne prend pas en charge l’assembleur inline ni le code unsafe arbitraire.

Quel est l’état actuel de Dada ?

  • À l’heure actuelle, Dada n’existe pas réellement, mais il existe quelques prototypes expérimentaux :
    • Une sémantique opérationnelle expérimentale implémentée dans PLT Redex est disponible dans dada-lang/dada-model.
    • Un interpréteur écrit en Rust peut être trouvé dans le dépôt dada-lang/dada, et il est possible d’essayer une build basée sur WebAssembly dans le playground Dada.

L’avis de GN⁺

  • Dada reflète les tendances des langages de programmation modernes : il cherche à conserver les fonctions clés de Rust, comme la sûreté mémoire et la prévention des data races, tout en visant un langage plus accueillant pour les développeurs grâce au typage progressif et à une approche orientée objet.
  • Le fait de cibler principalement WebAssembly montre le potentiel de Dada pour le développement d’applications web, en phase avec les tendances actuelles qui privilégient la compatibilité navigateur et l’indépendance vis-à-vis des plateformes.
  • Si Dada était réellement développé et largement adopté, il pourrait offrir aux développeurs Rust un niveau d’abstraction et de confort plus élevé, tout en facilitant pour les développeurs Java ou JavaScript la transition vers un langage de programmation système.
  • Cependant, Dada en est encore à un stade précoce, et ses performances comme sa stabilité en environnement de production n’ont pas été validées ; entreprises et développeurs devront donc faire preuve de prudence avant de l’adopter.
  • Parmi les autres langages poursuivant des objectifs similaires, on peut citer Kotlin ou Swift, déjà largement utilisés et pouvant constituer de bonnes alternatives pour les développeurs.

1 commentaires

 
GN⁺ 2024-03-07
Avis Hacker News
  • Attachement à l’idée d’un « langage d’expérience de pensée »

    • Créer un vrai langage représente une lourde charge, et imaginer à quoi ressemblerait un langage idéal est amusant.
    • Il existe toutes sortes d’idées autour d’un « Rust de plus haut niveau » ; personnellement, une runtime dynamique et des types simples me plaisent, mais d’autres ont des besoins différents.
    • Des fonctionnalités supplémentaires comme un système de typage progressif conviennent à certains langages, mais je préfère dès le départ les garanties d’une base de code entièrement à typage statique.
  • Interrogations sur l’exemple « Hello, Dada! »

    • En tant qu’utilisateur de Python, je me demande pourquoi il faudrait se soucier de await quand l’objectif est simplement d’afficher quelque chose dans la console.
    • On a déjà l’impression que la complexité et la charge cognitive commencent à s’installer.
  • Souhait pour un langage à l’opposé

    • Je voudrais un langage avec le système de types expressif et la syntaxe de Rust, mais avec un garbage collector et une runtime.
    • Je ne veux pas payer le coût en performances, et je préférerais un langage comparable à Go mais avec le système de types de Rust.
  • Avis opposé sur async/await

    • Dans un langage de haut niveau, les green threads de Go me semblent plus adaptés.
    • Le typage progressif est intéressant, mais pas indispensable. Le typage statique n’est pas pesant et peut rendre plus difficile le raisonnement sur les performances.
    • Je pense que l’inférence de types serait meilleure que le typage progressif.
  • Remarque sur la sensation Java vs JavaScript

    • Il est souligné que Java et JavaScript donnent des sensations très différentes.
  • L’absence de GC rend Rust agréable en systèmes embarqués

    • Il s’intègre facilement avec d’autres programmes, et le démarrage rapide des applications est l’un des grands avantages de Rust.
    • Ajouter un garbage collection à Rust pourrait revenir à abandonner cet avantage.
  • Sentiment mitigé sur l’expérience avec Rust

    • J’aime les patterns de sécurité mémoire, mais la syntaxe me paraît plus difficile qu’en C++.
    • J’ai du mal à lire le code mentalement.
    • Avec moins de magie de décorateurs et de syntaxe fondée sur des symboles, ce serait plus facile à comprendre pour les débutants.
  • Intérêt pour l’affirmation selon laquelle l’ajout d’annotations de type pourrait offrir des performances proches de Rust

    • Un langage qu’on pourrait écrire aussi facilement que JavaScript, mais qui deviendrait aussi rapide que Rust quand le travail supplémentaire se justifie.
  • Confusion autour de la méthode print_point du tutoriel

    • Il faudrait une explication plus détaillée du sens de async et await.
    • Question sur le fait de savoir si async/await jouent un rôle semblable à des valeurs évaluées paresseusement, et si diverses combinaisons provoquent des erreurs de type.
  • Frustration à propos des exemples de syntaxe des nouveaux langages de programmation

    • Demande qu’en créant un nouveau langage de programmation, on mette immédiatement sur la landing page un exemple de syntaxe « Hello World ».