Vue lecture
GPT-5 aura une intelligence « universitaire », mais le lancement devra attendre
Sphero : le robot pour programmeur en herbe revient dans une nouvelle version
Pour la première fois, le C++ est plus populaire que le C
L’indice TIOBE de juin 2024 est sorti et son titre est quelque peu surprenant : le langage de programmation C++ vient de dépasser le C pour la première fois en 39 ans d’histoire. Plus bas dans le classement, Go et Rust ont atteint leur meilleure position, respectivement 7e et 17e. Je l’ai déjà dit, mais cela vaut […]
L’article Pour la première fois, le C++ est plus populaire que le C est apparu en premier sur BlogNT : le Blog des Nouvelles Technologies.
UUIDv7 in 20 languages
(L'UUIDv7 est triable, ce qui le rend très intéressant pour les bases de données.)
Voir aussi : https://www.bortzmeyer.org/9562.html
(Permalink)
Perl 5.40 est sorti
Perl est un langage généraliste créé en 1987 par Larry Wall. Il est distribué sous une double licence : Artistic Licence et GPL v1+. La plupart des modules du CPAN, dépôt de référence pour des modules tiers, sont également sous ces deux licences. Perl est inclus dans la quasi-totalité des distributions GNU/Linux.
La toute dernière version de Perl, la 5.40.0, est sortie le 9 juin 2024. Vous la retrouverez bientôt dans votre distribution préférée.
- lien nᵒ 1 : Perl sur Wikipedia
- lien nᵒ 2 : Guide Perl - Débuter et progresser en Perl
- lien nᵒ 3 : L'annonce de la sortie
- lien nᵒ 4 : Le site officiel de Perl
Sommaire
Améliorations notables
Nouveau mot clé __CLASS__
Lors de l’utilisation de la nouvelle fonctionnalité classe, le code à l’intérieur d’une fonction, d’un bloc ADJUST ou d’une expression d’initialisation de field peut maintenant utiliser le nouveau mot-clé __CLASS__.
use feature 'class';
class Example1 {
field $f = __CLASS__->default_f;
sub default_f { 10 }
}
Cela donne un nom de classe, similaire à __PACKAGE__, mais alors que celui-ci donne le paquetage de compilation dans lequel le code apparaît, le mot clé __CLASS__ donne la classe d’exécution réelle dont l’instance d’objet est membre.
class Example2 :isa(Example1) {
sub default_f { 20 }
}
my $obj = Example2->new;
# $f aura maintenant la valeur 20
Cela le rend utile pour l’aiguillage des fonctions sur cette classe, en particulier lors des constructeurs, où l’accès à $self n’est pas autorisé.
un attribut :reader pour les variables field
Lors de l’utilisation de la fonctionnalité de classe, les variables de champ peuvent désormais prendre un attribut :reader. Ceci crée automatiquement une fonction qui renvoie simplement la valeur de la variable de champ de l’instance donnée.
field $name :reader;
est donc l’équivalent de
field $name;
method name () { return $name; }
On peut donner un nom différent à cette fonction :
field $name :reader(get_name);
Autoriser un espace dans l’option de ligne de commande -M
Lors du traitement des options de ligne de commande, Perl autorise désormais un espace entre le commutateur -M et le nom du module qui le suit.
$ perl -M Data::Dumper=Dumper -E 'say Dumper [1,2,3]'
Cela correspond au fonctionnement de l’option -I.
Restrictions d’utilisation des déclarations VERSION
Dans Perl 5.36, un avertissement de dépréciation avait été ajouté lors de la rétrogradation d’une déclaration d’utilisation VERSION d’une version supérieure à 5.11 vers une version inférieure. Ceci est désormais une erreur fatale.
De plus, c’est désormais une erreur fatale d’émettre une déclaration d’utilisation ultérieure VERSION lorsqu’une autre est dans la portée, lorsque l’une ou l’autre des versions est 5.39 ou supérieure. Un avertissement de dépréciation a également été ajouté pour toute autre déclaration d’utilisation ultérieure de VERSION inférieure à la version 5.39, pour avertir qu’elle ne sera plus autorisée dans la version Perl 5.44.
Nouvelles fonctions Builtin::inf et Builtin::nan
Deux nouvelles fonctions, inf et nan, ont été ajoutées à l’espace de noms intégré. Celles-ci agissent comme des constantes qui donnent respectivement la valeur infinie à virgule flottante et Not-a-Number.
Nouvel opérateur ^ xor logique
Perl a toujours eu trois opérateurs logiques de faible priorité and, or et xor, ainsi que trois équivalents de priorité élevée &, ^ et | traitant les opérandes bit par bit. Jusqu’à cette version, alors que les opérateurs logiques de priorité moyenne && et || étaient présents, il n’y avait pas d’équivalent xor. Cette version de Perl ajoute l’opérateur , complétant l’ensemble.
$x ^^ $y and say "L’un de x et y est vrai, mais pas les deux";
Le pragma features de 5.40 contient try / catch
Le mot-clé features active maintenant la fonctionnalité try / catch, récemment stabilisée. Comme cet ensemble de fonctionnalités est activé par l’option de ligne de commande -E, ceux-ci sont immédiatement disponibles dans les scripts lancés avec cette option.
Securité
CVE-2023-47038
Cette vulnérabilité a été remontée à l’équipe sécurité de Perl par Nathan Mills.
Une expression régulière compilée par perl 5.30.0 jusqu’à 5.38.0 peut provoquer un buffer overflow d’un octet contrôlé par l’attaquant.
CVE-2023-47039
Cette vulnérabilité a été remontée au Intel Product Security Incident Response Team (PSIRT) par l’utilisateur GitHub ycdxsb. Le PSIRT l’a ensuite remonté à l’équipe sécurité de Perl. À noter qu’elle ne concerne que Perl pour Windows.
Perl pour Windows dépend sur la variable d’environnement PATH pour trouver le shell (cmd.exe). Lorsqu’on lance un exécutable qui utilise l’interpréteur Perl, Perl essaie d’abord de trouver et utiliser cmd.exe dans le répertoire courant. Il est possible d’exploiter ce comportement pour faire exécuter du code malicieux à l’administrateur du poste.
Changements incompatibles avec les versions précédentes
reset EXPR appelle maitenant "set-magic" sur les scalaires
Précédemment, reset EXPR n’appelait pas les fonctions « magiques » lorsqu’il effaçait des variables scalaires. Cela signifiait que les changements n’étaient pas répercutés sur l’état interne des variables magiques lorsque c’était nécessaire, comme c’est le cas pour $W, et cela ne déclenchait pas d’exception lorsque la magie sous-jacente aurait dû déclencher une exception, comme pour $1.
Cela signifie que du code qui était jusqu’à présent sans effet peut, maintenant, avoir un effet, ou même déclencher une exception.
Il n’y a aucun effet pour un reset ordinaire dont le but est de réinitialiser les recherches simples appelées par m?regexp?
Avertissement lors de l’appel de la méthode import sur un paquetage inconnu
Historiquement, il était possible d’appeler la méthode import ou unimport pour n’importe quelle classe, y compris les classes qui n’ont pas été définies. Même si l’appel se faisait avec un argument, cela ne déclenchait pas d’erreur. Par exemple, le code suivant ne déclenche pas d’erreur en Perl 5.38:
Classe::qui::n::existe::pas->import("toto");
Toutefois, à partir de Perl 5.39.1, cette pratique est dépréciée et déclenche un avertissement. On peut remarquer que l’appel de ces méthodes sans argument continue à s’exécuter sans déclencher d’erreur. Par exemple
Classe::qui::n::existe::pas->import();
continue à ne pas déclencher d’erreur. C’est parce que toutes les classes dérivent implicitement de la classe UNIVERSAL, qui définit maintenant une méthode import. Dans les anciens Perl, cette méthode n’était pas définie pour UNIVERSAL. Au lieu de cela, les appels à import et à unimport étaient traités de façon spéciale de manière à ce qu’ils ne déclenchent pas d’erreur si la méthode correspondante n’était pas définie.
Ce changement a été mis en place pour faciliter la détection des fautes de frappe dans les instructions use, lorsque le programme tourne sur un système de fichiers avec des noms insensibles à la casse. Par exemple, sur Windows ou sur toute plateforme avec dse noms de fichier insensibles à la casse, avec un ancien Perl, le code suivant
use STRICT 'refs';
serait passé sans déclencher d’erreur et sans rien faire, car le module s’appelle réellement strict.pm au lieu de STRICT.pm, donc il aurait été chargé, mais sa fonction import n’aurait jamais été appelée. Cette nouveauté permet également de détecter le cas où un utilisateur ajoute un argument à la commande use pour un paquetage qui ne définit pas son propre import. C’est le cas entre autres pour la définition d’une classe « pure », qui ne définit pas de méthode « import ».
return ne permet plus de renvoyer un objet indirect
La syntaxe de l’opérateur return rejette maintenant les objets indirects. Jusqu’à présent, dans la plupart des cas, cela passait à la compilation et cela pouvait même s’exécuter, mais ce n’était pas documenté et cela pouvait produire des résultats prêtant à confusion. Par exemple :
# Remarquez que « somme » n’a pas été défini
sub somme_positive {
return somme grep $_ > 0, @_;
# interprété abusivement ainsi :
# return *somme, grep $_ > 0, @_;
# avec le mot somme pris en tant que typeglob et transmis en tant qu’argument supplémentaire
}
say for somme_positive(-1, 2 ,3);
produisait
*main::somme
2
3
Dans les appels de méthode, les noms de classe sans guillemets ne sont plus interprétés comme des handles de fichier si l’on a déclaré no feature "bareword_filehandles"
Si l’on déclare no feature "bareword_filehandles"
, les handles de fichier sans guillemets continuent à être acceptés dans les appels de méthode :
open FH, "<", $somefile or die;
no feature 'bareword_filehandles';
FH->binmode;
Cela a été corrigé, donc maintenant la ligne
FH->binmode;
essaiera de résoudre FH en tant que classe, ce qui provoque habituellement une erreur à l’exécution.
Les handles de fichier standard tels que STDOUT continuent à être résolus en tant que handles :
no feature 'bareword_filehandles';
STDOUT->flush; # continues to work
Notez qu’une fois que Perl a résolu un nom sans guillemets en tant que classe, il continuera à le faire :
package SomeClass {
sub somemethod{}
}
open SomeClass, "<", "somefile" or die;
# SomeClass résolu en tant que handle
SomeClass->binmode;
{
no feature "bareword_filehandles";
SomeClass->somemethod;
}
# SomeClass résolu en tant que classe
SomeClass->binmode;
Commentaires : voir le flux Atom ouvrir dans le navigateur
Apple Messages adopte enfin le RCS et la programmation de messages !
ChatGPT ne vous écoutera plus en arrière-plan, sauf si vous le souhaitez
Codestral – Le modèle IA des développeurs
Codestral, le tout nouveau modèle de code de Mistral AI, débarque pour le plus grand plaisir (ou pas) des développeurs ! Créé par l’équipe de Mistral AI et lancé hier, Codestral est donc un modèle de génération de code ouvert spécialement conçu pour les tâches de génération de code. Il maîtrise plus de 80 langages de programmation, dont les incontournables Python, Java, C++, JavaScript et même le vénérable Fortran.
Si vous galérez sur une fonction, il vous aidera à la compléter en 2 coups de cuillère à pot et si vous avez besoin de tests, cet expert les génèrera à votre place pendant que vous serez parti à la machine à café. Grâce à sa capacité de remplissage au milieu (fill in the middle), il pourrait ainsi compléter n’importe quel bout de code, même le plus complexe.
En termes de performance, il établit de nouveaux records. C’est un modèle de 22 milliards de paramètres, mais grâce à sa fenêtre contextuelle de 32 000 tokens, il surpasse les autres modèles sur de nombreux benchmarks, y compris le RepoBench pour la génération de code à longue portée. Sur des tests spécifiques comme HumanEval, MBPP pour le Python et Spider pour le SQL, Codestral affiche également des performances impressionnantes devant GPT-4-Turbo et GPT-3.5.
![](https://korben.info/app/uploads/2024/05/SCR-20240530-hskq.webp)
Ce modèle est accessible sur HuggingFace, où vous pouvez le télécharger et avec l’API de Mistral AI, quelques lignes de code suffisent pour l’intégrer dans votre projet. Les adeptes de VSCode et JetBrains seront ravis puisque les plugins Continue.dev et Tabnine ont également intégré ce modèle, pour coder et interagir avec lui directement dans votre IDE préféré. Vous pouvez également y avoir accès via le Chat de Mistral.
![](https://korben.info/app/uploads/2024/05/SCR-20240530-hsod.webp)
Perso, j’utilise Claude 3 Opus et GPT-4o pour mon code mais je vais commencer à tester celui-là également. En tout cas, si ça vous intéresse, rendez-vous sur la documentation officielle de Mistral AI ici.
Copilot arrive sur Telegram : son fonctionnement et ses limites d'utilisation
Alexa avec IA sera-t-elle payante ? Les projets d'Amazon
Quel est le bon age pour lancer votre langage de programmation ?
Les langages de programmation, c’est vraiment un truc incroyable. Ça nous permet de façonner le monde et nos usages mais vous êtes-vous déjà demandé à quel âge les développeurs derrière ces langages avaient conçu leurs bébé ?
Prenons par exemple ce bon vieux Dennis Ritchie, le créateur du célèbre langage C. Et bien, figurez-vous qu’il avait sa modeste 31ème bougie sur son gâteau d’anniversaire quand il a créé ce monument en 1972. Pas mal, non ?
Et JSON, ce format de données ultra populaire ? Son inventeur, Douglas Crockford, avait déjà 46 ans bien tassés quand il a sorti ce truc en 2001. Comme quoi, il n’y a pas d’âge pour innover ! Et que dire de Kenneth E. Iverson, qui a créé le langage J à l’âge de 70 ans en 1993 ? Respect l’ancien !
D’ailleurs, si on regarde les statistiques de plus près, on se rend compte que la moyenne d’âge pour créer un langage de programmation est de 37,5 ans. Avec un record à 70 ans pour Kenneth E. Iverson avec J et un jeune prodige qui a fait ses preuves à 16 ans. Devinez qui c’est ? Roulement de tambour…
![](https://korben.info/app/uploads/2024/05/SCR-20240521-ous.webp)
Mais oui, c’est bien Aaron Swartz ! Ce petit génie qui nous manque cruellement, a créé le format atx en 2002 à l’âge où la plupart d’entre nous galérait encore sur les équations du second degré. C’était déjà impressionnant et par la suite, Il a d’ailleurs continué à innover, travaillant plus tard avec John Gruber pour créer le format Markdown en 2004.
En parlant de jeunes prodiges, saviez-vous que Rasmus Lerdorf a créé PHP à seulement 27 ans en 1995 ? Et oui, pendant que certains cherchaient encore leur voie en fac de socio, lui changeait déjà la face du développement web !
Et à contrario, regardez aussi TypeScript (2012, Anders Hejlsberg, 52 ans), Go (2009, Rob Pike, Ken Thompson et Robert Griesemer, 53 ans en moyenne) et Clojure (2007, Rich Hickey, 48 ans), ces langages ont été concoctées par des quadras et des quinquas bien expérimentés ! La preuve que l’expérience a du bon.
Notons également que Brendan Eich a créé JavaScript à 34 ans en 1995, Guido van Rossum a développé Python à 35 ans en 1991, et Tim Berners-Lee a inventé HTML à 36 ans la même année. Quant à Richard Stallman, il a conçu Emacs Lisp à 32 ans en 1985 et avant ça Emacs à l’age de 23 ans en 1976.
Bref, si vous rêvez de créer votre propre langage de dev ou votre propre format de données et que vous arrivez dans votre quarantaine ou que vous êtes un petit jeune qui sort à peine de l’école, y’a pas d’age pour vous lancer. C’est fun et gratifiant, et qui sait, peut-être que votre petit monstre deviendra le prochain C ou JavaScript !
En manque d’inspiration avec vos prompts IA ? Allez jeter un œil à la bibliothèque d’Anthropic
Vous en avez assez de passer des heures à chercher la formulation parfaite pour obtenir de bons résultats avec vos prompts IA ?
Ne vous cassez plus la tête, puisque Anthropic a pensé à tout avec sa Prompt Library. Cette bibliothèque gratuite de prompts va vous permettre d’interagir plus facilement avec des outils comme Claude3, ChatGPT, Mistral…etc. Les prompts que vous y trouverez sont pré-optimisés pour une multitude de tâches, allant de la rédaction au développement en passant par l’analyse de données. Et ça n’a de cesse de s’enrichir puisque tout le monde peut soumettre ses meilleurs prompts.
![](https://korben.info/app/uploads/2024/03/SCR-20240326-esj-1024x886.webp)
![](https://korben.info/app/uploads/2024/03/SCR-20240326-evy-1024x865.webp)
Pour l’utiliser, il vous suffit de copier-coller le prompt de votre choix dans votre IA préférée, d’y apporter quelques modifications si le cœur vous en dit, et voilà ! Il y a même le code en TypeScript ou Python qui vous permettra de passer un message « system » avant votre message « user ».
![](https://korben.info/app/uploads/2024/03/SCR-20240326-exr-1024x581.webp)
Chacun de ces prompts est le fruit d’un travail minutieux de la part des équipes d’Anthropic dont l’objectif est de fournir des résultats d’e qualité supérieure d’excellente qualité afin de montrer ce que Claude3 a dans le ventre. Et, comme je le disais, il y en a pour tous les goûts… Des prompts pour générer des recettes, interpréter les rêves, se lancer dans la médiation pleine conscience, à des choses plus boulot / business comme créer une marque, rédiger des documents, debugger du code python et j’en passe.
Si ça vous dit de jeter un œil, c’est par ici que ça se passe.