Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3137 connectés 

 

Sujet(s) à lire :
    - Who's who@Programmation
 

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  27343  27344  27345  ..  27401  27402  27403  27404  27405  27406
Auteur Sujet :

[blabla@olympe] Le topic du modo, dieu de la fibre et du monde

n°2542208
gfive
Posté le 10-09-2026 à 12:21:21  profilanswer
 

Reprise du message précédent :

gatsu35 a écrit :

Bon alors ca vous fait quoi d'être dépassés par la machine ?

 

Bah ça va.
L'IA t'as refait ton budget ? :o


---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
mood
Publicité
Posté le 10-09-2026 à 12:21:21  profilanswer
 

n°2542209
el_barbone
too old for this shit ...
Posté le 10-09-2026 à 12:22:12  profilanswer
 

gfive a écrit :

 

Bah ça va.
L'IA t'as refait ton budget ? :o


 [:manneke2]


---------------
En théorie, la théorie et la pratique sont identiques, en pratique, non.
n°2542210
XaTriX
Posté le 10-09-2026 à 12:30:50  profilanswer
 

gatsu35 a écrit :

Bon alors ca vous fait quoi d'être dépassés par la machine ?


Ce qui m'emmerde c'est que c'est assez difficile à suivre. C'est passionnant, certes, mais c'est chiant.
Les sujets sur les harness, le tooling, les modèles, l'effort, l'intégration, l'hébergement/ZDR, le local, les autorisations clients, .. :D
 
Là j'ai sous la main Fable, Astra, Opus et Sol mais à qui je donne quoi à faire :D


---------------
[:dawa]
n°2542211
sligor
Posté le 10-09-2026 à 12:54:33  profilanswer
 

el muchacho a écrit :


Je confirme :o
La syntaxe des Makefiles, c'est une natasserie.


Les alternatives sont souvent bien pires


---------------
qwerty-fr
n°2542212
Jubijub
Parce que je le VD bien
Posté le 10-09-2026 à 12:57:45  profilanswer
 

XaTriX a écrit :


Ce qui m'emmerde c'est que c'est assez difficile à suivre. C'est passionnant, certes, mais c'est chiant.
Les sujets sur les harness, le tooling, les modèles, l'effort, l'intégration, l'hébergement/ZDR, le local, les autorisations clients, .. :D
 
Là j'ai sous la main Fable, Astra, Opus et Sol mais à qui je donne quoi à faire :D


 
c'est un truc qui n'est pas propre aux LLM, c'est juste une tendance actuelle avec les réseaux sociaux.
 
Par ex je joue à Factorio. Si tu vas sur Reddit ou YouTube, tu vois les gens faire des speedruns, débattre des meilleurs blueprint, toujours dans le but de maxxer tout. Ça m'a fait arreter le jeu.
J'ai repris une partie, je maxx rien du tout, je joue juste comme ça me vient, et je m'amuse beaucoup avec
 
Des fois faut juste y aller et faire (pour ta question sur les LLMs, à ce stade que tu prennes le stack Anthropic ou OpenAI, t'as un bon truc, je suis pas certain que ça fera une grosse difference sur ton resultat final (fais avec celui dont tu préfères le style / personalité, parce que tu vas beaucoup lire sa prose)


---------------
Jubi Photos : Flickr - 500px
n°2542213
DDT
Few understand
Posté le 10-09-2026 à 13:19:43  profilanswer
 

sligor a écrit :


Les alternatives sont souvent bien pires

J'évite globalement la logique en dehors de l'outillage propre au projet mais just semble nettement moins attardé quand même.


---------------
click clack clunka thunk
n°2542214
Flaie
Posté le 10-09-2026 à 13:34:01  profilanswer
 

DDT a écrit :

J'évite globalement la logique en dehors de l'outillage propre au projet mais just semble nettement moins attardé quand même.


Hagrid :jap:

n°2542215
XaTriX
Posté le 10-09-2026 à 13:51:25  profilanswer
 

Jubijub a écrit :


 
c'est un truc qui n'est pas propre aux LLM, c'est juste une tendance actuelle avec les réseaux sociaux.
 
Par ex je joue à Factorio. Si tu vas sur Reddit ou YouTube, tu vois les gens faire des speedruns, débattre des meilleurs blueprint, toujours dans le but de maxxer tout. Ça m'a fait arreter le jeu.
J'ai repris une partie, je maxx rien du tout, je joue juste comme ça me vient, et je m'amuse beaucoup avec
 
Des fois faut juste y aller et faire (pour ta question sur les LLMs, à ce stade que tu prennes le stack Anthropic ou OpenAI, t'as un bon truc, je suis pas certain que ça fera une grosse difference sur ton resultat final (fais avec celui dont tu préfères le style / personalité, parce que tu vas beaucoup lire sa prose)


Je capte pas trop ton truc de réseau sociaux :D
 
J'ai Anthropic et OpenAI, donc accès aux 4 modèles cités. Avant Astra et Fable 5.1 j'utilise Opus 4.8 en orchestrateur dans Claude Code, avec Opus 5 en subagent pour un peu de code et autres (build, etc), Sol 5.6 via codex exec pour le code et Fable 5 en gate/review.
Maintenant j'ai encore plus puissant mais je sais pas comment les utiliser [:calimefrog:5] (je suis quand même passé sur Fable 5.1xghigh en orchestrateur, c'est un autre level ces trucs là)


---------------
[:dawa]
n°2542216
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 13:52:48  profilanswer
 

sligor a écrit :


Les alternatives sont souvent bien pires


Après, pour un petit projet perso, make fait le taf, mais dès qu'on arrive à des niveaux industriels, ça devient horrible, et j'utiliserais autre chose.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542217
Dion
Acceuil
Posté le 10-09-2026 à 13:52:50  profilanswer
 

XaTriX a écrit :


Je capte pas trop ton truc de réseau sociaux :D
 
J'ai Anthropic et OpenAI, donc accès aux 4 modèles cités. Avant Astra et Fable 5.1 j'utilise Opus 4.8 en orchestrateur dans Claude Code, avec Opus 5 en subagent pour un peu de code et autres (build, etc), Sol 5.6 via codex exec pour le code et Fable 5 en gate/review.
Maintenant j'ai encore plus puissant mais je sais pas comment les utiliser [:calimefrog:5] (je suis quand même passé sur Fable 5.1xghigh en orchestrateur, c'est un autre level ces trucs là)


 
Avant on faisait n'importe quoi mais on ne le savait pas car personne n'échangeait.
Maintenant on a facilement accès à ceux qui font "mieux" donc on essaie de faire la même chose et de minmaxer plein de trucs


---------------
It is not called show art
mood
Publicité
Posté le 10-09-2026 à 13:52:50  profilanswer
 

n°2542218
Jubijub
Parce que je le VD bien
Posté le 10-09-2026 à 15:21:56  profilanswer
 

Dion a écrit :


 
Avant on faisait n'importe quoi mais on ne le savait pas car personne n'échangeait.
Maintenant on a facilement accès à ceux qui font "mieux" donc on essaie de faire la même chose et de minmaxer plein de trucs


this


---------------
Jubi Photos : Flickr - 500px
n°2542219
SekYo
Posté le 10-09-2026 à 16:05:38  profilanswer
 

theShockWave a écrit :


 

Citation :

Date d'arrivée sur le forum : 26/04/2005


Peut-être que SekYo est mon multi et j'ai pas réalisé  [:pingouino]


J'ai lurke pas mal de temps avant de créer mon compte, les posteurs de ce topic me faisaient peur  :D

n°2542220
Xavier_OM
François Villon
Posté le 10-09-2026 à 16:07:43  profilanswer
 

Le C++ est toujours une découverte :o https://godbolt.org/z/4edjr58a9


---------------
Hommes, ici n’a point de moquerie https://www.youtube.com/watch?v=5Veri-bGRAY
n°2542221
Dion
Acceuil
Posté le 10-09-2026 à 17:15:32  profilanswer
 

https://img3.super-h.fr/images/2026/09/10/ikea.gif
 
Merci Ikea, je vois que vous maitrisez bien votre affaire, vous avez bien fait de prendre les agents IA les moins chers du marché pour votre service client  [:toph]


---------------
It is not called show art
n°2542222
Ydalb
In Crêpes n' Cidre I Trust!
Posté le 10-09-2026 à 17:21:27  profilanswer
 

Fake, c'est une capture d'écran de ta commande Dell


---------------
:o
n°2542223
Dion
Acceuil
Posté le 10-09-2026 à 17:22:35  profilanswer
 

Et revenez pas la ramener sur l'AGI, ce débat appartient au passé et Anthropic est passé à la superintelligence maintenant :  
https://img3.super-h.fr/images/2026/09/10/image.png


---------------
It is not called show art
n°2542224
masklinn
í dag viðrar vel til loftárása
Posté le 10-09-2026 à 18:18:43  profilanswer
 

Les gens qui agentisques, vous êtes à quel niveau de parano entre gatsu qui fait tourner openclaw en admin sur sa machine perso et dans un conteneur dans une vm sur le cloud?

Xavier_OM a écrit :

Le C++ est toujours une découverte :o https://godbolt.org/z/4edjr58a9


Ça me choque pas des masses, les tailles sont toutes en octets pas en bits, la taille minimum de C/C++ est 1 (même une structure vide prend 1 octet), et en bonus c'est IB et quasiment toujours `int` quand non spécifié. Si tu regardes le sizeof de ton Classic, c'est 4.

 

(techniquement avec  __attribute__((__packed__)) tu descends à 1, dans clang et GCC).

Message cité 4 fois
Message édité par masklinn le 10-09-2026 à 18:20:22

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2542225
Hermes le ​Messager
Breton Quiétiste
Posté le 10-09-2026 à 18:31:10  profilanswer
 

masklinn a écrit :

Les gens qui agentisques, vous êtes à quel niveau de parano entre gatsu qui fait tourner openclaw en admin sur sa machine perso et dans un conteneur dans une vm sur le cloud?


 
Niveau très élevé, (même sur mes projets persos).  
 
Concernant le pro, on vérifie tout et les agents n'ont jamais accès à des choses critiques en écriture. On a essentiellement du monitoring (donc du read-only par définition) (fabuleux au passage et VRAI progrès par rapport à l'ère pre-AI).
Même concernant nos outils d'analyse SQL (toujours essentiellement pour le monitoring), les agents n'ont accès qu'à une copie de la base de donnée et en lecture seule.  
Pour ce qui est de la production de code, on vérifie tout pour le moment. Et une grosse partie du code est toujours produite à la mains sur notre principal produit (on est en transition). Par contre, on va plus loin s'agissant par exemple de modules ou de choses nouvelles. Là, on est déjà à 100% du code produit par IA, mais bien sûr on vérifie tout pour le moment.


Message édité par Hermes le Messager le 10-09-2026 à 18:32:47

---------------
Expert en expertises
n°2542226
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 19:17:50  profilanswer
 

Xavier_OM a écrit :

Le C++ est toujours une découverte :o https://godbolt.org/z/4edjr58a9


 
Tiens, je me suis amusé à tester le même programme en Java, D, C++, Rust, Zig, histoire d'avoir une idée des perfs actuelles.
 
Quelques algos de tri classiques, traduits automatiquement par Claude code. J'ai commenté les plus lents en n^2
 
https://gist.github.com/NJdevPro
 
Je les ai lancés avec l'optimisation standard pour la perf sur godbolt. Et voici ce que je vois, du plus rapide au plus lent:
 
Zig,  
Rust et C++ à égalité,  
Java,  
D
 
Ca vaut ce que ça vaut. :o


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542227
flo850
moi je
Posté le 10-09-2026 à 19:25:29  profilanswer
 

masklinn a écrit :

Les gens qui agentisques, vous êtes à quel niveau de parano entre gatsu qui fait tourner openclaw en admin sur sa machine perso et dans un conteneur dans une vm sur le cloud?

 

Ça me choque pas des masses, les tailles sont toutes en octets pas en bits, la taille minimum de C/C++ est 1 (même une structure vide prend 1 octet), et en bonus c'est IB et quasiment toujours `int` quand non spécifié. Si tu regardes le sizeof de ton Classic, c'est 4.

 

(techniquement avec  __attribute__((__packed__)) tu descends à 1, dans clang et GCC).

 

relecture bien sur
pour les trucs qui se font sans acces particulier il tourne dans une VM avec pas mal de données mais sans droits root
pour les trucs un peu tricky, j'ai un hyperviseur sur lequel il a la main pour déployer des VMs au besoin + une VM ou il est root (notamment pour des question d'accès aux logs )


Message édité par flo850 le 10-09-2026 à 19:25:42

---------------

n°2542228
Flaie
Posté le 10-09-2026 à 19:29:33  profilanswer
 

el muchacho a écrit :


 
Tiens, je me suis amusé à tester le même programme en Java, D, C++, Rust, Zig, histoire d'avoir une idée des perfs actuelles.
 
Quelques algos de tri classiques, traduits automatiquement par Claude code. J'ai commenté les plus lents en n^2
 
https://gist.github.com/NJdevPro
 
Je les ai lancés avec l'optimisation standard pour la perf sur godbolt. Et voici ce que je vois, du plus rapide au plus lent:
 
Zig,  
Rust et C++ à égalité,  
Java,  
D
 
Ca vaut ce que ça vaut. :o


Merci d'ajouter Go.

n°2542229
Xavier_OM
François Villon
Posté le 10-09-2026 à 19:37:31  profilanswer
 

el muchacho a écrit :


 
Tiens, je me suis amusé à tester le même programme en Java, D, C++, Rust, Zig, histoire d'avoir une idée des perfs actuelles.
 
Quelques algos de tri classiques, traduits automatiquement par Claude code. J'ai commenté les plus lents en n^2
 
https://gist.github.com/NJdevPro
 
Je les ai lancés avec l'optimisation standard pour la perf sur godbolt. Et voici ce que je vois, du plus rapide au plus lent:
 
Zig,  
Rust et C++ à égalité,  
Java,  
D
 
Ca vaut ce que ça vaut. :o


 
Ce genre d'exercice le problème c'est que le niveau d'expertise dans le langage peut vite changer la donne (et le niveau du compilateur aussi bien sûr) c'est vraiment pas évident d'en tirer quelque chose, ni d'en généraliser un comportement dans un gros soft (on frôle le micro-benchmark ici)


---------------
Hommes, ici n’a point de moquerie https://www.youtube.com/watch?v=5Veri-bGRAY
n°2542230
Xavier_OM
François Villon
Posté le 10-09-2026 à 19:41:47  profilanswer
 

masklinn a écrit :


Ça me choque pas des masses, les tailles sont toutes en octets pas en bits, la taille minimum de C/C++ est 1 (même une structure vide prend 1 octet), et en bonus c'est IB et quasiment toujours `int` quand non spécifié. Si tu regardes le sizeof de ton Classic, c'est 4.

 

(techniquement avec  __attribute__((__packed__)) tu descends à 1, dans clang et GCC).

 

Disons que j'en étais resté à C "the choice of type is implementation-defined, but shall be capable of representing the values of all the members." et C++ "on a aussi les enum class avec underlying type int", je n'avais pas fait gaffe que l'enum C en C++ avait une range 'logique' aussi subtile (je mets logique car en effet derrière c'est souvent un int)

 

Du coup c'est marrant de monter la valeur de B à 4 (3 bits) ou de passer A à -1 (signed) pour voir la range logique bouger à [-4, 3]  :D


Message édité par Xavier_OM le 10-09-2026 à 19:43:16

---------------
Hommes, ici n’a point de moquerie https://www.youtube.com/watch?v=5Veri-bGRAY
n°2542231
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 19:52:45  profilanswer
 

Flaie a écrit :


Merci d'ajouter Go.


Done. :o
C'est quel compilateur et quelles options de compile ?

 

Avec gc 1.26 pour x86-64, sans option, c'est très rapide, je dirais comparable à Java. L'assembleur est très lisible.

Message cité 1 fois
Message édité par el muchacho le 10-09-2026 à 19:58:31

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542232
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 19:57:27  profilanswer
 

Xavier_OM a écrit :


Ce genre d'exercice le problème c'est que le niveau d'expertise dans le langage peut vite changer la donne (et le niveau du compilateur aussi bien sûr) c'est vraiment pas évident d'en tirer quelque chose, ni d'en généraliser un comportement dans un gros soft (on frôle le micro-benchmark ici)


Oui je sais bien, mais quand je fais ce genre de truc, je cherche pas à exploiter des trucs comme le SIMD (encore que pour le tri, c'est difficilement exploitable), mais à coder comme je le ferais normalement dans le langage. Je laisse les experts optimiser la librairie standard. En général je privilégie la clarté du code, et le compilateur s'en sort mieux dans les optimisations. Là, les algos sont suffisamment simples pour que le compilo fasse son taf. Ca donne une idée de l'ordre de grandeur à attendre dans des conditions normales.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542233
Flaie
Posté le 10-09-2026 à 20:04:09  profilanswer
 

el muchacho a écrit :


Done. :o
C'est quel compilateur et quelles options de compile ?
 
Avec gc 1.26 pour x86-64, sans option, c'est très rapide, je dirais comparable à Java. L'assembleur est très lisible.


where repo ? quel archi tu as ?

Message cité 1 fois
Message édité par Flaie le 10-09-2026 à 20:05:18
n°2542234
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 20:24:14  profilanswer
 

Flaie a écrit :


where repo ? quel archi tu as ?


Je balance tout ça sur Godbolt. Pas envie d'installer tous les compilateurs sur ma machine (windows).


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542235
Flaie
Posté le 10-09-2026 à 20:32:10  profilanswer
 

el muchacho a écrit :


Je balance tout ça sur Godbolt. Pas envie d'installer tous les compilateurs sur ma machine (windows).


si archi amd64
GOAMD64=v3 (ou v4) CGO_ENABLED=0  
 
si arm64 ca dépends du cpu pour la valeur de GOARM64
 
tu peux aussi faire un pprof et le nommer default.pgo et tu relances un go build  
 
mais peut être pas sur godbolt

n°2542236
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 20:41:46  profilanswer
 

Flaie a écrit :


si archi amd64
GOAMD64=v3 (ou v4) CGO_ENABLED=0

 

si arm64 ca dépends du cpu pour la valeur de GOARM64

 

tu peux aussi faire un pprof et le nommer default.pgo et tu relances un go build

 

mais peut être pas sur godbolt


Je ne connais pas l'archi de Godbolt. On ne sait même pas si leur réseau de serveurs est homogène ou hétérogène, on part dans l'hypothèse qu'ils sont homogènes. Du coup les résultats d'une seule exécution ne sont pas représentatifs, il faut en balancer plusieurs pour avoir une idée. Donc je laisse le compilo sélectionner l'archi du binaire.
Je me contente de O2 pour gcc , -O pour rustc, -O ReleaseFast pour Zig.

 

Mais si tu veux essayer sur ta machine, tu peux récupérer le code.
PS: c'est zig 0.15.2, la 0.16 a complètement changé la lib std, le changement est lourdingue et godbolt fait un SIGKILL à l'exécution.


Message édité par el muchacho le 10-09-2026 à 20:47:59

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542237
Flaie
Posté le 10-09-2026 à 20:44:05  profilanswer
 

Ok donc c'est bancal :o

n°2542238
Hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 10-09-2026 à 20:50:29  profilanswer
 

masklinn a écrit :

Les gens qui agentisques, vous êtes à quel niveau de parano entre gatsu qui fait tourner openclaw en admin sur sa machine perso et dans un conteneur dans une vm sur le cloud?

 

Mon Claude perso a accès à mon dépôt GitHub perso, il écrit directement sans supervision et déploie sur mon cloudflare.

 

Mon agent pro est en mode yolo, il a le droit de faire de façon autonome tout ce que je peux faire : lignes de commande (donc accès indirect à la prod, la stack prod demande en général un second humain pour approuver), approuver ou soumettre des PR, et accès complet à internet et à ma machine virtuelle.

Message cité 1 fois
Message édité par Hephaestos le 10-09-2026 à 21:05:46
n°2542239
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 20:51:04  profilanswer
 

Flaie a écrit :

Ok donc c'est bancal :o


ça vaut ce que ça vaut, comme j'ai dit [:spamafote]


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542240
Flaie
Posté le 10-09-2026 à 20:55:22  profilanswer
 

el muchacho a écrit :


ça vaut ce que ça vaut, comme j'ai dit [:spamafote]


Pour info Opus dit que ton impl est pas bonne, prob dans merge et shell sort, et tu peux éviter des allocations.

n°2542241
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 21:20:29  profilanswer
 

Flaie a écrit :


Pour info Opus dit que ton impl est pas bonne, prob dans merge et shell sort, et tu peux éviter des allocations.


Qu'est-ce qu'il dit précisément ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542242
Flaie
Posté le 10-09-2026 à 21:22:43  profilanswer
 

Sur mon Mac Mini M4 Pro.
 
ton gist

Shell Sort time (ms)    : 101
Merge Sort time (ms)    : 66
Heap Sort time (ms)     : 88
QuickSort time (ms)     : 51


 
celui d'Opus

Shell Sort time (ms)    : 82
Merge Sort time (ms)    : 51
Heap Sort time (ms)     : 77
QuickSort time (ms)     : 51


 
Ce qui est invalide dans l'implémentation originale

  • Merge sort faux : dans merge(), la dernière boucle (reste de la moitié droite) oublie k++. Les éléments restants sont tous écrits au même indice et le tableau final n'est pas trié. Vérifié sur 1M d'éléments : slices.IsSorted renvoie false. Le temps affiché mesure donc un tri incorrect.
  • Shell sort partiellement faux : la suite d'écarts int((gap-1)/2.25) peut passer de 2 ou 3 directement à 0, sans jamais faire la passe finale avec un écart de 1. Le tableau reste alors mal trié pour n = 4 à 7, 12 à 19, 30 à 47, etc. Ça fonctionne pour n = 1 000 000 par chance.
  • Aucune vérification des résultats pour Shell, Merge, Heap et Quick : inOrder() n'est appelé que dans les deux tris commentés, ce qui explique que le bug du merge sort soit passé inaperçu.
  • Mesure faussée : iCantBelieveItCanSort et selectionSort appellent fmt.Println(inOrder(arr)) à l'intérieur de la fonction. La vérification et l'affichage sont donc inclus dans le temps chronométré.
  • Détails : heapSort fait une dernière itération inutile avec i = 0 (swap(0, 0)). rand.Seed est obsolète depuis Go 1.20.


Ce qui a été optimisé

  • Merge sort, allocations : un seul buffer de n/2 alloué une fois, au lieu de deux slices créées à chaque appel récursif, et seule la moitié gauche est copiée avant la fusion. Sur 1M d'éléments : de ~2 millions d'allocations et 164 Mo alloués à 1 allocation et 4 Mo, de 213 ms à 139 ms.
  • Merge sort, hybride : tri par insertion sous 12 éléments et test « moitiés déjà dans l'ordre » (139 ms à 120 ms). Ces deux ajouts changent l'algorithme : à retirer pour une comparaison fidèle entre langages.
  • Heap sort : heapify écrit en boucle au lieu d'être récursif. C'est le même algorithme, mais Go n'élimine pas les appels terminaux, contrairement à GCC/Clang en -O2. Gain non mesuré.
  • main() : suppression du tableau ord, alloué pour rien, et un seul buffer de travail réutilisé (copy) au lieu d'une copie allouée par tri. On passe de 6 tableaux


Code :
  1. package main
  2. import (
  3. "fmt"
  4. "math/rand/v2"
  5. "slices"
  6. "time"
  7. )
  8. const (
  9. numElems = 1_000_000
  10. // Au-delà de cette taille, les tris en O(n²) prendraient des heures.
  11. quadraticLimit = 50_000
  12. // Sous ce seuil, le tri par insertion est plus rapide que la fusion.
  13. insertionCutoff = 12
  14. )
  15. func swap(a []int, i, j int) {
  16. a[i], a[j] = a[j], a[i]
  17. }
  18. func iCantBelieveItCanSort(a []int) {
  19. for i := 1; i < len(a); i++ {
  20.  for j := 0; j < i; j++ {
  21.   if a[i] < a[j] {
  22.    swap(a, i, j)
  23.   }
  24.  }
  25. }
  26. }
  27. func selectionSort(a []int) {
  28. n := len(a)
  29. for i := 0; i < n-1; i++ {
  30.  minIndex := i
  31.  for j := i + 1; j < n; j++ {
  32.   if a[j] < a[minIndex] {
  33.    minIndex = j
  34.   }
  35.  }
  36.  swap(a, i, minIndex)
  37. }
  38. }
  39. func insertionSort(a []int) {
  40. for i := 1; i < len(a); i++ {
  41.  key := a[i]
  42.  j := i - 1
  43.  for j >= 0 && a[j] > key {
  44.   a[j+1] = a[j]
  45.   j--
  46.  }
  47.  a[j+1] = key
  48. }
  49. }
  50. // Correction : l'ancienne suite d'écarts pouvait passer de 2 ou 3 directement
  51. // à 0, sans jamais faire la passe finale avec un écart de 1 (tableau mal trié
  52. // pour n = 4 à 7, 12 à 19, 30 à 47...). On force désormais cette dernière passe.
  53. func shellSort(a []int) {
  54. n := len(a)
  55. for gap := n / 2; gap > 0; {
  56.  for i := gap; i < n; i++ {
  57.   temp := a[i]
  58.   j := i
  59.   for j >= gap && a[j-gap] > temp {
  60.    a[j] = a[j-gap]
  61.    j -= gap
  62.   }
  63.   a[j] = temp
  64.  }
  65.  if gap == 1 {
  66.   break
  67.  }
  68.  gap = max(1, int(float64(gap-1)/2.25))
  69. }
  70. }
  71. func medianOfThree(a, b, c int) int {
  72. if (a <= b && b <= c) || (c <= b && b <= a) {
  73.  return b
  74. }
  75. if (b <= a && a <= c) || (c <= a && a <= b) {
  76.  return a
  77. }
  78. return c
  79. }
  80. func partition(a []int, low, high int) int {
  81. mid := low + (high-low)/2
  82. pivot := medianOfThree(a[low], a[mid], a[high])
  83. i := low - 1
  84. j := high + 1
  85. for {
  86.  for {
  87.   i++
  88.   if a[i] >= pivot {
  89.    break
  90.   }
  91.  }
  92.  for {
  93.   j--
  94.   if a[j] <= pivot {
  95.    break
  96.   }
  97.  }
  98.  if i >= j {
  99.   return j
  100.  }
  101.  swap(a, i, j)
  102. }
  103. }
  104. func quickSort(a []int) {
  105. if len(a) > 1 {
  106.  quickSortRange(a, 0, len(a)-1)
  107. }
  108. }
  109. func quickSortRange(a []int, low, high int) {
  110. for low < high {
  111.  pi := partition(a, low, high)
  112.  if pi-low < high-pi {
  113.   // Trie récursivement la plus petite partie
  114.   quickSortRange(a, low, pi)
  115.   // Optimisation de la récursion terminale
  116.   low = pi + 1
  117.  } else {
  118.   quickSortRange(a, pi+1, high)
  119.   high = pi
  120.  }
  121. }
  122. }
  123. // Allocations : un seul buffer de n/2 éléments pour tout le tri, au lieu de
  124. // deux slices à chaque appel récursif (~2 millions d'allocations et ~164 Mo
  125. // alloués pour 1M d'éléments dans la version d'origine).
  126. func mergeSort(a []int) {
  127. if len(a) < 2 {
  128.  return
  129. }
  130. buf := make([]int, len(a)/2)
  131. mergeSortBuf(a, buf)
  132. }
  133. func mergeSortBuf(a, buf []int) {
  134. n := len(a)
  135. if n <= insertionCutoff {
  136.  insertionSort(a)
  137.  return
  138. }
  139. mid := n / 2
  140. mergeSortBuf(a[:mid], buf)
  141. mergeSortBuf(a[mid:], buf)
  142. if a[mid-1] <= a[mid] {
  143.  return // les deux moitiés sont déjà dans l'ordre
  144. }
  145. // On ne copie que la moitié gauche : l'écriture en k ne rattrape jamais
  146. // la lecture en j, donc la moitié droite peut être lue sur place.
  147. left := buf[:mid]
  148. copy(left, a[:mid])
  149. i, j, k := 0, mid, 0
  150. for i < mid && j < n {
  151.  if left[i] <= a[j] {
  152.   a[k] = left[i]
  153.   i++
  154.  } else {
  155.   a[k] = a[j]
  156.   j++
  157.  }
  158.  k++ // correction : l'original oubliait cet incrément dans une boucle
  159. }
  160. // Les éléments restants à droite sont déjà à leur place finale.
  161. copy(a[k:], left[i:])
  162. }
  163. // Version itérative : une boucle au lieu d'un appel récursif par niveau du tas.
  164. func heapify(a []int, length, i int) {
  165. for {
  166.  largest := i
  167.  left, right := 2*i+1, 2*i+2
  168.  if left < length && a[left] > a[largest] {
  169.   largest = left
  170.  }
  171.  if right < length && a[right] > a[largest] {
  172.   largest = right
  173.  }
  174.  if largest == i {
  175.   return
  176.  }
  177.  swap(a, i, largest)
  178.  i = largest
  179. }
  180. }
  181. func heapSort(a []int) {
  182. n := len(a)
  183. // Construction du tas
  184. for i := n/2 - 1; i >= 0; i-- {
  185.  heapify(a, n, i)
  186. }
  187. // Extraction des éléments
  188. for i := n - 1; i > 0; i-- {
  189.  swap(a, 0, i)
  190.  heapify(a, i, 0)
  191. }
  192. }
  193. type sorter struct {
  194. name      string
  195. fn        func([]int)
  196. quadratic bool
  197. }
  198. func main() {
  199. // Plus besoin de rand.Seed (obsolète) : math/rand/v2 est initialisé automatiquement.
  200. arr := make([]int, numElems)
  201. for i := range arr {
  202.  arr[i] = rand.IntN(numElems) + 1
  203. }
  204. // Référence : le tri de la bibliothèque standard, qui sert aussi à vérifier
  205. // chaque résultat (valeurs identiques, pas seulement ordre croissant).
  206. ref := slices.Clone(arr)
  207. start := time.Now()
  208. slices.Sort(ref)
  209. fmt.Printf("%-24s %6d ms\n", "slices.Sort (stdlib)", time.Since(start).Milliseconds())
  210. sorters := []sorter{
  211.  {"iCantBelieveItCanSort", iCantBelieveItCanSort, true},
  212.  {"Selection Sort", selectionSort, true},
  213.  {"Insertion Sort", insertionSort, true},
  214.  {"Shell Sort", shellSort, false},
  215.  {"Merge Sort", mergeSort, false},
  216.  {"Heap Sort", heapSort, false},
  217.  {"QuickSort", quickSort, false},
  218. }
  219. // Un seul buffer de travail réutilisé, au lieu d'une copie allouée par tri.
  220. work := make([]int, numElems)
  221. for _, s := range sorters {
  222.  if s.quadratic && numElems > quadraticLimit {
  223.   fmt.Printf("%-24s ignoré (O(n²) avec n > %d)\n", s.name, quadraticLimit)
  224.   continue
  225.  }
  226.  copy(work, arr)
  227.  start := time.Now()
  228.  s.fn(work)
  229.  elapsed := time.Since(start)
  230.  status := "OK"
  231.  if !slices.Equal(work, ref) {
  232.   status = "ERREUR"
  233.  }
  234.  fmt.Printf("%-24s %6d ms  %s\n", s.name, elapsed.Milliseconds(), status)
  235. }
  236. }


Message édité par Flaie le 10-09-2026 à 21:25:17
n°2542243
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 21:24:55  profilanswer
 

Il raconte de la merde. :o

Spoiler :

Non mais kesskidi ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2542244
Flaie
Posté le 10-09-2026 à 21:25:32  profilanswer
 

Voir au dessus j'ai edith

n°2542245
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 21:31:23  profilanswer
 
n°2542246
Flaie
Posté le 10-09-2026 à 21:33:21  profilanswer
 

On veut donc le resultat godbolt desormais

n°2542247
Flaie
Posté le 10-09-2026 à 21:34:24  profilanswer
 

Et vite je vais bientot me coucher :o

n°2542248
el muchach​o
Comfortably Numb
Posté le 10-09-2026 à 21:35:53  profilanswer
 

Flaie a écrit :

Et vite je vais bientot me coucher :o


Ben comme t'as l'abo à Opus, fais les traductions. :o


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  27343  27344  27345  ..  27401  27402  27403  27404  27405  27406

Aller à :
Ajouter une réponse
 

Sujets relatifs
Plus de sujets relatifs à : [blabla@olympe] Le topic du modo, dieu de la fibre et du monde


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)