LCC 325 - Trier le hachis des concurrents
Description
Gros épisode qui couvre un large spectre de sujets : Java, Scala, Micronaut, NodeJS, l'IA et la compétence des développeurs, le sampling dans les LLMs, les DTO, le vibe coding, les changements chez Broadcom et Red Hat ainsi que plusieurs nouvelles sur les licences open source.
Enregistré le 7 mai 2025
Téléchargement de l'épisode LesCastCodeurs-Episode-325.mp3 ou en vidéo sur YouTube.
News
Langages
A l'occasion de JavaOne et du lancement de Java 24, Oracle lance un nouveau site avec des ressources vidéo pour apprendre le langage https://learn.java/
- site plutôt à destination des débutants et des enseignants
- couvre la syntaxe aussi, y compris les ajouts plus récents comme les records ou le pattern matching
- c'est pas le site le plus trendy du monde.
Martin Odersky partage un long article sur l'état de l'écosystème Scala et les évolutions du language https://www.scala-lang.org/blog/2025/03/24/evolving-scala.html
- Stabilité et besoin d'évolution : Scala maintient sa position (~14ème mondial) avec des bases techniques solides, mais doit évoluer face à la concurrence pour rester pertinent.
- Axes prioritaires : L'évolution se concentre sur l'amélioration du duo sécurité/convivialité, le polissage du langage (suppression des "rugosités") et la simplification pour les débutants.
- Innovation continue : Geler les fonctionnalités est exclu ; l'innovation est clé pour la valeur de Scala. Le langage doit rester généraliste et ne pas se lier à un framework spécifique.
- Défis et progrès : L'outillage (IDE, outils de build comme
sbt,scala-cli,Mill) et la facilité d'apprentissage de l'écosystème sont des points d'attention, avec des améliorations en cours (partenariat pédagogique, plateformes simples).
Des strings encore plus rapides ! https://inside.java/2025/05/01/strings-just-got-faster/
- Dans JDK 25, la performance de la fonction
String::hashCodea été améliorée pour être principalement constant foldable. - Cela signifie que si les chaînes de caractères sont utilisées comme clés dans une
Mapstatique et immuable, des gains de performance significatifs sont probables. - L'amélioration repose sur l'annotation interne
@Stableappliquée au champ privéString.hash. - Cette annotation permet à la machine virtuelle de lire la valeur du hash une seule fois et de la considérer comme constante si elle n'est pas la valeur par défaut (zéro).
- Par conséquent, l'opération
String::hashCodepeut être remplacée par la valeur de hash connue, optimisant ainsi les lookups dans lesMapimmuables. - Un cas limite est celui où le code de hachage de la chaîne est zéro, auquel cas l'optimisation ne fonctionne pas (par exemple, pour la chaîne vide "").
- Bien que l'annotation
@Stablesoit interne au JDK, un nouveau JEP (JEP 502: Stable Values (Preview)) est en cours de développement pour permettre aux utilisateurs de bénéficier indirectement de fonctionnalités similaires.
AtomicHash, une implémentation Java d'une HashMap qui est thread-safe, atomique et non-bloquante https://github.com/arxila/atomichash
- implémenté sous forme de version immutable de Concurrent Hash Trie
Librairies
Sortie de Micronaut 4.8.0 https://micronaut.io/2025/04/01/micronaut-framework-4-8-0-released/
- Mise à jour de la BOM (Bill of Materials) : La version 4.8.0 met à jour la BOM de la plateforme Micronaut.
- Améliorations de Micronaut Core : Intégration de Micronaut SourceGen pour la génération interne de métadonnées et d'expressions bytecode.
- Nombreuses améliorations dans Micronaut SourceGen.
- Ajout du traçage de l'injection de dépendances pour faciliter le débogage au démarrage et à la création des beans.
- Nouveau membre
definitionTypedans l'annotation@Clientpour faciliter le partage d'interfaces entre client et serveur. - Support de la fusion dans les Bean Mappers via l'annotation
@Mapping. - Nouvelle liveness probe détectant les threads bloqués (deadlocked) via
ThreadMXBean. - Intégration Kubernetes améliorée : Mise à jour du client Java Kubernetes vers la version 22.0.1.
- Ajout du module Micronaut Kubernetes Client OpenAPI, offrant une alternative au client officiel avec moins de dépendances, une configuration unifiée, le support des filtres et la compatibilité Native Image.
- Introduction d'un nouveau runtime serveur basé sur le serveur HTTP intégré de Java, permettant de créer des applications sans dépendances serveur externes.
- Ajout dans Micronaut Micrometer d'un module pour instrumenter les sources de données (traces et métriques).
- Ajout de la condition
conditiondans l'annotation@MetricOptionspour contrôler l'activation des métriques via une expression. - Support des Consul watches dans Micronaut Discovery Client pour détecter les changements de configuration distribuée.
- Possibilité de générer du code source à partir d'un schéma JSON via les plugins de build (Gradle et Maven).
Web
Node v24.0.0 passe en version Current: https://nodejs.org/en/blog/release/v24.0.0
- Mise à jour du moteur V8 vers la version 13.6 : intégration de nouvelles fonctionnalités JavaScript telles que
Float16Array, la gestion explicite des ressources (using),RegExp.escape,WebAssembly Memory64etError.isError. - npm 11 inclus : améliorations en termes de performance, de sécurité et de compatibilité avec les packages JavaScript modernes.
- Changement de compilateur pour Windows : abandon de MSVC au profit de ClangCL pour la compilation de Node.js sur Windows.
AsyncLocalStorageutilise désormaisAsyncContextFramepar défaut : offrant une gestion plus efficace du contexte asynchrone.URLPatterndisponible globalement : plus besoin d'importer explicitement cette API pour effectuer des correspondances d'URL.- Améliorations du modèle de permissions : le flag expérimental
--experimental-permissiondevient--permission, signalant une stabilité accrue de cette fonctionnalité. - Améliorations du test runner : les sous-tests sont désormais attendus automatiquement, simplifiant l'écriture des tests et réduisant les erreurs liées aux promesses non gérées.
- Intégration d'Undici 7 : amélioration des capacités du client HTTP avec de meilleures performances et un support étendu des fonctionnalités HTTP modernes.
- Dépréciations et suppressions :
- Dépréciation de
url.parse()au profit de l'API WHATWG URL. - Suppression de
tls.createSecurePair. - Dépréciation de
SlowBuffer. - Dépréciation de l'instanciation de REPL sans
new. - Dépréciation de l'utilisation des classes Zlib sans
new. - Dépréciation du passage de
argsàspawnetexecFiledanschild_process.
- Dépréciation de
- Node.js 24 est actuellement la version "Current" et deviendra une version LTS en octobre 2025. Il est recommandé de tester cette version pour évaluer son impact sur vos applications.
Data et Intelligence Artificielle
Apprendre à coder reste crucial et l'IA est là pour venir en aide : https://kyrylo.org/software/2025/03/27/learn-to-code-ignore-ai-then-use-ai-to-code-even-better.html
- Apprendre à coder reste essentiel malgré l'IA.
- L'IA peut assister la programmation.
- Une solide base est cruciale pour comprendre et contrôler le code.
- Cela permet d'éviter la dépendance à l'IA.
- Cela réduit le risque de remplacement par des outils d'IA accessibles à tous.
- L'IA est un outil, pas un substitut à la maîtrise des fondamentaux.
Super article de Anthropic qui essaie de comprendre comment fonctionne la "pensée" des LLMs https://www.anthropic.com/research/tracing-thoughts-language-model
- Effet boîte noire : Stratégies i




