Problèmes d'encoding?
Mais c'est du grand n'importe quoi, ce que tu affirmes !
Si c'est toi qui le dis.Pareil, la-aussi.
Quoi? Que le problème de l'arrêt n'est pas un problème pratique. Oui
parfaitement. Je rejoins Marc là dessus: Les problèmes non décidables ne
sont pas des problèmes pratiques dans la vie industrielle où les choses
sont finalement bien plus simples que ca.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
Juste une question bête: c'est quoi ta définition d'un prog sans bug? La
mienne est celle d'un prog fidèle aux specs. Le soucis c'est que les
specs c'est du langage +/- naturel bourré d'implicite, de non-dits, et
de choses ambigües. On attends toujours et encore une façon d'écrire
des specs qui tiennent la route par rapport à cela.
va pas planter pour cause de division par zero -> indecidable.
Indécidable dans le cas *général*, mais en pratique on ne travaille que
sur des cas particuliers. La théorie de l'indécidabilité dit qu'on ne
peut pas dire si un prog quelconque parmi tous les programmes de taille
arbitraires, bref un prog tiré au hasard ne va, par exemple, boucler.
Très bien.. mais en pratique les progs ne sont pas écrit au hasard. Ils
répondent à un cahier des charges, font des choses, et même que parfois
on impose des règles d'écriture. Par exemple interdiction d'utiliser des
while, des goto, de la récursivité, des allocations dynamiques. Seules
les boucles for() bornées en nombre de tour (les boucles "for" du
langage pascal typiquement) ne sont utilisables. Ces règles pratiques
font que dans les domaines où elles sont appliquées le pb de l'arrêt est
un truc de théoricien et pas de praticien.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
Bien entendu, ca n'est pas leur boulot. Ils ne sont pas là pour cela.
Ils sont là pour traiter des problèmes concrets, pas des trucs méta.
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
Mais on dit la même chose alors? Du coup je ne comprends pas ton "C'est
du grand n'importe quoi" initial ? Une (mauvaise) habitude de langage?En particulier, tu n'as pas de facon de dire *OKAY, LA J'AI UN ALGO
ELEMENTAIRE,J'AIMERAIS BIEN RESTER DE FACON CERTAINE DANS LA PARTIE DE L'INFORMATIQUE
SUR LAQUELLE ON SAIT RAISONNER*.
Bien sur que si. Les standards de codage existent et servent en partie à
cela. L'informatique industrielle ne traite pas de l'informatique *en
général* mais de trucs plus simples et maitrisés. Tu ne vas pas mettre
dans un ECU de portière de voiture du code qui va chercher à résoudre
une conjecture mathématique dont on ne sait pas dire si elle est
décidable ou pas.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.
Oui effectivement c'est un biais. En plus je pense que tu dois être
multi-domaine. En pratique, dans un métier la variabilité du code est
plus réduite que ce que tu vois je pense.
Problèmes d'encoding?
Mais c'est du grand n'importe quoi, ce que tu affirmes !
Si c'est toi qui le dis.
Pareil, la-aussi.
Quoi? Que le problème de l'arrêt n'est pas un problème pratique. Oui
parfaitement. Je rejoins Marc là dessus: Les problèmes non décidables ne
sont pas des problèmes pratiques dans la vie industrielle où les choses
sont finalement bien plus simples que ca.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
Juste une question bête: c'est quoi ta définition d'un prog sans bug? La
mienne est celle d'un prog fidèle aux specs. Le soucis c'est que les
specs c'est du langage +/- naturel bourré d'implicite, de non-dits, et
de choses ambigües. On attends toujours et encore une façon d'écrire
des specs qui tiennent la route par rapport à cela.
va pas planter pour cause de division par zero -> indecidable.
Indécidable dans le cas *général*, mais en pratique on ne travaille que
sur des cas particuliers. La théorie de l'indécidabilité dit qu'on ne
peut pas dire si un prog quelconque parmi tous les programmes de taille
arbitraires, bref un prog tiré au hasard ne va, par exemple, boucler.
Très bien.. mais en pratique les progs ne sont pas écrit au hasard. Ils
répondent à un cahier des charges, font des choses, et même que parfois
on impose des règles d'écriture. Par exemple interdiction d'utiliser des
while, des goto, de la récursivité, des allocations dynamiques. Seules
les boucles for() bornées en nombre de tour (les boucles "for" du
langage pascal typiquement) ne sont utilisables. Ces règles pratiques
font que dans les domaines où elles sont appliquées le pb de l'arrêt est
un truc de théoricien et pas de praticien.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
Bien entendu, ca n'est pas leur boulot. Ils ne sont pas là pour cela.
Ils sont là pour traiter des problèmes concrets, pas des trucs méta.
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
Mais on dit la même chose alors? Du coup je ne comprends pas ton "C'est
du grand n'importe quoi" initial ? Une (mauvaise) habitude de langage?
En particulier, tu n'as pas de facon de dire *OKAY, LA J'AI UN ALGO
ELEMENTAIRE,
J'AIMERAIS BIEN RESTER DE FACON CERTAINE DANS LA PARTIE DE L'INFORMATIQUE
SUR LAQUELLE ON SAIT RAISONNER*.
Bien sur que si. Les standards de codage existent et servent en partie à
cela. L'informatique industrielle ne traite pas de l'informatique *en
général* mais de trucs plus simples et maitrisés. Tu ne vas pas mettre
dans un ECU de portière de voiture du code qui va chercher à résoudre
une conjecture mathématique dont on ne sait pas dire si elle est
décidable ou pas.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.
Oui effectivement c'est un biais. En plus je pense que tu dois être
multi-domaine. En pratique, dans un métier la variabilité du code est
plus réduite que ce que tu vois je pense.
Problèmes d'encoding?
Mais c'est du grand n'importe quoi, ce que tu affirmes !
Si c'est toi qui le dis.Pareil, la-aussi.
Quoi? Que le problème de l'arrêt n'est pas un problème pratique. Oui
parfaitement. Je rejoins Marc là dessus: Les problèmes non décidables ne
sont pas des problèmes pratiques dans la vie industrielle où les choses
sont finalement bien plus simples que ca.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
Juste une question bête: c'est quoi ta définition d'un prog sans bug? La
mienne est celle d'un prog fidèle aux specs. Le soucis c'est que les
specs c'est du langage +/- naturel bourré d'implicite, de non-dits, et
de choses ambigües. On attends toujours et encore une façon d'écrire
des specs qui tiennent la route par rapport à cela.
va pas planter pour cause de division par zero -> indecidable.
Indécidable dans le cas *général*, mais en pratique on ne travaille que
sur des cas particuliers. La théorie de l'indécidabilité dit qu'on ne
peut pas dire si un prog quelconque parmi tous les programmes de taille
arbitraires, bref un prog tiré au hasard ne va, par exemple, boucler.
Très bien.. mais en pratique les progs ne sont pas écrit au hasard. Ils
répondent à un cahier des charges, font des choses, et même que parfois
on impose des règles d'écriture. Par exemple interdiction d'utiliser des
while, des goto, de la récursivité, des allocations dynamiques. Seules
les boucles for() bornées en nombre de tour (les boucles "for" du
langage pascal typiquement) ne sont utilisables. Ces règles pratiques
font que dans les domaines où elles sont appliquées le pb de l'arrêt est
un truc de théoricien et pas de praticien.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
Bien entendu, ca n'est pas leur boulot. Ils ne sont pas là pour cela.
Ils sont là pour traiter des problèmes concrets, pas des trucs méta.
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
Mais on dit la même chose alors? Du coup je ne comprends pas ton "C'est
du grand n'importe quoi" initial ? Une (mauvaise) habitude de langage?En particulier, tu n'as pas de facon de dire *OKAY, LA J'AI UN ALGO
ELEMENTAIRE,J'AIMERAIS BIEN RESTER DE FACON CERTAINE DANS LA PARTIE DE L'INFORMATIQUE
SUR LAQUELLE ON SAIT RAISONNER*.
Bien sur que si. Les standards de codage existent et servent en partie à
cela. L'informatique industrielle ne traite pas de l'informatique *en
général* mais de trucs plus simples et maitrisés. Tu ne vas pas mettre
dans un ECU de portière de voiture du code qui va chercher à résoudre
une conjecture mathématique dont on ne sait pas dire si elle est
décidable ou pas.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.
Oui effectivement c'est un biais. En plus je pense que tu dois être
multi-domaine. En pratique, dans un métier la variabilité du code est
plus réduite que ce que tu vois je pense.
In article <4c1bba4b$0$6222$,
Samuel DEVULDER wrote:Quoi? Que le problème de l'arrêt n'est pas un problème pratique. Oui
parfaitement. Je rejoins Marc là dessus: Les problèmes non décidables ne
sont pas des problèmes pratiques dans la vie industrielle où les choses
sont finalement bien plus simples que ca.
Okay, meme apres un message entier a t'expliquer pourquoi tu en as tout
le temps des problemes indecidables, tu ne les vois toujours pas ?
Juste une question bête: c'est quoi ta définition d'un prog sans bug? La
mienne est celle d'un prog fidèle aux specs. Le soucis c'est que les
specs c'est du langage +/- naturel bourré d'implicite, de non-dits, et
de choses ambigües. On attends toujours et encore une façon d'écrire
des specs qui tiennent la route par rapport à cela.
Et on attend encore une facon d'ecrire les programmes qui tienne la route,
independamment des specs.
va pas planter pour cause de division par zero -> indecidable.
Indécidable dans le cas *général*, mais en pratique on ne travaille que
sur des cas particuliers. La théorie de l'indécidabilité dit qu'on ne
peut pas dire si un prog quelconque parmi tous les programmes de taille
arbitraires, bref un prog tiré au hasard ne va, par exemple, boucler.
Indecidable dans tous les cas pratiques que tu vas rencontrer, parce que
justement tes langages ne limitent pas ce que tu fais, et donc que tu
ne peux *pas* analyser ton code.
La pratique de l'indecidabilite te dit que tu ne sais pas si un programme
qui fait un truc interessant ne va pas boucler.
La pratique de la programmation en vrai te dit que tout programme reel
sur lequel on n'a pas pu faire tourner de moulinette capable de le
verifier automatiquement contient des boucles infinies (c'est-a-dire,
l'immense majorite des programmes un tant soit peu complexes, qui depassent
les 500 lignesd de code, a vue de pif).
Très bien.. mais en pratique les progs ne sont pas écrit au hasard. Ils
répondent à un cahier des charges, font des choses, et même que parfois
on impose des règles d'écriture. Par exemple interdiction d'utiliser des
while, des goto, de la récursivité, des allocations dynamiques. Seules
les boucles for() bornées en nombre de tour (les boucles "for" du
langage pascal typiquement) ne sont utilisables. Ces règles pratiques
font que dans les domaines où elles sont appliquées le pb de l'arrêt est
un truc de théoricien et pas de praticien.
Tout ceci ne sert a rien, parce que ces criteres sont verifies par des
humains, donc faillibles.
les eliminer.
Les standards de codage te servent a faire une approximation de ca.
Est-ce que tu sais verifier que tes standards de codage sont suivis
(de maniere automatique, hein, sinon c'est faillible) ?
Est-ce que tu peux prouver que tes standards de codage t'apportent
un peu de fiabilite ?
Moi j'en reviens toujours au meme souci. Si tu programmes n'importe comment,
ca passe. Si tu veux programmer mieux, ca coute abominablement cher, parce
que tout est fait a la main. Pourtant, on sait plein de choses sur ce qu'on
pourrait automatiser, mais ca ne se fait pas...
je vois plein de raisons economiques a ca... mais c'est pas parce qu'on fait
toutes les verifications qui coutent cher, c'est bien plus parce qu'on
laisse sortir de la merde bugguee en permanence.
In article <4c1bba4b$0$6222$426a74cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> wrote:
Quoi? Que le problème de l'arrêt n'est pas un problème pratique. Oui
parfaitement. Je rejoins Marc là dessus: Les problèmes non décidables ne
sont pas des problèmes pratiques dans la vie industrielle où les choses
sont finalement bien plus simples que ca.
Okay, meme apres un message entier a t'expliquer pourquoi tu en as tout
le temps des problemes indecidables, tu ne les vois toujours pas ?
Juste une question bête: c'est quoi ta définition d'un prog sans bug? La
mienne est celle d'un prog fidèle aux specs. Le soucis c'est que les
specs c'est du langage +/- naturel bourré d'implicite, de non-dits, et
de choses ambigües. On attends toujours et encore une façon d'écrire
des specs qui tiennent la route par rapport à cela.
Et on attend encore une facon d'ecrire les programmes qui tienne la route,
independamment des specs.
va pas planter pour cause de division par zero -> indecidable.
Indécidable dans le cas *général*, mais en pratique on ne travaille que
sur des cas particuliers. La théorie de l'indécidabilité dit qu'on ne
peut pas dire si un prog quelconque parmi tous les programmes de taille
arbitraires, bref un prog tiré au hasard ne va, par exemple, boucler.
Indecidable dans tous les cas pratiques que tu vas rencontrer, parce que
justement tes langages ne limitent pas ce que tu fais, et donc que tu
ne peux *pas* analyser ton code.
La pratique de l'indecidabilite te dit que tu ne sais pas si un programme
qui fait un truc interessant ne va pas boucler.
La pratique de la programmation en vrai te dit que tout programme reel
sur lequel on n'a pas pu faire tourner de moulinette capable de le
verifier automatiquement contient des boucles infinies (c'est-a-dire,
l'immense majorite des programmes un tant soit peu complexes, qui depassent
les 500 lignesd de code, a vue de pif).
Très bien.. mais en pratique les progs ne sont pas écrit au hasard. Ils
répondent à un cahier des charges, font des choses, et même que parfois
on impose des règles d'écriture. Par exemple interdiction d'utiliser des
while, des goto, de la récursivité, des allocations dynamiques. Seules
les boucles for() bornées en nombre de tour (les boucles "for" du
langage pascal typiquement) ne sont utilisables. Ces règles pratiques
font que dans les domaines où elles sont appliquées le pb de l'arrêt est
un truc de théoricien et pas de praticien.
Tout ceci ne sert a rien, parce que ces criteres sont verifies par des
humains, donc faillibles.
les eliminer.
Les standards de codage te servent a faire une approximation de ca.
Est-ce que tu sais verifier que tes standards de codage sont suivis
(de maniere automatique, hein, sinon c'est faillible) ?
Est-ce que tu peux prouver que tes standards de codage t'apportent
un peu de fiabilite ?
Moi j'en reviens toujours au meme souci. Si tu programmes n'importe comment,
ca passe. Si tu veux programmer mieux, ca coute abominablement cher, parce
que tout est fait a la main. Pourtant, on sait plein de choses sur ce qu'on
pourrait automatiser, mais ca ne se fait pas...
je vois plein de raisons economiques a ca... mais c'est pas parce qu'on fait
toutes les verifications qui coutent cher, c'est bien plus parce qu'on
laisse sortir de la merde bugguee en permanence.
In article <4c1bba4b$0$6222$,
Samuel DEVULDER wrote:Quoi? Que le problème de l'arrêt n'est pas un problème pratique. Oui
parfaitement. Je rejoins Marc là dessus: Les problèmes non décidables ne
sont pas des problèmes pratiques dans la vie industrielle où les choses
sont finalement bien plus simples que ca.
Okay, meme apres un message entier a t'expliquer pourquoi tu en as tout
le temps des problemes indecidables, tu ne les vois toujours pas ?
Juste une question bête: c'est quoi ta définition d'un prog sans bug? La
mienne est celle d'un prog fidèle aux specs. Le soucis c'est que les
specs c'est du langage +/- naturel bourré d'implicite, de non-dits, et
de choses ambigües. On attends toujours et encore une façon d'écrire
des specs qui tiennent la route par rapport à cela.
Et on attend encore une facon d'ecrire les programmes qui tienne la route,
independamment des specs.
va pas planter pour cause de division par zero -> indecidable.
Indécidable dans le cas *général*, mais en pratique on ne travaille que
sur des cas particuliers. La théorie de l'indécidabilité dit qu'on ne
peut pas dire si un prog quelconque parmi tous les programmes de taille
arbitraires, bref un prog tiré au hasard ne va, par exemple, boucler.
Indecidable dans tous les cas pratiques que tu vas rencontrer, parce que
justement tes langages ne limitent pas ce que tu fais, et donc que tu
ne peux *pas* analyser ton code.
La pratique de l'indecidabilite te dit que tu ne sais pas si un programme
qui fait un truc interessant ne va pas boucler.
La pratique de la programmation en vrai te dit que tout programme reel
sur lequel on n'a pas pu faire tourner de moulinette capable de le
verifier automatiquement contient des boucles infinies (c'est-a-dire,
l'immense majorite des programmes un tant soit peu complexes, qui depassent
les 500 lignesd de code, a vue de pif).
Très bien.. mais en pratique les progs ne sont pas écrit au hasard. Ils
répondent à un cahier des charges, font des choses, et même que parfois
on impose des règles d'écriture. Par exemple interdiction d'utiliser des
while, des goto, de la récursivité, des allocations dynamiques. Seules
les boucles for() bornées en nombre de tour (les boucles "for" du
langage pascal typiquement) ne sont utilisables. Ces règles pratiques
font que dans les domaines où elles sont appliquées le pb de l'arrêt est
un truc de théoricien et pas de praticien.
Tout ceci ne sert a rien, parce que ces criteres sont verifies par des
humains, donc faillibles.
les eliminer.
Les standards de codage te servent a faire une approximation de ca.
Est-ce que tu sais verifier que tes standards de codage sont suivis
(de maniere automatique, hein, sinon c'est faillible) ?
Est-ce que tu peux prouver que tes standards de codage t'apportent
un peu de fiabilite ?
Moi j'en reviens toujours au meme souci. Si tu programmes n'importe comment,
ca passe. Si tu veux programmer mieux, ca coute abominablement cher, parce
que tout est fait a la main. Pourtant, on sait plein de choses sur ce qu'on
pourrait automatiser, mais ca ne se fait pas...
je vois plein de raisons economiques a ca... mais c'est pas parce qu'on fait
toutes les verifications qui coutent cher, c'est bien plus parce qu'on
laisse sortir de la merde bugguee en permanence.
Marc Boyer écrivit :Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Trop gros, ou pas assez grave, le vol L501 ?
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Fragile est le contraire de robuste. Et robuste est un qualificatif que
tu peux appliquer à des démonstrations, à des conjectures...
Et la physique est continue à son échelle humaine industrielle.
Mais pas à l'échelle atomique, ni même microscopique pour certains
phénomènes comme les frottements ; donc ce n'est pas continu au sens
mathématique du terme.
De la même manière, si l'informatique des programmes est effectivement
discrète, lorsque tu t'intéresses à un système informatique dans son
ensemble, tu peux considérer certaines propriétés comme
pseudo-continues:
Elle permet donc des approximations, des marges de tolérance.
Bah ? Si tu permets à un sous-système de diverger jusqu'à un certain
point, et qu'à ce moment-là tu tues le processus et le relances
(technique classique, utilisée par exemple dans le noyau Windows), c'est
exactement la même chose qu'établir des marges de tolérance, non ?
Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Marc Boyer écrivit :
Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Trop gros, ou pas assez grave, le vol L501 ?
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Fragile est le contraire de robuste. Et robuste est un qualificatif que
tu peux appliquer à des démonstrations, à des conjectures...
Et la physique est continue à son échelle humaine industrielle.
Mais pas à l'échelle atomique, ni même microscopique pour certains
phénomènes comme les frottements ; donc ce n'est pas continu au sens
mathématique du terme.
De la même manière, si l'informatique des programmes est effectivement
discrète, lorsque tu t'intéresses à un système informatique dans son
ensemble, tu peux considérer certaines propriétés comme
pseudo-continues:
Elle permet donc des approximations, des marges de tolérance.
Bah ? Si tu permets à un sous-système de diverger jusqu'à un certain
point, et qu'à ce moment-là tu tues le processus et le relances
(technique classique, utilisée par exemple dans le noyau Windows), c'est
exactement la même chose qu'établir des marges de tolérance, non ?
Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Marc Boyer écrivit :Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Trop gros, ou pas assez grave, le vol L501 ?
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Fragile est le contraire de robuste. Et robuste est un qualificatif que
tu peux appliquer à des démonstrations, à des conjectures...
Et la physique est continue à son échelle humaine industrielle.
Mais pas à l'échelle atomique, ni même microscopique pour certains
phénomènes comme les frottements ; donc ce n'est pas continu au sens
mathématique du terme.
De la même manière, si l'informatique des programmes est effectivement
discrète, lorsque tu t'intéresses à un système informatique dans son
ensemble, tu peux considérer certaines propriétés comme
pseudo-continues:
Elle permet donc des approximations, des marges de tolérance.
Bah ? Si tu permets à un sous-système de diverger jusqu'à un certain
point, et qu'à ce moment-là tu tues le processus et le relances
(technique classique, utilisée par exemple dans le noyau Windows), c'est
exactement la même chose qu'établir des marges de tolérance, non ?
Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Le 18-06-2010, Antoine Leca a écrit :Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Oui, mais ils sont bien plus compliqués que les algorithmes centralisés.
Il y a une robustesse à base de save/restore/retry relativement facile
à mettre en oeuvre, qui améliorerait l'état actuel déjà . C'est d'ailleurs
cette mise en oeuvre au niveau admin système qui, à mon sens, permet
de tolérer les bugs dans les systèmes sans interraction avec le monde
physique (on sait sauvegarder l'état d'un système informatique). Il s'agit
d'intégrer cela dans la programmation des systèmes/applications.
Le 18-06-2010, Antoine Leca <root@localhost.invalid> a écrit :
Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Oui, mais ils sont bien plus compliqués que les algorithmes centralisés.
Il y a une robustesse à base de save/restore/retry relativement facile
à mettre en oeuvre, qui améliorerait l'état actuel déjà . C'est d'ailleurs
cette mise en oeuvre au niveau admin système qui, à mon sens, permet
de tolérer les bugs dans les systèmes sans interraction avec le monde
physique (on sait sauvegarder l'état d'un système informatique). Il s'agit
d'intégrer cela dans la programmation des systèmes/applications.
Le 18-06-2010, Antoine Leca a écrit :Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Oui, mais ils sont bien plus compliqués que les algorithmes centralisés.
Il y a une robustesse à base de save/restore/retry relativement facile
à mettre en oeuvre, qui améliorerait l'état actuel déjà . C'est d'ailleurs
cette mise en oeuvre au niveau admin système qui, à mon sens, permet
de tolérer les bugs dans les systèmes sans interraction avec le monde
physique (on sait sauvegarder l'état d'un système informatique). Il s'agit
d'intégrer cela dans la programmation des systèmes/applications.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
va pas planter pour cause de division par zero -> indecidable.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
Nan, tu as toujours tout, tout le temps. Du coup, on ne peut pas prouver que
les choses marchent, et du coup, on a des bugs.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
va pas planter pour cause de division par zero -> indecidable.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
Nan, tu as toujours tout, tout le temps. Du coup, on ne peut pas prouver que
les choses marchent, et du coup, on a des bugs.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
va pas planter pour cause de division par zero -> indecidable.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
Nan, tu as toujours tout, tout le temps. Du coup, on ne peut pas prouver que
les choses marchent, et du coup, on a des bugs.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.
En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
et pourtant, il me paraît plus facile d'y faire des choses robustes.
"au temps des cartes perforées, on réflechissait avant d'éxecuter
son code").
Mais c'est la fragilité aux bugs qui me questionne. Un peu comme
si sur un immeuble, un seul caillou dans une pelle de sable pouvait
faire s'écrouler tout l'immeuble.
En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
et pourtant, il me paraît plus facile d'y faire des choses robustes.
"au temps des cartes perforées, on réflechissait avant d'éxecuter
son code").
Mais c'est la fragilité aux bugs qui me questionne. Un peu comme
si sur un immeuble, un seul caillou dans une pelle de sable pouvait
faire s'écrouler tout l'immeuble.
En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
et pourtant, il me paraît plus facile d'y faire des choses robustes.
"au temps des cartes perforées, on réflechissait avant d'éxecuter
son code").
Mais c'est la fragilité aux bugs qui me questionne. Un peu comme
si sur un immeuble, un seul caillou dans une pelle de sable pouvait
faire s'écrouler tout l'immeuble.
Marc Boyer écrivit :En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
Marc Boyer écrivit :
En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
Marc Boyer écrivit :En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
Mais ils restent des langages de niche.
Mais ils restent des langages de niche.
Mais ils restent des langages de niche.
Antoine Leca a écrit :Marc Boyer écrivit :En physique non plus on a pas trop de moyen de prouver que les
choses marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
La preuve en physique n'a pas le même statut qu'en mathématique ou en
informatique.
La preuve physique n'est juste que de confronter les
prédictions du modèle avec ce qu'on arrive à mesurer.
Ca ne prouve pas que le modèle *est* ce qu'il se passe vraiment.
Un bon programme est un prog qui marche à tous les coups dans toutes
les situations théoriques.
La sécurité viendra probablement plus de systèmes conçus pour être
résistant que de programmes *résistants par construction* ou parce que
le prouveur a dit que c'était ok.
[*] Les industriels ne sont pas tous de gros méchants finalement.
Antoine Leca a écrit :
Marc Boyer écrivit :
En physique non plus on a pas trop de moyen de prouver que les
choses marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
La preuve en physique n'a pas le même statut qu'en mathématique ou en
informatique.
La preuve physique n'est juste que de confronter les
prédictions du modèle avec ce qu'on arrive à mesurer.
Ca ne prouve pas que le modèle *est* ce qu'il se passe vraiment.
Un bon programme est un prog qui marche à tous les coups dans toutes
les situations théoriques.
La sécurité viendra probablement plus de systèmes conçus pour être
résistant que de programmes *résistants par construction* ou parce que
le prouveur a dit que c'était ok.
[*] Les industriels ne sont pas tous de gros méchants finalement.
Antoine Leca a écrit :Marc Boyer écrivit :En physique non plus on a pas trop de moyen de prouver que les
choses marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
La preuve en physique n'a pas le même statut qu'en mathématique ou en
informatique.
La preuve physique n'est juste que de confronter les
prédictions du modèle avec ce qu'on arrive à mesurer.
Ca ne prouve pas que le modèle *est* ce qu'il se passe vraiment.
Un bon programme est un prog qui marche à tous les coups dans toutes
les situations théoriques.
La sécurité viendra probablement plus de systèmes conçus pour être
résistant que de programmes *résistants par construction* ou parce que
le prouveur a dit que c'était ok.
[*] Les industriels ne sont pas tous de gros méchants finalement.
C'est pareil en maths ; regarde la topologie, tu changes quelques
axiomes et le résultat est très différent.
L'amusant avec les maths c'est que comme le système de preuve est très
avancé et très bien maîtrisé, on peut considérer des axiomes aberrants
voire stupides et obtenir quand même des résultats, en physique on ne
peut pas si cela ne s'accorde pas avec le réel observé (comme dans
l'exemple que tu donnes des équilibres de pression).
C'est pareil en maths ; regarde la topologie, tu changes quelques
axiomes et le résultat est très différent.
L'amusant avec les maths c'est que comme le système de preuve est très
avancé et très bien maîtrisé, on peut considérer des axiomes aberrants
voire stupides et obtenir quand même des résultats, en physique on ne
peut pas si cela ne s'accorde pas avec le réel observé (comme dans
l'exemple que tu donnes des équilibres de pression).
C'est pareil en maths ; regarde la topologie, tu changes quelques
axiomes et le résultat est très différent.
L'amusant avec les maths c'est que comme le système de preuve est très
avancé et très bien maîtrisé, on peut considérer des axiomes aberrants
voire stupides et obtenir quand même des résultats, en physique on ne
peut pas si cela ne s'accorde pas avec le réel observé (comme dans
l'exemple que tu donnes des équilibres de pression).