11 nouveaux langages de programmation pour faire chanter le cœur d’un codeur

Était-ce Alexander Pope qui a dit : « L’espoir jaillit éternellement dans le sein humain » ? Pope était un poète, pas un hacker, mais je crois qu’il comprendrait l’anticipation impliquée dans la découverte d’un nouveau langage de programmation. Il saurait que les développeurs de logiciels espèrent toujours que cette langueavec sa combinaison unique de caractères Unicode, résoudra enfin tous nos problèmes, facilitant le codage en quelques clics.

Pope comprendrait sûrement le désir d’une nouvelle syntaxe si intuitif qu’il suffit d’imaginer une réponse et de la voir traduite en règles logiques merveilleuses, élaborées et surtout correctes. Il apprécierait le désir dans nos doigts de faire tourner un nouveau code qui a l’air aussi simple et élégant qu’un triple axel, un trois et demi vers l’intérieur en position carpée ou une course de slalom géant aux Jeux olympiques.

Cependant, la plupart des langages modernes ne sont pas conçus pour la fantaisie ou pour démontrer nos prouesses en matière de codage. Ils sont faits en réponse à un problème commun que les créateurs sont impatients de résoudre. Alors que la plupart des développeurs continueront à faire notre codage quotidien dans un ou plusieurs langages plus anciens et plus établis, nous sommes toujours à la recherche de nouveaux outils pour nous aider à résoudre nos problèmes de codage. Nous pouvons voir cette tendance, en particulier, dans l’essor des langages spécifiques à un domaine, ou DSL. Ces langages sont compacts et ciblés. Ils ne sont pas destinés à un usage général. Mais certains pourraient gagner une place spéciale dans votre boîte à outils pour cette raison.

Voici 11 nouvelles langues qui ont trouvé leur place. Certains sont des DSL, conçus pour faire une chose et bien la faire. D’autres, apparemment, aspirent à sauver le monde. Même s’ils ne sont pas ce dont vous avez besoin en ce moment, ils ont tous quelque chose à vous apprendre pour que nos ordinateurs fassent ce qu’ils font, mais meilleur.

Clojure réactive

Lorsque vous mariez Clojure avec React, voici ce que vous obtenez : un système qui combine toutes les possibilités des frontaux réactifs avec la force fonctionnelle et solide de Clojure. Au mieux, Reactive Clojure vous permet de disposer une collection complexe de composants frontaux et de les associer à des fonctions. Le cadre réactif remplit les détails et garantit la fluidité des flux de données d’application entre vos composants et la base de données. Clojure apporte la base fonctionnelle pour rendre possibles même les cas d’utilisation inhabituels et débogables.

Est-ce un match fait au paradis? Le temps nous le dira. Reactive Clojure est une bonne option pour écrire le code de colle qui maintient ensemble les composants frontaux. Son modèle multithread est un complément naturel aux tableaux de bord complexes et réactifs qui rendent compte de plusieurs tâches simultanément.

Nickel

L’un des jeux les plus ironiques auxquels jouent les programmeurs consiste à pousser la plupart de notre travail vers les fichiers de configuration. Ces fichiers, souvent encodés en JSON, YAML ou même XML, sont une bonne idée de codage métastasée en un rituel élaboré. Dans certains cas, vous n’avez même pas besoin d’écrire de code réel ; il suffit de jigger sans cesse les différents fichiers de configuration pour faire ce dont vous avez besoin.

Il est donc logique que nous ayons Nickel : un langage de programmation pour créer des fichiers de configuration. Nickel est comme un modèle avec une logique intégrée, que vous pouvez utiliser pour créer des fichiers de configuration qui ne sont pas statiques. Un paramètre peut être une valeur pendant la semaine et une autre le week-end. Lorsqu’il s’exécute, Nickel crée un nouveau fichier de configuration qui correspond à tous les paramètres qu’il a reçus.

La structure de Nickel est en grande partie fonctionnelle et une vérification de type est disponible, si cela s’avère utile. Un grand thème est «l’exactitude» car un morceau de code Nickel bien écrit garantit à peu près que la sortie obéira à la fois aux règles syntaxiques et à toutes les autres règles dont vous avez besoin. Le compilateur de Nickel vous permet d’écrire des contrats, puis vérifie que la sortie les respecte. Bien sûr, il y a quelque chose d’amusant à écrire du code pour créer des fichiers de configuration qui dirigent ensuite votre code. Mais c’est une solution très pratique pour les architectures modernes.

Kobra

Les créateurs de Kobra voulaient un langage qui ouvrait l’apprentissage automatique aux ingénieurs, scientifiques et autres codeurs pas si professionnels. Le résultat est ce qu’ils appellent un langage visuel pour l’apprentissage automatique. L’éditeur de Kobra compose des séquences de type code avec des tuiles glisser-déposer représentant des routines intégrées communes pour l’analyse statistique et l’apprentissage automatique. Le processus ressemble à R avec des cadres de données construits à partir de données tabulaires et une collection de fonctions d’affichage graphique pour créer des tableaux de bord et des documents.

Biceps

L’une des fonctionnalités les plus utiles du cloud est la possibilité de démarrer et d’arrêter des serveurs pour gérer les pics de données. Autrefois, il fallait des semaines à une équipe matérielle de centre de données pour réquisitionner, installer, tester et configurer une machine. Désormais, le cloud vous permet de faire tout cela en quelques minutes, voire quelques secondes.

De nombreuses équipes devops ont commencé à écrire du code pour les différentes API prises en charge par les différents clouds. Microsoft a décidé d’aller un peu plus loin et de créer un langage simplifié pour le démarrage des machines dans Azure, dans le cadre de sa philosophie d’infrastructure en tant que code.

Le langage, appelé Bicep, offre un format déclaratif efficace pour épeler la plupart des différents bits qu’un développeur pourrait vouloir retourner dans une nouvelle instance. Une sécurité de type de base peut aider à prévenir les erreurs et un éditeur sensible à la syntaxe est disponible dans VS Code. Le langage lui-même est conçu pour une réflexion d’ordre supérieur sur l’infrastructure, avec une structure fortement déclarative qui vous permet d’inclure des instructions dans n’importe quel ordre, puis de laisser le gestionnaire de ressources d’Azure optimiser l’exécution.

Frink

Un ami affirme que sa seule exigence pour choisir une banque est de s’assurer que le logiciel de comptabilité de la banque utilise des nombres entiers pour compter les centimes et non des nombres à virgule flottante pour les fractions de dollar. Les dangers d’erreurs avec la virgule flottante sont bien connus et trop grands. Combien de bogues ont été causés en jetant des chiffres sans trop de soin ?

Frink est un langage “conscient des unités” créé uniquement pour ce problème. Chaque variable dans Frink ne contient pas seulement un nombre mais également une indication de l’unité de mesure, que ce soit des tonnes, des watts, des pieds ou des mètres. La conversion d’unité est facile grâce au fichier de configuration Frink. Le mécanisme de base de Frink utilise également des nombres de précision arbitraires pour réduire les problèmes d’arrondi. C’est comme la vérification de type mais pour les unités de mesure numériques.

Faust

La synthèse sonore peut sembler un objectif étroit, mais elle est très utile pour le développement de jeux, la réalité virtuelle et toute application qui repose sur une bonne qualité sonore. Entrez Faust, un langage spécifique à un domaine qui tire son nom d’un amalgame de flux audio fonctionnel. La structure de Faust est purement fonctionnelle et toutes ses fonctions constituent un pipeline de traitement du son. Son arrière-plan décompose le son entrant en une représentation numérique, et le code lui-même est un ensemble de fonctions qui peuvent être composées ou combinées en un résultat final. Par exemple, vous pouvez créer un écho ou une réverbération en divisant la sortie de votre code et en introduisant un délai. Le code de Faust est transpilé en C++, C, code binaire LLVM, WebAssembly, Rust et quelques autres langages, vous pouvez donc l’utiliser avec presque tous les projets.

Melrose et Glicol

Quiconque écrit du code sait comment un programmeur créerait un groupe : au lieu de publier une annonce pour trouver un batteur, puis d’interviewer tous ceux qui répondent, écrivez simplement du code pour épeler les rythmes d’une boîte à rythmes. Une fois cela fait, autant remplacer tous les autres membres du groupe par des sous-programmes. Vous pourriez même construire un orchestre symphonique entier de cette façon.

Melrose et Glicol sont deux langages de programmation musicale conçus pour ce style de création musicale. Les deux vous permettent de créer des compositions élaborées en quelques frappes. Melrose travaille à un niveau élevé autour de l’octave standard à douze tons commune à la musique occidentale. Les notes sont regroupées en séquences et le logiciel gère une grande partie du travail de scut comme la transposition. La sortie va à n’importe quel instrument compatible MIDI et le code peut également réagir aux signaux entrants sur le port MIDI, de sorte que le code Melrose peut être un membre du groupe.

Glicol est un outil basé sur Rust qui accomplit une grande partie des mêmes tâches mais à partir d’un niveau inférieur. Le code s’intègre au traitement numérique du signal pour offrir une large gamme d’options musicales. L’outil est conçu pour produire des sons prêts pour le navigateur avec son moteur audio open source. Le développeur de Glicol affirme que le langage a “un faible droit d’entrée et des plafonds élevés” pour encourager la collaboration avec d’autres de tous niveaux de compétence.

WebAssembly et Wase

Le moyen le plus efficace d’expédier des instructions à l’ordinateur est de les coder en binaire et de les limiter à l’ensemble d’opérations de base utilisé par les processeurs. Chaque puce a sa propre syntaxe binaire préférée et certains langages comme Pascal ou Java ont un format binaire neutre destiné à s’exécuter sur une machine virtuelle locale. WebAssembly (Wasm) suit ces traces, offrant aux navigateurs Web un code binaire prédigéré combiné avec du texte dans un format standard. L’objectif de WebAssembly est de remplacer le code JavaScript minifié qui constitue l’épine dorsale des applications Web par quelque chose qui est encore plus prêt à fonctionner, avec une vitesse quasi native.

De nombreux développeurs utiliseront WebAssembly sans l’écrire directement, en utilisant des compilateurs qui convertissent les langages de niveau supérieur en WebAssembly qui s’exécutera dans les navigateurs. Il y a aussi une tendance à créer des langages de bas niveau qui exposent une grande partie de la structure de base de WebAssembly sous une forme lisible par l’homme. Wase est l’une de ces options, offrant une syntaxe de type C avec un typage fort.

WebAssembly trouve également une utilisation en dehors des navigateurs Web, comme moyen général d’encoder des instructions avec une machine à pile similaire à la JVM de Java. Redpanda, par exemple, est une plate-forme de données en continu qui offre aux développeurs la possibilité d’ajuster ou de modifier les données au fur et à mesure qu’elles arrivent avec du code écrit en WebAssembly.

Java 17

Techniquement, Java n’est pas un nouveau langage. En effet, l’une des plus grandes choses à propos de Java est que ses développeurs ont fait un excellent travail en maintenant la compatibilité avec les anciennes versions. Il est généralement assez facile de compiler du code vieux de 10 ou même 20 ans pour les dernières JVM. Le code n’est pas garanti pour fonctionner, mais il est toujours plus facile à compiler que presque n’importe quel autre langage. L’équipe Java a une suite de millions de tests d’intégration, et ça se voit.

J’inclus Java 17 dans cette liste car il a été tellement modernisé qu’il serait presque méconnaissable pour un voyageur temporel des années 1990. Java 17 a tellement de fonctionnalités et d’extensions supplémentaires qui changent notre façon de coder.

Certains, comme le générateur de nombres aléatoires amélioré ou la sémantique mathématique en virgule flottante plus stricte, relèvent les défis de l’écriture de code numérique très complexe. Les développeurs qui écrivent des systèmes comptables peuvent s’en tirer en utilisant des nombres entiers pour contenir le nombre de centimes, mais ceux qui s’attaquent aux algorithmes d’IA et à l’algèbre linéaire complexe ont besoin d’une virgule flottante.

D’autres, comme l’encapsulation forte et la sémantique de commutation étendue, apportent un mélange de discipline et de flexibilité au langage de base. Dans l’ensemble, il est plus facile que jamais d’écrire du code plus fort, plus sûr et plus sécurisé grâce à toutes ces améliorations. C’est toujours Java à la base, mais les extras font la différence.

Copyright © 2022 IDG Communications, Inc.

Leave a Comment