Explications très détaillées sur le compilateur Just In Time (JIT) introduit dans PHP 8.
Concrètement ça améliore la vitesse d'exécution de votre code au fur et à mesure que celui-ci est executé en compilant spécifiquement en code machine (assembleur) certaines function qui sont appellés toujours avec les mêmes types.
C'est le même principe que le JIT dans la JVM ou v8.
je ne suis pas sûr que vous obteniez des améliorations aussi bonnes mais ça ouvre la porte à d'autres types d'applications boudés par souci de performances, comme l'IA, le jeu vidéo, les statistiques..
Par contre ça m'étonnerait qu'on se mette à faire de l'IA, du jeu vidéo ou n'importe quoi d'autre qui demande des performances avec PHP car le JIT reste quand même bien moins optimisé qu'une compilation Ahead Of Time (C++, Rust, Golang, etc)
Une pratique qui ressemble à SOLID mais avec des règles un peu dogmatiques et assez strictes:
- One level of indentation per method
- Don’t use the ELSE keyword
- Wrap all primitives and Strings
- First class collections
- One dot per line
- Don’t abbreviate
- Keep all entities small
- No classes with more than two instance variables
- No getters/setters/properties
C'est intéressant de remettre en question son code par rapport à ces règles mais attention à ne pas tomber dans un dogme aveugle non plus.
Tutoriel très complet pour Rust et complètement en français
Un article sur l'utilisation de React Context dans une app pour partager facilement des informations entre les composants plutôt que les passer dans les props.
L'utilisation est un peu complexe et s'apparente à de l'injection de dépendances.
On fournit les contextes en encapsulant l'application dans des balises donc attention à l'utilisation de plusieurs contextes qui s'encapsulent entre eux et réintroduisent du couplage.
// ContainerContext a besoin de LangContext
<LangContext.Provider value={translate}>
<ContainerContext.Provider value={findTasks}>
<TodoList/>
</ContainerContext.Provider>
</LangContext.Provider>
Un retour d'expérience de Cloudflare sur la ré-écriture d'un module Nginx en Rust.
Excellent article sur les CRDTs (Conflict Free Replicated Data types).
Un CRDT c'est une structure de données qui
- peut être copiée sur plusieurs clients (souvent en p2p)
- peut être modifiée sans coordination par plusieurs clients
- chaque copie peut être mergée sur chaque client afin de former un état final déterministe
C'est ce qui est utilisé pour les outils de collaboration type Google Doc pour résoudre les conflits par exemple.
Nomic supporte maintenant le format Apache Arrow.
C'est véritablement entrain de devenir le standard de l'industrie data!
Nomic est une lib python qui permet d'intéragir avec de très gros jeux de données dans son navigateur.
Arquero est une librairie Javascript qui permet de manipuler des données tabulaires en RAM.
Elle supporte l'algèbre relationnelle comme pour une base SQL.
C'est du même genre que Pandas en Python mais du coup pour faire de la datascience directement en Javascript!
Derrière les performances de la lib on retrouve encore une fois le format binaire Arrow
beers
.orderby(aq.desc('ibu'))
.select('name', 'style', 'ibu')
.filter(d => op.includes(op.lower(d.name), 'hop'))
.view()
Un récapitulatif très complet sur les web component et ce qu'il est possible de faire avec.
Un benchmark des librairies et bases de données (en RAM) pour traiter des données tabulaires dans le genre de Pandas.
Polars remporte haut la main le benchmark, c'est une lib écrite en Rust et qui utilise aussi le standard Arrow
Apache Arrow est un projet qui développe des SDK dans la plupart des langages afin de manipuler efficacement des données tabulaires (vecteurs, matrices) en RAM.
Ils ont notamment des optimisations des calculs spécialement conçues pour les CPU et les GPU.
Par exemple, les données sont regroupées pour éviter les "jump" CPU et tenter de les faire tenir dans les différents caches.
Pour les GPU, Arrow utilise CUDA afin de paralléliser les calculs.
C'est utilisé dans la nouvelle version 2.0 de Pandas, la lib de référence en Python pour manipuler les données.
Les performances peuvent être jusqu'à 25x supérieurs (!)
(Merci Ocav pour le partage)
Très bon article qui récapitule l'utilisation des streams avec l'API fetch
incluse dans Node.js 18.
Un framework C++ pour construire des application server performantes.
Au menu:
- sharding
- network stack
- futur et promises (JS like <3)
- message passing pour le multithread (afin d'éviter les couteux lock)
ScyllaDB est écrit avec
Une belle performance algorithmique sur l'algorithme de chunking de Rollup avec 3.3s au lieu de 2 heures pour la génération du plus petit nombre de chunks.
L'auteur utilise un seul BigInt
et manipule directement les bits au lieu de manipuler un Set.
Un article qui vulgarise très bien le pipeline d'exécution du code source Javascript par V8.
C'est sensiblement la même chose pour les autres moteurs présents dans Firefox (SpiderMonkey) et Safari (JavaScriptCore).
(Merci Alex pour le partage)
Un retour d'expérience sur un passage de iOS natif à Flutter.
Les points forts:
- le langage Dart
- la rapidité d'exécution des tests
- grande diversité de widget embarqués
- hot reload <3
- performances
- courbe d'apprentissage douce
Les points faibles:
- moins de ressources et librairies car ecosystème "jeune"
- 🕸️
Flutter est le langage de l'avenir pour le frontend et (j'espère) un jour aussi du backend.
Le prochain langage fullstack pour remplacer Javascript?
Un système de restriction des permissions est actuellement en cours d'ajout à Node.js.
Ce système permet de restreindre les possibilités du programme d'agir sur le système, notamment:
- système de fichier en lecture/ecriture
- exécuter de nouveaux programmes
- démarrer un worker_thread Node.js
C'est le même système utilisé par Deno pour augmenter la sécurité des applications lancés avec le runtime.
Un article sur l'écriture de module Ecmascript (.mjs
) pour une utilisation par Node.js et le browser avec l'utilisation de TypeScript.
Apple va supporter les Push Notifications sur les progressives web apps.
C'est une bonne nouvelle, c'etait une fonctionnalité critique qui manquait par rapport aux applications natives.
Une librairie de composants React près à l'emploi pour faire développer une application.
Le design est très épuré je trouve