Auteur Sujet: Programmation : Le GOTO c'est le maaaaaaal  (Lu 50598 fois)

0 Membres et 1 Invité sur ce sujet

corrector

  • Invité
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #48 le: 06 mars 2015 à 22:39:06 »
Qu'est ce que ça à avoir avec la performance le fait que les chaînes soient terminées par NULL ?
Là on voit que tu n'y connais vraiment rien.

Une structure de donnée terminée par un symbole spécial doit être parcourue en entier juste pour déterminer sa taille.

C'est du fait seul que le type string n'existe pas en en C ANSI.
Non, c'est du fait que c'est plus simple pour le programmeur! Sinon il faudrait se balader avec deux pointeurs! Ou un pointeur et un entier! Comme memxxxx! Et oui! Réveille-toi!

A la place on fait appel à la logique des pointeurs.

Pour les E/S il y a plusieurs façons de faire, soit en passant par les bibliothèques C, soit en passant directement par les primitives systèmes... Et quoi qu'il en soit, à moins de programmer au niveau même du noyau j'imagine, il y aura toujours un problème de performances vu qu'il s'agit d'interruptions système.
Absolument n'importe quoi, ça aucun rapport avec les interruptions. Quels interruptions en fait?

Il n'y avait nulle référence à ADA dans son post. La comparaison était par rapport aux langages plus haut niveau qu'on a cité tous deux.
Je fais des comparaisons.

Tu n'es pas assez compétent pour voir un rapport. Trop "complexe" pour toi, laisse tomber!

Il y a évidemment plus bas niveau que le C... Tout ce qui est programmation en assembleur par exemple. Mais çà n'occulte pas qu'on est en dessous du C# ou Java.
Java est basé sur le C?

En tout cas, dans un contexte de très faible mémoire ou de temps réel j'ai pas souvenir d'avoir vu ces derniers privilégiés au C.
Tu n'as pas vu grand chose dans ta vie.
« Modifié: 07 mars 2015 à 00:58:29 par corrector »

corrector

  • Invité
Le GOTO c'est mal
« Réponse #49 le: 06 mars 2015 à 22:46:21 »
Beuh, le goto est la base de toute programmation (ou presque) : faire des sauts.

goto == if == while == for == function : c'est un jmp
Je sais pas de quel goto tu parles, mais en C le goto c'est à l'intérieur d'une fonction!

corrector

  • Invité
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #50 le: 06 mars 2015 à 22:51:43 »
+1 avec BadMax...

Bon allez c'est trolldi donc je me lâche... Si en même temps vous utilisez des langages du moyen-âge... Bizarrement en C# j'ai jamais ressenti le besoin d'utiliser de GOTO d'aucune sorte.
Tu peux me montrer comment tu fais une simple recherche d'une valeur négative dans un tableau, avec retour de l'index de la première valeur?

corrector

  • Invité
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #51 le: 06 mars 2015 à 22:55:59 »
Si goto est le mal, alors qu'est-ce qu'on doit dire de setjmp() et longjmp() ?
L'antéchrist?

corrector

  • Invité
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #52 le: 06 mars 2015 à 22:57:00 »
C'est rigolo, quand j'avais suivi une pseudo formation AFPA en 2006/2007, le formateur insistait lourdement sur le fait qu'il ne fallait jamais utiliser de GOTO.
Donner des conseils négatifs, on fait difficilement plus crétin.

Dommage que tu n'ai pas demandé ce qu'il fallait utiliser.

jack

  • Professionnel des télécoms
  • *
  • Messages: 1 674
  • La Madeleine (59)
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #53 le: 06 mars 2015 à 23:17:47 »
Citation de: corrector
C n'est pas du tout un langage adapté ni pour être proche du matériel (voir le merdier du C dans les parties proche du matériel de linux) ni pour être efficace. D'ailleurs être efficace et être de bas niveau sont des objectifs incompatibles pour un langage de programmation primaire comme le C.
Il peut intégrer de l'assembleur et dispose d'un accès rapide aux zones mémoires, il est donc plus proche que la majorité des merdes^Wlangages "qui rosk"

Citation de: corrector
Le C est très difficilement optimisable. Il n'a pas été conçu pour être optimisable. Et quand un compilateur décide de s'amuser à vraiment optimiser il casse énormèment de code, voir linux par exemple. La "sémantique" est un vrai merdier.
Exemple ?

Citation de: corrector
Oui parce que goto est l'opération élèmentaire qui défini les "structures" de la soi-disant programmation structurée.
Exactement !
(pourquoi "soi-disant" ? tu peux développer ?)

Citation de: corrector
Là on voit que tu n'y connais vraiment rien.

Une structure de donnée terminée par un symbole spécial doit être parcourue en entier juste pour déterminer sa taille.
Boarf, pas la peine d'être méchant hein ?
char* n'est pas une chaine, c'est un tableau de caractère. Si le dernier caractère est \0, alors ce tableau peut-être analysé comme un chaine par les fonctions standards de manipulation desdites chaines. Sinon, overflow en cas d'essai;
Si tu veux manipuler un tableau comme un chaine, de facto, le NULL final n'est pas efficace, tu devrais donc faire une structure pour ajouter le nombre de caractère de la chaine;

Citation de: corrector
Absolument n'importe quoi, ça aucun rapport avec les interruptions. Quels interruptions en fait?
Oui, c'est n'importe quoi (parcque les IO font toujours appels à des syscall, quel que soit le langage utilisé, en userspace).
En revanche, cela a tout à voir avec les interruptions.

Rappel de "comment faire un syscall":
- remplir les registres avec les paramètres, valeur de retour, type etc du syscall
- utiliser l'assembleur "int"

C'est "coûteux" du fait d'un changement de contexte, mais pas scandaleux et surtout nécessaire;

Citation de: corrector
Je sais pas de quel goto tu parles, mais en C le goto c'est à l'intérieur d'une fonction!
Ouais, ce n'est pas le même mot clé (longjmp ou un truc du genre pour les goto "globaux"), cela ne change en rien la nature de la chose;

corrector

  • Invité
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #54 le: 06 mars 2015 à 23:34:37 »
Il peut intégrer de l'assembleur et dispose d'un accès rapide aux zones mémoires, il est donc plus proche que la majorité des merdes^Wlangages "qui rosk"
N'importe quel langage peut proposer un accès aux zones mémoires, même BASIC (peek).

Boarf, pas la peine d'être méchant hein ?
Si, quand on m'agresse ça vaut la peine!

Oui, c'est n'importe quoi (parcque les IO font toujours appels à des syscall, quel que soit le langage utilisé, en userspace).
En revanche, cela a tout à voir avec les interruptions.

Rappel de "comment faire un syscall":
- remplir les registres avec les paramètres, valeur de retour, type etc du syscall
- utiliser l'assembleur "int"
Tu décris juste une implèmentation possible sur un CPU donné. Un cas particulier donc.

C'est "coûteux" du fait d'un changement de contexte, mais pas scandaleux et surtout nécessaire;
Pas forcèment. Il y a aussi le mappage mémoire.

corrector

  • Invité
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #55 le: 06 mars 2015 à 23:45:47 »
Citation de: corrector
Oui parce que goto est l'opération élèmentaire qui défini les "structures" de la soi-disant programmation structurée.
(pourquoi "soi-disant" ? tu peux développer ?)
De quelle "structuration" on parle?

La sémantique d'un bloc d'instruction c'est exécution la première instruction, déplacer le pointeur d'instruction et continuer avec le reste. Et de temps en temps, déplacer le pointeur d'instruction.

La programmation impérative est fondamentalement une manipulation du pointeur d'instruction. On peut essayer de maquiller ça un peu mais c'est du flan, on en revient toujours à ça.

L'absence de goto est un goto implicite à l'instruction suivante.

Quand on décrit la sémantique d'un langage, on a le vrai truc sans fard, sans artifices.

corrector

  • Invité
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #56 le: 06 mars 2015 à 23:49:56 »
C'est "coûteux" du fait d'un changement de contexte, mais pas scandaleux et surtout nécessaire;
Pardon mais tu racontes n'importe quoi!

C'est nécessaire uniquement quand tu as besoin immédiatement d'une information (cette information peut être "void" ou "unit" : une information vide qui indique qu'une opération est terminée).

Pour les write de toute façon le fait que write retourne une valeur indique juste que de la place a été trouvée dans un tampon ou un cache pour écrire les données. Elles n'ont encore été envoyées nul part (sauf cas particulier).

Donc un "changement de contexte" (ou changement de quoi que ce soit) n'est pas du tout nécessaire.
« Modifié: 07 mars 2015 à 00:49:12 par corrector »

corrector

  • Invité
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #57 le: 06 mars 2015 à 23:56:18 »
Ouais, ce n'est pas le même mot clé (longjmp ou un truc du genre pour les goto "globaux"), cela ne change en rien la nature de la chose;
Absolument n'importe quoi!

longjmp n'a vraiment rien à voir avec goto.

Je ne sais pas si ça vaut le coup d'expliquer tellement c'est évident quand on a la moindre idée de ce que fait longjmp : aller au point mémorisé par setjmp dans une fonction active en sautant les fonctions intermédiaires, et restaurer peut être la valeur des variables locales ou peut être pas.

Donc tout est différent de goto!

Mélanger les deux n'a rigoureusement aucun sens!

jack

  • Professionnel des télécoms
  • *
  • Messages: 1 674
  • La Madeleine (59)
Programmation : Le GOTO c'est le maaaaaaal
« Réponse #58 le: 07 mars 2015 à 00:04:08 »
Citation de: corrector
N'importe quel langage peut proposer un accès aux zones mémoires, même BASIC (peek).
Tu peux m'apprendre comment faire avec un langage de script, genre php ou Python ? Ou javascript ?  ;D
Non pas que je doute de ce que tu avances, juste que je suis curieux de savoir !
Donc j'aimerais bien que tu peux donne du code qui, pour un offset donné, me donne ce qui est écrit à cet endroit;

Citation de: corrector
Tu décris juste une implèmentation possible sur un CPU donné. Un cas particulier donc.
Mon man 2 syscall me dit que mon cas particulier est massivement général :

Citation de: man 2 syscall
       Every architecture has its own way of invoking and passing arguments to
       the kernel.  The details for various architectures are  listed  in  the
       two tables below.

       The  first  table  lists  the  instruction used to transition to kernel
       mode, (which might not be the fastest or best way to transition to  the
       kernel,  so  you  might have to refer to vdso(7)), the register used to
       indicate the system call number, and the register used  to  return  the
       system call result.

       arch/ABI   instruction          syscall #   retval Notes
       ───────────────────────────────────────────────────────────────────
       arm/OABI   swi NR               -           a1     NR is syscall #
       arm/EABI   swi 0x0              r7          r0
       blackfin   excpt 0x0            P0          R0
       i386       int $0x80            eax         eax
       ia64       break 0x100000       r15         r10/r8 bool error/
                                                          errno value
       parisc     ble 0x100(%sr2, %r0) r20         r28
       s390       svc 0                r1          r2     See below
       s390x      svc 0                r1          r2     See below
       sparc/32   t 0x10               g1          o0
       sparc/64   t 0x6d               g1          o0
       x86_64     syscall              rax         rax

Dans tout les cas, il y a utilisation d'une instruction assembleur dédié (mais cette liste n'est pas exhaustive vas-tu répondre, certes)

Citation de: corrector
Pas forcèment. Il y a aussi le mappage mémoire.
Pardon mais tu racontes n'importe quoi!

C'est nécessaire uniquement quand tu as besoin immédiatement d'une information (cette information peut être "void" ou "unit" : une information vide qui indique qu'une opération est terminée).

Pour les write de toute façon le fait que write retourne une valeur indique juste que de la place a été trouvée dans un tampon ou un cache pour écrire les données. Elles n'ont encore été envoyées nul part (sauf cas particulier).

Donc le changement de contexte n'est pas du tout nécessaire.
Erreur : dans tout les cas, il y a entrée dans le contexte noyau, execution de code en kernelspace, retour en espace utilisateur : context switch;

Ce que tu essayes de rajouter, c'est qu'il existe des switchs plus "conservateur" que d'autres, c'est tout à fait vrai; Ça reste un switch;

Citation de: corrector
longjmp n'a vraiment rien à voir avec goto.
Hey, t'as raison, les deux mots clefs ne sont pas rigoureusement identiques !
Comme c'est toi, je vais faire un peu de mauvaise foi pour la route : ça reste un goto, au sens sémantique du terme  8)

corrector

  • Invité
Je suis énervé!
« Réponse #59 le: 07 mars 2015 à 00:19:52 »
Tu peux m'apprendre comment faire avec un langage de script, genre php ou Python ? Ou javascript ?  ;D
Tu rajoutes une API dans le navigateur qui fait juste ça.

Si quelqu'un te dit que c'est une énorme faille, tu le traites d'ignare, tu dévies la discussion sur le NAT et tu discutes des semaines sans corriger la faille. :D

Il faut bien insister que le bugtracker n'est pas un forum ou autre débilité du même style.

QUELS CONNARDS CES DEV CHROMIUM!!!!!
« Modifié: 07 mars 2015 à 00:41:33 par corrector »