Bon, je me reponds à moi même pour préciser que la spec a quand même un intérêt pour faire du code performant. Il faut avoir une idée de la taille des cache et tout ça. Mais c'est inutile pour éviter les undefined behaviour.
Undefined behavior ça corresponds a une interdiction dans le code de la route. Tu pourras tant que tu veux dire a l'agent qui t'arrête après avoir rouler à 180 km/h ou brûler un feu rouge, que tu as étudié le manuel de ta voiture et que il n'y avait personne, mais tu te prendra quand même une amande.
Je vais avoir besoin de savoir ce que tu appelle programme un peu complexe et aussi d'exemple d'undefined behavior qu'on ne peut éviter.
Un programme un peu complexe c'est à dire tout programme un peu plus utile que hello world.
Et des undefined behavior c'est, par exemple, overflow de signed integer, ou déréférence d'un pointeur invalide, ou un cast sur un mauvais type, ou une data race.
Il me semble que les undefined behavior du C correspondent à des cas très précis et le plus souvent documenté par l'implémentation.
Ne pas confondre « undefined behavior » et « implementation defined behavior ».
Si tu fait du C, la spec du hardware n'a aucun intérêt, sauf si tu utilise des extension genre asm ou autre intrinsics. Et en particulier, si tu crois que la spec du hardware rends les undefined behavior prévisible, tu fait une belle erreur.
Rust à aussi ses chances en temps que language d'assembleur de haut niveau.
Le C est en effet un langage très simple (mais difficile à maitriser).
"simple" n'est pas très objectif, et est aussi assez limitant. D'ailleurs, le brainfuck est encore plus "simple" (et difficile à maitriser). Pourtant il ne prendra jammais la place du C.
Peu de mots clés
Rust a moins de mot clés que C (35 mot clé en Rust, 44 en C)
abstraction très légère
Pareil pour Rust.
norme peu contraignante laissant de grandes libertés aux compilateurs […]
Mais rends la tâche du programmeur extrêmement difficile car il est quasiment impossible de faire un programme un peu complexe qui n'a pas une « undefined behavior ».
Tout cela permet en C d'être facile à porter sur une nouvelle architecture matérielle
En effet. Mais comme il a été déjà dit, écrire un frontend pour LLVM n'est pas très dificile non plus.
Je suis plutôt d'accord avec toi, mais le commentaire auquel je répondait semble utiliser le terme "modèles de programmation parallèle" pour dire api de haut niveau, telle que les go-routines ou map réduce. d'où les guillemets.
Ironiquement, je pense qu'il est plus facile de débugger du code C++ concurrent, car data race = UB, et donc généralement ça veut dire « on laisse le matériel sous-jacent se débrouiller », alors qu'en Java par exemple, c'est plus subtil, et potentiellement le compilateur a fait des trucs pas cool (aka « des optimisations » — qui sont légales hein).
Sur ce point je ne suis pas d'accord.
UB en C++ veux aussi dire que le compilateur peut faie n'importe quoi.
Les "modèles de programmation parallèle" simplifient un peu les choses, mais ça n'enlève pas le risque de data-races sur les données partagées.
Par ailleurs, en rust, Tu n'est pas non plus encourager à utiliser des thread directement. Tu utilise une des API de la librairie standard ou des différentes crate qui exposent des abstractions.
Tu remplaces new par make_unique, et tu n'as plus besoin de delete.
Quand tu passe ton pointeur à une fonction qui prends un raw pointer et qui garde l'ownership, utilise my_ptr.release().
Bien sûr que si, on peut. Il suffit d'écrire unsafe { ... }, et tu peux faire tout les truc « sales » que tu veux. C'est bien ça la force de rust: par défaut le compilateur vérifie, mais quand tu es sur de ce que tu fait, tu peux utiliser unsafe.
il ne peut plus vérifier et on perd l'intérêt du langage
On ne perd pas l'intérêt du langage car on peut limiter les zones unsafe à quelques primitives de base (par exemple CurrentFrameAllocator, CurrentFrameBox<T>) qui est reviewé avec plus d'attention, alors que la plupart du code reste en safe.
En même temps, quel rapport entre le ciel à Pékin, et la production de Bitcoin, dont les mineurs sont supposé être situer à coté des centrale hydroéléctrique, hors des villes.
Non, la sécurité viens du fait qu'on peut difficilement contrôler la majorité de la puissance de calcul.
Contrôler les majorité des nœuds c'est facile, il suffit d'en lancer des milliers dans une VM : https://fr.wikipedia.org/wiki/Attaque_Sybil
En effet, le CDATA est nécessaire en XHTML et permet à ce que le fichier soit quand même valide XML malgré le fait que le contienne des caractères tels que '<' ou '&'
Il semblerait que ce journal soit une fake news.
Déjà, il n'y a pas de srouce. Mais en cherchant un peu, on tombe sur un article publié récament sur ce site même: https://linuxfr.org/users/joalland/journaux/enigme-la-mouche-zobzob qui est en fait juste un exercice avec une histoire vraisemblablement purement fictive.
J'en déduit que la mouche Zobzob n'existe pas. Pas plus que le Fly Highschool Institute. Cet article est donc encore l'une des nombreux fake news juste destiné à attirer nos clics.
Comme toujours, faites attentions à ce que vous pouvez lire sur internet !
Bien sûr, mais le processeur ne peut pas exécuter une opération (par exemple "ADD x, y") quand il n'a pas les données correspondantes (x et y)
Tout ne peux pas être éxécuter dans n'importe quel ordre. Je réagissait au fait que tu disait que « Le ré-ordonnancement est une optimisation importante du compilateur », alors que dans le contexte du message auquel tu réponds, ce n'est pas le compilateur, mais le CPU qui ré-ordonne.
le contraire de quoi
Le contraire du fait que les compilateurs doivent ordonnés les instructions dans le bon sans pour aider le CPU. (Mais c'est vrai que le compilateur à quand même encore des possibilité d'optimisations.)
alors le processeur serait obligé d'attendre la fin des instructions « charger » avant les instructions « utiliser » correspondantes.
Non, les processeurs font plein d'opérations en parallèle et ré-ordonne les instructions pour pouvoir les exécuter plus vite. (parfois même de manière spéculative)
En fait c'est le contraire: On utilise les opération atomique pour dire au compilateur d'introduire des barrières dans le code pour que le processeur ne ré-ordonne pas ces opérations.
[^] # Re: arf
Posté par Gof (site web personnel) . En réponse au journal Nouveau coup de tonnerre attendu. Évalué à 3.
https://fr.wikipedia.org/wiki/Google_Fuchsia
[^] # Re: C’est bat !
Posté par Gof (site web personnel) . En réponse au journal softs dev en Rust empaqueté pour Ubuntu & cie. Évalué à 6.
N'oublies pas l'option
-R
de less pour les couleurs.Perso, j'ai dans mon bashrc:
[^] # Re: Aucun !
Posté par Gof (site web personnel) . En réponse au journal Go et Rust, lequel est le remplaçant du C ?. Évalué à 2. Dernière modification le 11 septembre 2018 à 23:22.
Bon, je me reponds à moi même pour préciser que la spec a quand même un intérêt pour faire du code performant. Il faut avoir une idée de la taille des cache et tout ça. Mais c'est inutile pour éviter les undefined behaviour.
Undefined behavior ça corresponds a une interdiction dans le code de la route. Tu pourras tant que tu veux dire a l'agent qui t'arrête après avoir rouler à 180 km/h ou brûler un feu rouge, que tu as étudié le manuel de ta voiture et que il n'y avait personne, mais tu te prendra quand même une amande.
[^] # Re: Aucun !
Posté par Gof (site web personnel) . En réponse au journal Go et Rust, lequel est le remplaçant du C ?. Évalué à 5.
Un programme un peu complexe c'est à dire tout programme un peu plus utile que hello world.
Et des undefined behavior c'est, par exemple, overflow de signed integer, ou déréférence d'un pointeur invalide, ou un cast sur un mauvais type, ou une data race.
Ne pas confondre « undefined behavior » et « implementation defined behavior ».
Si tu fait du C, la spec du hardware n'a aucun intérêt, sauf si tu utilise des extension genre
asm
ou autre intrinsics. Et en particulier, si tu crois que la spec du hardware rends les undefined behavior prévisible, tu fait une belle erreur.À lire: http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html
[^] # Re: Aucun !
Posté par Gof (site web personnel) . En réponse au journal Go et Rust, lequel est le remplaçant du C ?. Évalué à 10.
Rust à aussi ses chances en temps que language d'assembleur de haut niveau.
"simple" n'est pas très objectif, et est aussi assez limitant. D'ailleurs, le brainfuck est encore plus "simple" (et difficile à maitriser). Pourtant il ne prendra jammais la place du C.
Rust a moins de mot clés que C (35 mot clé en Rust, 44 en C)
Pareil pour Rust.
Mais rends la tâche du programmeur extrêmement difficile car il est quasiment impossible de faire un programme un peu complexe qui n'a pas une « undefined behavior ».
En effet. Mais comme il a été déjà dit, écrire un frontend pour LLVM n'est pas très dificile non plus.
[^] # Re: Les avantages de C++ ne sont pas bien différentes avec Rust
Posté par Gof (site web personnel) . En réponse à la dépêche Faut‐il continuer à apprendre le C++ ?. Évalué à 4. Dernière modification le 14 août 2018 à 23:13.
Il suffit de recruter un programmeur C ou C++ et de le faire coder en Rust. Il s'adaptera assez vite.
[^] # Re: Rust et SIMD
Posté par Gof (site web personnel) . En réponse à la dépêche Faut‐il continuer à apprendre le C++ ?. Évalué à 2.
Je suis plutôt d'accord avec toi, mais le commentaire auquel je répondait semble utiliser le terme "modèles de programmation parallèle" pour dire api de haut niveau, telle que les go-routines ou map réduce. d'où les guillemets.
Sur ce point je ne suis pas d'accord.
UB en C++ veux aussi dire que le compilateur peut faie n'importe quoi.
[^] # Re: La section "LIENS" est faite pour ça...
Posté par Gof (site web personnel) . En réponse au journal Pollution numérique. Évalué à 7.
La rubrique « liens », c'est de la pollution numérique.
[^] # Re: Rust et SIMD
Posté par Gof (site web personnel) . En réponse à la dépêche Faut‐il continuer à apprendre le C++ ?. Évalué à 6.
Les "modèles de programmation parallèle" simplifient un peu les choses, mais ça n'enlève pas le risque de data-races sur les données partagées.
Par ailleurs, en rust, Tu n'est pas non plus encourager à utiliser des thread directement. Tu utilise une des API de la librairie standard ou des différentes crate qui exposent des abstractions.
[^] # Re: La question est où et comment apprendre le C++
Posté par Gof (site web personnel) . En réponse à la dépêche Faut‐il continuer à apprendre le C++ ?. Évalué à 8.
Tu remplaces new par make_unique, et tu n'as plus besoin de delete.
Quand tu passe ton pointeur à une fonction qui prends un raw pointer et qui garde l'ownership, utilise my_ptr.release().
[^] # Re: All hail to Rust
Posté par Gof (site web personnel) . En réponse au journal Ready At Dawn passe à Rust. Évalué à 8.
Bien sûr que si, on peut. Il suffit d'écrire
unsafe { ... }
, et tu peux faire tout les truc « sales » que tu veux. C'est bien ça la force de rust: par défaut le compilateur vérifie, mais quand tu es sur de ce que tu fait, tu peux utiliserunsafe
.On ne perd pas l'intérêt du langage car on peut limiter les zones unsafe à quelques primitives de base (par exemple
CurrentFrameAllocator
,CurrentFrameBox<T>
) qui est reviewé avec plus d'attention, alors que la plupart du code reste en safe.# Je la conaissait avec des sages sales dans un train
Posté par Gof (site web personnel) . En réponse au journal [Énigme] Vœu de silence et épidémie. Évalué à 2.
Je la conaissait avec des sages sales dans un train:
https://web.archive.org/web/20130919012100/http://linux-sottises.net/math.php
[^] # Re: Quel est vraiment la nature du problème ?
Posté par Gof (site web personnel) . En réponse au journal Mise à jour Mageia: attention danger. Évalué à 3.
Qt 5.6 est une version LTS, maintenue jusqu'en 2019
https://en.wikipedia.org/wiki/Qt_version_history#Qt_5
[^] # Re: La poutre et l'oeil
Posté par Gof (site web personnel) . En réponse au journal Le Bitcoin va-t-il détruire la planète ? Contre‐point. Évalué à 1.
En même temps, quel rapport entre le ciel à Pékin, et la production de Bitcoin, dont les mineurs sont supposé être situer à coté des centrale hydroéléctrique, hors des villes.
[^] # Re: preuve de travail
Posté par Gof (site web personnel) . En réponse au journal Le Bitcoin va-t-il détruire la planète ? Contre‐point. Évalué à 6.
Non, la sécurité viens du fait qu'on peut difficilement contrôler la majorité de la puissance de calcul.
Contrôler les majorité des nœuds c'est facile, il suffit d'en lancer des milliers dans une VM : https://fr.wikipedia.org/wiki/Attaque_Sybil
# Est-ce bien légal tout ça ?
Posté par Gof (site web personnel) . En réponse au journal Télécharger tous les fichiers PDF d’un site web. Évalué à 10.
Attention, Certains ce sont fait arrêter pour ce genre de choses.
https://fr.wikipedia.org/wiki/Aaron_Swartz#Affaire_JSTOR
# htop
Posté par Gof (site web personnel) . En réponse à la dépêche Des alternatives à grep, ls et find. Évalué à 10.
Une autre alternative que j'utilise c'est
htop
au lieu detop
[^] # Re: CDATA
Posté par Gof (site web personnel) . En réponse au journal HeartTempo, le cardiofréquencemètre du pauvre qui a quand même un accès Internet. Évalué à 2.
En effet, le CDATA est nécessaire en XHTML et permet à ce que le fichier soit quand même valide XML malgré le fait que le contienne des caractères tels que '<' ou '&'
# Attention Fake news!
Posté par Gof (site web personnel) . En réponse au journal Bronsonisation de la mouche zobzob. Évalué à 10.
Il semblerait que ce journal soit une fake news.
Déjà, il n'y a pas de srouce. Mais en cherchant un peu, on tombe sur un article publié récament sur ce site même: https://linuxfr.org/users/joalland/journaux/enigme-la-mouche-zobzob qui est en fait juste un exercice avec une histoire vraisemblablement purement fictive.
J'en déduit que la mouche Zobzob n'existe pas. Pas plus que le Fly Highschool Institute. Cet article est donc encore l'une des nombreux fake news juste destiné à attirer nos clics.
Comme toujours, faites attentions à ce que vous pouvez lire sur internet !
# Bronsonisation ?
Posté par Gof (site web personnel) . En réponse au journal Bronsonisation de la mouche zobzob. Évalué à 10.
Qu'est-ce que ça veux dire Bronsoniser ?
Je suis nouveau sur ce site, désolé si ça a déjà été répondu.
[^] # Re: Grammaire
Posté par Gof (site web personnel) . En réponse à la dépêche C++17 adapte le static_assert() aux usages. Évalué à 5.
En même temps, il n'envoie pas non plus ceux qui font des fautes dans des camps de torture avec peu de chance de survie.
[^] # Re: Réordonnancement étrange...
Posté par Gof (site web personnel) . En réponse à la dépêche De la nécessité d’adopter les opérations atomiques C11 ?. Évalué à 2.
Permet moi d'être en désacord sur les détails.
Bah non justement, un appel à une fonction d'une bibliothèque est déjà une barrière complète pour le compilateur. Mais pas pour le CPU.
Par contre, si ce n'était qu'un problème de ré-ordonnancement par le compilateur, la gestion à coup de
volatile
suffirait.[^] # Re: Réordonnancement étrange...
Posté par Gof (site web personnel) . En réponse à la dépêche De la nécessité d’adopter les opérations atomiques C11 ?. Évalué à 2.
Tout ne peux pas être éxécuter dans n'importe quel ordre. Je réagissait au fait que tu disait que « Le ré-ordonnancement est une optimisation importante du compilateur », alors que dans le contexte du message auquel tu réponds, ce n'est pas le compilateur, mais le CPU qui ré-ordonne.
Le contraire du fait que les compilateurs doivent ordonnés les instructions dans le bon sans pour aider le CPU. (Mais c'est vrai que le compilateur à quand même encore des possibilité d'optimisations.)
[^] # Re: Réordonnancement étrange...
Posté par Gof (site web personnel) . En réponse à la dépêche De la nécessité d’adopter les opérations atomiques C11 ?. Évalué à 3.
Non, les processeurs font plein d'opérations en parallèle et ré-ordonne les instructions pour pouvoir les exécuter plus vite. (parfois même de manière spéculative)
En fait c'est le contraire: On utilise les opération atomique pour dire au compilateur d'introduire des barrières dans le code pour que le processeur ne ré-ordonne pas ces opérations.
[^] # Re: static / constexpr
Posté par Gof (site web personnel) . En réponse à la dépêche C++17 adapte le static_assert() aux usages. Évalué à 4. Dernière modification le 02 mars 2018 à 15:02.
´using´ aussi:
Ce code est strictement equivalent à tes typedef. Et c'est pour ça que arnaudus avançait qu'ils était synonymes
Et P.S: il n'y a aucune spécialisation dans ton exemple. (La spécialisation est si tu faisait un truc du genre