une fenêtre « commande prompte » (drôle de nom),
une fenêtre « commande prompte » (drôle de nom),
une fenêtre « commande prompte » (drôle de nom),
On Jul 25, 10:24 pm, Sylvain wrote:James Kanze wrote on 25/07/2007 11:18:Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
l'interprêteur de commande attend la fin du programme ou non
(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
les CRT MS mode console n'incluent aucun "pause" en fin d'exécution...
Qui a ouvert la fenêtre ? Pas le CRT, je crois. Et qui le
ferme ? Pas le CRT non plus ; elle ne se ferme pas si je lance
le programme à la main dans une fenêtre terminal.
J'avoue que je ne me sert du debuggueur pratiquement que pour
les post mortem. Mais je ne vois pas l'intérêt de ne pas avoir
une fenêtre ou une sous-fenêtre avec les sorties standard.
je ne parlerais pas de régression mais de mode de fonctionnement.
et pour de trop récents clicodromes de développement qui redirigeraient
abusivement toutes les IO, je parlerais d'obfuscation nuisible.
Qui redirigeraient quoi ?
Les sorties standard doivent toujours
aboutir quelque part.
On Jul 25, 10:24 pm, Sylvain <noS...@mail.net> wrote:
James Kanze wrote on 25/07/2007 11:18:
Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
l'interprêteur de commande attend la fin du programme ou non
(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
les CRT MS mode console n'incluent aucun "pause" en fin d'exécution...
Qui a ouvert la fenêtre ? Pas le CRT, je crois. Et qui le
ferme ? Pas le CRT non plus ; elle ne se ferme pas si je lance
le programme à la main dans une fenêtre terminal.
J'avoue que je ne me sert du debuggueur pratiquement que pour
les post mortem. Mais je ne vois pas l'intérêt de ne pas avoir
une fenêtre ou une sous-fenêtre avec les sorties standard.
je ne parlerais pas de régression mais de mode de fonctionnement.
et pour de trop récents clicodromes de développement qui redirigeraient
abusivement toutes les IO, je parlerais d'obfuscation nuisible.
Qui redirigeraient quoi ?
Les sorties standard doivent toujours
aboutir quelque part.
On Jul 25, 10:24 pm, Sylvain wrote:James Kanze wrote on 25/07/2007 11:18:Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
l'interprêteur de commande attend la fin du programme ou non
(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
les CRT MS mode console n'incluent aucun "pause" en fin d'exécution...
Qui a ouvert la fenêtre ? Pas le CRT, je crois. Et qui le
ferme ? Pas le CRT non plus ; elle ne se ferme pas si je lance
le programme à la main dans une fenêtre terminal.
J'avoue que je ne me sert du debuggueur pratiquement que pour
les post mortem. Mais je ne vois pas l'intérêt de ne pas avoir
une fenêtre ou une sous-fenêtre avec les sorties standard.
je ne parlerais pas de régression mais de mode de fonctionnement.
et pour de trop récents clicodromes de développement qui redirigeraient
abusivement toutes les IO, je parlerais d'obfuscation nuisible.
Qui redirigeraient quoi ?
Les sorties standard doivent toujours
aboutir quelque part.
James Kanze wrote on 26/07/2007 15:17:On Jul 25, 10:24 pm, Sylvain wrote:James Kanze wrote on 25/07/2007 11:18:Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
toujours aussi nuancé ! ;)
trancher sur le fait que ce "c'est un IDE" ou "ce n'est pas un IDE" sur
la seule gestion d'une console est, à mes yeux, plus que léger.
depuis des lustres je considère que Studio ou Eclipse sont des IDE, et
que g++,gdb ou MPW et ses tools ne sont pas des IDE.Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""normal""
("en charte") n'utilise jamais une console.
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
lorsque le même programme est lancé depuis un interpréteur, ces IO (cin,
cout, ...) sont (par défaut) redirigés sur cet interpréteur (comem pour
un shell unix).plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
(identique à celle utilisée par cet interpréteur) - la différence est
qu'aucun shell n'a lancé se programme et n'est là pour temporiser à la fin.(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
tu supposes ici que "l'attribut" dispose de nombres d'option, ce n'est
pas le cas - il contient juste mode console ou mode GUI.sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
par "où" j'entendais "dans quel contexte", ce que tu décris.
je répète, un prog console se voit greffer une console qui redirige cin
et cout parce que le CRT de ce programme contient (au final) des printf
qui a) s'assure qu'une fenêtre console est ouverte, b) utilise cette
fenêtre.
un prog. GUI utilise un CRT où (au final) printf n'écrit rien, nul part.Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable - je ne caricature pas en disant que unix est un OS
texte qui sait afficher des fenêtres tandis que Windows serait un
systèpe pur graphique (la cuisine interne n'est pas du tout cela) mais
cela se comporte malgré tout ainsi.les CRT MS mode console n'incluent aucun "pause" en fin d'exécution...
Qui a ouvert la fenêtre ? Pas le CRT, je crois. Et qui le
ferme ? Pas le CRT non plus ; elle ne se ferme pas si je lance
le programme à la main dans une fenêtre terminal.
Cf ci-avant.J'avoue que je ne me sert du debuggueur pratiquement que pour
les post mortem. Mais je ne vois pas l'intérêt de ne pas avoir
une fenêtre ou une sous-fenêtre avec les sorties standard.
personne a dit qu'il n'y avait pas d'intérêt.
pour tracer dans la sous-fenêtre de l'IDE un code Windows doit utiliser
OutputDebugString (API système hooké par l'IDE durant l'exécution du
programme sou sson contrôle) mais pas printf; s'il le fait ses IO ne
sont pas gérés par l'IDE et il doit s'assurer tout seul que sa console
ne disparait pas trop vite (comme un prog. GUI doit s'assurer tout seul
que ses fenêtres sont au bon endroit, l'IDE ne le fera pas pour lui).je ne parlerais pas de régression mais de mode de fonctionnement.
et pour de trop récents clicodromes de développement qui redirigeraient
abusivement toutes les IO, je parlerais d'obfuscation nuisible.
Qui redirigeraient quoi ?
cin, cout, cerrLes sorties standard doivent toujours
aboutir quelque part.
"/dev/null" pour un prog. Windows ""normal"".
Sylvain.
James Kanze wrote on 26/07/2007 15:17:
On Jul 25, 10:24 pm, Sylvain <noS...@mail.net> wrote:
James Kanze wrote on 25/07/2007 11:18:
Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
toujours aussi nuancé ! ;)
trancher sur le fait que ce "c'est un IDE" ou "ce n'est pas un IDE" sur
la seule gestion d'une console est, à mes yeux, plus que léger.
depuis des lustres je considère que Studio ou Eclipse sont des IDE, et
que g++,gdb ou MPW et ses tools ne sont pas des IDE.
Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""normal""
("en charte") n'utilise jamais une console.
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
lorsque le même programme est lancé depuis un interpréteur, ces IO (cin,
cout, ...) sont (par défaut) redirigés sur cet interpréteur (comem pour
un shell unix).
plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.
l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
(identique à celle utilisée par cet interpréteur) - la différence est
qu'aucun shell n'a lancé se programme et n'est là pour temporiser à la fin.
(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.
A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
tu supposes ici que "l'attribut" dispose de nombres d'option, ce n'est
pas le cas - il contient juste mode console ou mode GUI.
sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
par "où" j'entendais "dans quel contexte", ce que tu décris.
je répète, un prog console se voit greffer une console qui redirige cin
et cout parce que le CRT de ce programme contient (au final) des printf
qui a) s'assure qu'une fenêtre console est ouverte, b) utilise cette
fenêtre.
un prog. GUI utilise un CRT où (au final) printf n'écrit rien, nul part.
Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable - je ne caricature pas en disant que unix est un OS
texte qui sait afficher des fenêtres tandis que Windows serait un
systèpe pur graphique (la cuisine interne n'est pas du tout cela) mais
cela se comporte malgré tout ainsi.
les CRT MS mode console n'incluent aucun "pause" en fin d'exécution...
Qui a ouvert la fenêtre ? Pas le CRT, je crois. Et qui le
ferme ? Pas le CRT non plus ; elle ne se ferme pas si je lance
le programme à la main dans une fenêtre terminal.
Cf ci-avant.
J'avoue que je ne me sert du debuggueur pratiquement que pour
les post mortem. Mais je ne vois pas l'intérêt de ne pas avoir
une fenêtre ou une sous-fenêtre avec les sorties standard.
personne a dit qu'il n'y avait pas d'intérêt.
pour tracer dans la sous-fenêtre de l'IDE un code Windows doit utiliser
OutputDebugString (API système hooké par l'IDE durant l'exécution du
programme sou sson contrôle) mais pas printf; s'il le fait ses IO ne
sont pas gérés par l'IDE et il doit s'assurer tout seul que sa console
ne disparait pas trop vite (comme un prog. GUI doit s'assurer tout seul
que ses fenêtres sont au bon endroit, l'IDE ne le fera pas pour lui).
je ne parlerais pas de régression mais de mode de fonctionnement.
et pour de trop récents clicodromes de développement qui redirigeraient
abusivement toutes les IO, je parlerais d'obfuscation nuisible.
Qui redirigeraient quoi ?
cin, cout, cerr
Les sorties standard doivent toujours
aboutir quelque part.
"/dev/null" pour un prog. Windows ""normal"".
Sylvain.
James Kanze wrote on 26/07/2007 15:17:On Jul 25, 10:24 pm, Sylvain wrote:James Kanze wrote on 25/07/2007 11:18:Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
toujours aussi nuancé ! ;)
trancher sur le fait que ce "c'est un IDE" ou "ce n'est pas un IDE" sur
la seule gestion d'une console est, à mes yeux, plus que léger.
depuis des lustres je considère que Studio ou Eclipse sont des IDE, et
que g++,gdb ou MPW et ses tools ne sont pas des IDE.Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""normal""
("en charte") n'utilise jamais une console.
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
lorsque le même programme est lancé depuis un interpréteur, ces IO (cin,
cout, ...) sont (par défaut) redirigés sur cet interpréteur (comem pour
un shell unix).plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
(identique à celle utilisée par cet interpréteur) - la différence est
qu'aucun shell n'a lancé se programme et n'est là pour temporiser à la fin.(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
tu supposes ici que "l'attribut" dispose de nombres d'option, ce n'est
pas le cas - il contient juste mode console ou mode GUI.sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
par "où" j'entendais "dans quel contexte", ce que tu décris.
je répète, un prog console se voit greffer une console qui redirige cin
et cout parce que le CRT de ce programme contient (au final) des printf
qui a) s'assure qu'une fenêtre console est ouverte, b) utilise cette
fenêtre.
un prog. GUI utilise un CRT où (au final) printf n'écrit rien, nul part.Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable - je ne caricature pas en disant que unix est un OS
texte qui sait afficher des fenêtres tandis que Windows serait un
systèpe pur graphique (la cuisine interne n'est pas du tout cela) mais
cela se comporte malgré tout ainsi.les CRT MS mode console n'incluent aucun "pause" en fin d'exécution...
Qui a ouvert la fenêtre ? Pas le CRT, je crois. Et qui le
ferme ? Pas le CRT non plus ; elle ne se ferme pas si je lance
le programme à la main dans une fenêtre terminal.
Cf ci-avant.J'avoue que je ne me sert du debuggueur pratiquement que pour
les post mortem. Mais je ne vois pas l'intérêt de ne pas avoir
une fenêtre ou une sous-fenêtre avec les sorties standard.
personne a dit qu'il n'y avait pas d'intérêt.
pour tracer dans la sous-fenêtre de l'IDE un code Windows doit utiliser
OutputDebugString (API système hooké par l'IDE durant l'exécution du
programme sou sson contrôle) mais pas printf; s'il le fait ses IO ne
sont pas gérés par l'IDE et il doit s'assurer tout seul que sa console
ne disparait pas trop vite (comme un prog. GUI doit s'assurer tout seul
que ses fenêtres sont au bon endroit, l'IDE ne le fera pas pour lui).je ne parlerais pas de régression mais de mode de fonctionnement.
et pour de trop récents clicodromes de développement qui redirigeraient
abusivement toutes les IO, je parlerais d'obfuscation nuisible.
Qui redirigeraient quoi ?
cin, cout, cerrLes sorties standard doivent toujours
aboutir quelque part.
"/dev/null" pour un prog. Windows ""normal"".
Sylvain.
[...]
[...]
[...]
On Thu, 26 Jul 2007 06:17:16 -0700, James Kanze
:une fenêtre « commande prompte » (drôle de nom),
Je ne sais pas où tu as été pêcher cette francisation, mais l'ori ginal
est "command prompt" (et la traduction en français "invite de
commande").
Ça désigne les quelques caractères (suivant l'OS et le paramétrag e,
ils peuvent contenir un #, un > ou un $, avec le nom d'utilisateur ou
le nom de répertoire), placés juste avant le curseur, et qui
t'invitent à taper une commande.
Désigner le fenêtre de console par ce terme n'est pas absurde, car le
prompt est absent de l'interface GUI.
On Thu, 26 Jul 2007 06:17:16 -0700, James Kanze
<james.ka...@gmail.com>:
une fenêtre « commande prompte » (drôle de nom),
Je ne sais pas où tu as été pêcher cette francisation, mais l'ori ginal
est "command prompt" (et la traduction en français "invite de
commande").
Ça désigne les quelques caractères (suivant l'OS et le paramétrag e,
ils peuvent contenir un #, un > ou un $, avec le nom d'utilisateur ou
le nom de répertoire), placés juste avant le curseur, et qui
t'invitent à taper une commande.
Désigner le fenêtre de console par ce terme n'est pas absurde, car le
prompt est absent de l'interface GUI.
On Thu, 26 Jul 2007 06:17:16 -0700, James Kanze
:une fenêtre « commande prompte » (drôle de nom),
Je ne sais pas où tu as été pêcher cette francisation, mais l'ori ginal
est "command prompt" (et la traduction en français "invite de
commande").
Ça désigne les quelques caractères (suivant l'OS et le paramétrag e,
ils peuvent contenir un #, un > ou un $, avec le nom d'utilisateur ou
le nom de répertoire), placés juste avant le curseur, et qui
t'invitent à taper une commande.
Désigner le fenêtre de console par ce terme n'est pas absurde, car le
prompt est absent de l'interface GUI.
James Kanze wrote on 26/07/2007 15:17:On Jul 25, 10:24 pm, Sylvain wrote:James Kanze wrote on 25/07/2007 11:18:Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
toujours aussi nuancé ! ;)
trancher sur le fait que ce "c'est un IDE" ou "ce n'est pas un
IDE" sur la seule gestion d'une console est, à mes yeux, plus
que léger.
depuis des lustres je considère que Studio ou Eclipse sont des
IDE, et que g++,gdb ou MPW et ses tools ne sont pas des IDE.
Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""norma l""
("en charte") n'utilise jamais une console.
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
lorsque le même programme est lancé depuis un interpréteur, ces IO (cin,
cout, ...) sont (par défaut) redirigés sur cet interpréteur (comem pour
un shell unix).
plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.
l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
(identique à celle utilisée par cet interpréteur) - la différence est
qu'aucun shell n'a lancé se programme et n'est là pour temporiser à la fin.
(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.
A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
tu supposes ici que "l'attribut" dispose de nombres d'option, ce n'est
pas le cas - il contient juste mode console ou mode GUI.
sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
par "où" j'entendais "dans quel contexte", ce que tu décris.
je répète, un prog console se voit greffer une console qui redirige c in
et cout parce que le CRT de ce programme contient (au final) des printf
qui a) s'assure qu'une fenêtre console est ouverte, b) utilise cette
fenêtre.
un prog. GUI utilise un CRT où (au final) printf n'écrit rien, nul pa rt.
Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
je ne caricature pas en disant que unix est un OS
texte qui sait afficher des fenêtres tandis que Windows serait un
système pur graphique (la cuisine interne n'est pas du tout cela) mais
cela se comporte malgré tout ainsi.
James Kanze wrote on 26/07/2007 15:17:
On Jul 25, 10:24 pm, Sylvain <noS...@mail.net> wrote:
James Kanze wrote on 25/07/2007 11:18:
Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
toujours aussi nuancé ! ;)
trancher sur le fait que ce "c'est un IDE" ou "ce n'est pas un
IDE" sur la seule gestion d'une console est, à mes yeux, plus
que léger.
depuis des lustres je considère que Studio ou Eclipse sont des
IDE, et que g++,gdb ou MPW et ses tools ne sont pas des IDE.
Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""norma l""
("en charte") n'utilise jamais une console.
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
lorsque le même programme est lancé depuis un interpréteur, ces IO (cin,
cout, ...) sont (par défaut) redirigés sur cet interpréteur (comem pour
un shell unix).
plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.
l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
(identique à celle utilisée par cet interpréteur) - la différence est
qu'aucun shell n'a lancé se programme et n'est là pour temporiser à la fin.
(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.
A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
tu supposes ici que "l'attribut" dispose de nombres d'option, ce n'est
pas le cas - il contient juste mode console ou mode GUI.
sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
par "où" j'entendais "dans quel contexte", ce que tu décris.
je répète, un prog console se voit greffer une console qui redirige c in
et cout parce que le CRT de ce programme contient (au final) des printf
qui a) s'assure qu'une fenêtre console est ouverte, b) utilise cette
fenêtre.
un prog. GUI utilise un CRT où (au final) printf n'écrit rien, nul pa rt.
Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
je ne caricature pas en disant que unix est un OS
texte qui sait afficher des fenêtres tandis que Windows serait un
système pur graphique (la cuisine interne n'est pas du tout cela) mais
cela se comporte malgré tout ainsi.
James Kanze wrote on 26/07/2007 15:17:On Jul 25, 10:24 pm, Sylvain wrote:James Kanze wrote on 25/07/2007 11:18:Si c'est l'IDE qui démarre son programme, il ne doit pas y avoir
de problème, parce qu'il exécute sous l'IDE, dans un
environement définit par l'IDE. L'IDE capture les sorties
standard, et les affiche dans une fenêtre de l'IDE dédiée à ça.
non, pas pour Studio sous Windows en tout cas.
Ce n'est donc pas un environement integré, puisque pouvoir faire
exécuter le programme sous un environement contrôlé me semble
une fonctionalité fondamentale du développement:-).
toujours aussi nuancé ! ;)
trancher sur le fait que ce "c'est un IDE" ou "ce n'est pas un
IDE" sur la seule gestion d'une console est, à mes yeux, plus
que léger.
depuis des lustres je considère que Studio ou Eclipse sont des
IDE, et que g++,gdb ou MPW et ses tools ne sont pas des IDE.
Ou peut-être
ils trouvaient simplement que de changer vers une fenêtre
« commande prompte » (drôle de nom), et d'exécuter le
programme là, était tellement simple sous Windows qu'on n'avait
pas besoin d'offrir plus.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""norma l""
("en charte") n'utilise jamais une console.
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
lorsque le même programme est lancé depuis un interpréteur, ces IO (cin,
cout, ...) sont (par défaut) redirigés sur cet interpréteur (comem pour
un shell unix).
plus que l'environ.t de dév. j'aurais dis que c'est le CRT utilisé qui
peut conditionner la façon dont un programme se lance et s'arrête.
Je ne comprends pas trop. J'aurais pensé que quand on parle du
lancement, on parle de ce qui se fait avant que le programme se
démarre. Donc, de quelque chose qui est indépendant du CRT.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.
l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
(identique à celle utilisée par cet interpréteur) - la différence est
qu'aucun shell n'a lancé se programme et n'est là pour temporiser à la fin.
(C'est une autre philosophie que Unix, où c'est à l'utilisateur
de préciser chaque fois.)
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.
A priori, je supposerais que cette
attribute serait disponible à n'importe quel logiciel qui
voulait lancer un programme. Donc, à IDE, qui pourrait alors
prend ces avants, pour que l'information ne se perd jamais.
tu supposes ici que "l'attribut" dispose de nombres d'option, ce n'est
pas le cas - il contient juste mode console ou mode GUI.
sous Windows, en mode console, le programme est lancé dans un
""shell"" totalement (heureusement) distinct de l'IDE.
Le problème n'est pas où le programme est lancé. Le problème,
c'est d'une part, l'environement qu'on lui fournit, et de
l'autre, où arrive cout et cerr. Le programme même, ne sait pas
qui l'a lancé (et il se peut bien que l'IDE Sun se sert d'un
shell pour le lancer).
par "où" j'entendais "dans quel contexte", ce que tu décris.
je répète, un prog console se voit greffer une console qui redirige c in
et cout parce que le CRT de ce programme contient (au final) des printf
qui a) s'assure qu'une fenêtre console est ouverte, b) utilise cette
fenêtre.
un prog. GUI utilise un CRT où (au final) printf n'écrit rien, nul pa rt.
Quelle est la différence ? Le shell n'est qu'un programme, qui
tourne dans une fenêtre (un xterm, sur mes Unix). Que les
fonctionnalités du terminal soient fournies par le programme
xterm, ou par le programme sun-studio, que le programme soit
lancé par un programme qui s'appelle bash ou ksh, ou qui
s'appelle sun-studio, qu'est-ce que ça change pour le
programme ?
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
je ne caricature pas en disant que unix est un OS
texte qui sait afficher des fenêtres tandis que Windows serait un
système pur graphique (la cuisine interne n'est pas du tout cela) mais
cela se comporte malgré tout ainsi.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""normal""
("en charte") n'utilise jamais une console.
Je ne suis pas sûr ce que tu entends par « programme
normale ». Il y a beaucoup de types de programmes, des
serveurs, des applications à interface graphique, des
utilitiaires...
Le fait que un programme n'utilise pas le shell n'exclut pas
qu'il puisse être invoqué depuis un shell. Et ça m'étonnerait
que des .bat ne servent pas sous Windows ; ils servent ici, au
moins, pas mal.
Et enfin, si je veux tester un programme, ce n'est pas mal de
l'invoquer depuis un shell. (On peut invoquer n'importe quel
programme Windows depuis un shell.)
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
Unix est un OS. Il s'avère que sous cet OS, il y a des
programmes d'interprêtation de commande dont on peut se servir,
et que la tradition est de s'en servir, pour combiner des
programmes existants, plutôt que d'écrire de nouveaux
programmes.
Mais si je régarde sur mes machines Windows, il y a
pas mal de fichiers .bat aussi. Il doit y être pour une raison.
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
Certes. Comme sous Unix. C'est ce que je disais. Donc, l'IDE
pourrait le faire aussi bien. Il suffit qu'il capture les
sorties (et éventuellement fournir une possibilités des
entrées) et les afficher quelque part.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
Le format PEM, c'est comme le format a.out sous Unix ? (C-à-d
le format normal d'un fichier binaire exécutable.)
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.
Mais qui fait tout ça ? Le programme qui lance le programme,
non ? Ou est-ce que le comportement de la fonction standard
system(), ou de la fonction CreateProcess() va faire quelque
chose de différent ?
Prenons un cas concret : j'écris un programme interactif (donc,
avec interface graphique). À un moment donné, suite à une
commande de l'utilisateur (clique sur un bouton), le programme
veut imprimer une lettre à envoyer à un client. Évidemment,
c'est un programme à part qui s'occupe de formatter les données
dans une lettre et l'envoyer sur l'imprimante ; mon programme
se contente d'écrire des données dans un fichier temporaire, et
d'invoquer ce deuxième programme avec le nom du fichier. (C'est
un scénario assez fréquent, j'imagine.)
Et ce deuxième
programme, évidemment, n'a aucun besoin d'une interface
graphique ou d'autre. Maintenant, d'après ce que j'ai compris
jusqu'ici, ce deuxième programme serait une application console
(parce qu'il n'a pas de GUI). J'espère quand même que quand
j'invoque CreateProcess pour le lancer, que le système ne va pas
ouvrir une fenêtre « invite à la commande ».
l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
OK. J'ai compris.
Mais alors, quel est l'avantage de faire comme ça, par rapport à
simplement recupérer les sorties soi-même et les afficher
quelque part. Est-ce que c'est à cause des « code pages », ou
les positionnements de cursor, etc., possible ?
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.
D'où est-ce qu'un processus hérite son environement, alors ?
Selon la documentation Microsoft : « By default, a child
process inherits a copy of the environment block of the parent
process. » Ça ressemble bien à ce que je connais d'Unix. (En
fait, sous Unix, dans la fonction de base de création d'un
nouveau processus, execve, on précise l'environement ; on peut
passer ce qu'on veut. Mais la convention est bien de passer son
propre environement, et il existe des formes d'exec simplifier
qui le font automatiquement.)
Il faudra que je régarde de plus près, mais une chose est
certaine : j'ai écrit des programmes dite « console », et le
CRT ne m'ouvre pas un nouveau fenêtre console quand je les
invoque. (Et ce que tu dis contradit ce que m'a dit Alf
Steinbach et Jerry Coffin dans le groupe anglophone.)
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
Et c'est quoi, la fenêtre « invite à la commande » ? Et c'est
quoi qui interprête les fichiers .bat ? Ils me semblent jouer
exactement le même rôle sous Windows que xterm et shell sous
Unix.
Que le GUI de Windows soit plus integré dans le système que le
GUI de Unix, je sais bien.
Mais il y a quand même énormement de
similarités entre les deux systèmes. [...]
Microsoft, au moins, prétend qu'on peut se servir de Windows
comme serveur, et d'après ce que j'entends dire, il y a des gens
qui le font. Qui dit serveur dit une machine qui tourne sans
qu'il y ait quelqu'un devant l'écran.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""normal""
("en charte") n'utilise jamais une console.
Je ne suis pas sûr ce que tu entends par « programme
normale ». Il y a beaucoup de types de programmes, des
serveurs, des applications à interface graphique, des
utilitiaires...
Le fait que un programme n'utilise pas le shell n'exclut pas
qu'il puisse être invoqué depuis un shell. Et ça m'étonnerait
que des .bat ne servent pas sous Windows ; ils servent ici, au
moins, pas mal.
Et enfin, si je veux tester un programme, ce n'est pas mal de
l'invoquer depuis un shell. (On peut invoquer n'importe quel
programme Windows depuis un shell.)
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
Unix est un OS. Il s'avère que sous cet OS, il y a des
programmes d'interprêtation de commande dont on peut se servir,
et que la tradition est de s'en servir, pour combiner des
programmes existants, plutôt que d'écrire de nouveaux
programmes.
Mais si je régarde sur mes machines Windows, il y a
pas mal de fichiers .bat aussi. Il doit y être pour une raison.
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
Certes. Comme sous Unix. C'est ce que je disais. Donc, l'IDE
pourrait le faire aussi bien. Il suffit qu'il capture les
sorties (et éventuellement fournir une possibilités des
entrées) et les afficher quelque part.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
Le format PEM, c'est comme le format a.out sous Unix ? (C-à-d
le format normal d'un fichier binaire exécutable.)
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.
Mais qui fait tout ça ? Le programme qui lance le programme,
non ? Ou est-ce que le comportement de la fonction standard
system(), ou de la fonction CreateProcess() va faire quelque
chose de différent ?
Prenons un cas concret : j'écris un programme interactif (donc,
avec interface graphique). À un moment donné, suite à une
commande de l'utilisateur (clique sur un bouton), le programme
veut imprimer une lettre à envoyer à un client. Évidemment,
c'est un programme à part qui s'occupe de formatter les données
dans une lettre et l'envoyer sur l'imprimante ; mon programme
se contente d'écrire des données dans un fichier temporaire, et
d'invoquer ce deuxième programme avec le nom du fichier. (C'est
un scénario assez fréquent, j'imagine.)
Et ce deuxième
programme, évidemment, n'a aucun besoin d'une interface
graphique ou d'autre. Maintenant, d'après ce que j'ai compris
jusqu'ici, ce deuxième programme serait une application console
(parce qu'il n'a pas de GUI). J'espère quand même que quand
j'invoque CreateProcess pour le lancer, que le système ne va pas
ouvrir une fenêtre « invite à la commande ».
l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
OK. J'ai compris.
Mais alors, quel est l'avantage de faire comme ça, par rapport à
simplement recupérer les sorties soi-même et les afficher
quelque part. Est-ce que c'est à cause des « code pages », ou
les positionnements de cursor, etc., possible ?
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.
D'où est-ce qu'un processus hérite son environement, alors ?
Selon la documentation Microsoft : « By default, a child
process inherits a copy of the environment block of the parent
process. » Ça ressemble bien à ce que je connais d'Unix. (En
fait, sous Unix, dans la fonction de base de création d'un
nouveau processus, execve, on précise l'environement ; on peut
passer ce qu'on veut. Mais la convention est bien de passer son
propre environement, et il existe des formes d'exec simplifier
qui le font automatiquement.)
Il faudra que je régarde de plus près, mais une chose est
certaine : j'ai écrit des programmes dite « console », et le
CRT ne m'ouvre pas un nouveau fenêtre console quand je les
invoque. (Et ce que tu dis contradit ce que m'a dit Alf
Steinbach et Jerry Coffin dans le groupe anglophone.)
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
Et c'est quoi, la fenêtre « invite à la commande » ? Et c'est
quoi qui interprête les fichiers .bat ? Ils me semblent jouer
exactement le même rôle sous Windows que xterm et shell sous
Unix.
Que le GUI de Windows soit plus integré dans le système que le
GUI de Unix, je sais bien.
Mais il y a quand même énormement de
similarités entre les deux systèmes. [...]
Microsoft, au moins, prétend qu'on peut se servir de Windows
comme serveur, et d'après ce que j'entends dire, il y a des gens
qui le font. Qui dit serveur dit une machine qui tourne sans
qu'il y ait quelqu'un devant l'écran.
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""normal""
("en charte") n'utilise jamais une console.
Je ne suis pas sûr ce que tu entends par « programme
normale ». Il y a beaucoup de types de programmes, des
serveurs, des applications à interface graphique, des
utilitiaires...
Le fait que un programme n'utilise pas le shell n'exclut pas
qu'il puisse être invoqué depuis un shell. Et ça m'étonnerait
que des .bat ne servent pas sous Windows ; ils servent ici, au
moins, pas mal.
Et enfin, si je veux tester un programme, ce n'est pas mal de
l'invoquer depuis un shell. (On peut invoquer n'importe quel
programme Windows depuis un shell.)
Unix est un OS basé sur des shell (avec bien sur des serveurs X qui
existait bien avant que Windows ne sache dessiner correctement un bouton).
Unix est un OS. Il s'avère que sous cet OS, il y a des
programmes d'interprêtation de commande dont on peut se servir,
et que la tradition est de s'en servir, pour combiner des
programmes existants, plutôt que d'écrire de nouveaux
programmes.
Mais si je régarde sur mes machines Windows, il y a
pas mal de fichiers .bat aussi. Il doit y être pour une raison.
la console qui capture les entrées/sorties dans programme mode console
n'est pas un shell - ni l'OS, ni l'IDE ne lance un shell (pas de bash ni
rien de ressemblant); c'est juste une fenêtre (dépendante du CRT!) qui
capture au vol se qui est envoyé sur les IO standards (cin, cout, ...).
Certes. Comme sous Unix. C'est ce que je disais. Donc, l'IDE
pourrait le faire aussi bien. Il suffit qu'il capture les
sorties (et éventuellement fournir une possibilités des
entrées) et les afficher quelque part.
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
Le format PEM, c'est comme le format a.out sous Unix ? (C-à-d
le format normal d'un fichier binaire exécutable.)
ce flag conditionne complètement les IO du prog.; si c'est un prog
console une fenêtre s'ouvrira au premier output ou saisie; à l'inverse
si c'est un programme avec GUI, toutes les IO standards (j'entends cout,
printf, etc) iront nulle part et ne seront pas affichés.
Mais qui fait tout ça ? Le programme qui lance le programme,
non ? Ou est-ce que le comportement de la fonction standard
system(), ou de la fonction CreateProcess() va faire quelque
chose de différent ?
Prenons un cas concret : j'écris un programme interactif (donc,
avec interface graphique). À un moment donné, suite à une
commande de l'utilisateur (clique sur un bouton), le programme
veut imprimer une lettre à envoyer à un client. Évidemment,
c'est un programme à part qui s'occupe de formatter les données
dans une lettre et l'envoyer sur l'imprimante ; mon programme
se contente d'écrire des données dans un fichier temporaire, et
d'invoquer ce deuxième programme avec le nom du fichier. (C'est
un scénario assez fréquent, j'imagine.)
Et ce deuxième
programme, évidemment, n'a aucun besoin d'une interface
graphique ou d'autre. Maintenant, d'après ce que j'ai compris
jusqu'ici, ce deuxième programme serait une application console
(parce qu'il n'a pas de GUI). J'espère quand même que quand
j'invoque CreateProcess pour le lancer, que le système ne va pas
ouvrir une fenêtre « invite à la commande ».
l'interprêteur de commande attend la fin du programme ou non
non puisque ce n'est pas "l'interpréteur" mais une fenêtre texte
OK. J'ai compris.
Mais alors, quel est l'avantage de faire comme ça, par rapport à
simplement recupérer les sorties soi-même et les afficher
quelque part. Est-ce que c'est à cause des « code pages », ou
les positionnements de cursor, etc., possible ?
une différence importance est l'héritage de l'environment sous unix, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin scela
n'a pas la même philosophie.
D'où est-ce qu'un processus hérite son environement, alors ?
Selon la documentation Microsoft : « By default, a child
process inherits a copy of the environment block of the parent
process. » Ça ressemble bien à ce que je connais d'Unix. (En
fait, sous Unix, dans la fonction de base de création d'un
nouveau processus, execve, on précise l'environement ; on peut
passer ce qu'on veut. Mais la convention est bien de passer son
propre environement, et il existe des formes d'exec simplifier
qui le font automatiquement.)
Il faudra que je régarde de plus près, mais une chose est
certaine : j'ai écrit des programmes dite « console », et le
CRT ne m'ouvre pas un nouveau fenêtre console quand je les
invoque. (Et ce que tu dis contradit ce que m'a dit Alf
Steinbach et Jerry Coffin dans le groupe anglophone.)
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
Et c'est quoi, la fenêtre « invite à la commande » ? Et c'est
quoi qui interprête les fichiers .bat ? Ils me semblent jouer
exactement le même rôle sous Windows que xterm et shell sous
Unix.
Que le GUI de Windows soit plus integré dans le système que le
GUI de Unix, je sais bien.
Mais il y a quand même énormement de
similarités entre les deux systèmes. [...]
Microsoft, au moins, prétend qu'on peut se servir de Windows
comme serveur, et d'après ce que j'entends dire, il y a des gens
qui le font. Qui dit serveur dit une machine qui tourne sans
qu'il y ait quelqu'un devant l'écran.
James Kanze wrote on 27/07/2007 09:53:ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""no rmal""
("en charte") n'utilise jamais une console.
Je ne suis pas sûr ce que tu entends par « programme
normale ». Il y a beaucoup de types de programmes, des
serveurs, des applications à interface graphique, des
utilitiaires...
j'entendais "en charte" avec la charte graphique de l'OS.
bien sur que différents types de programmes ont besoin de différents
types d'interface / d'interaction - je ne les qualifiais pas, je disais
seulement que les outils de dev. pour Windows sont plus orientés vers la
construction d'applis avec GUI windows (par exemple comme cité Studio
n'interagit pas avec la console hôte d'un programme).
pour poursuivre la liste de ces petites différences qui rendent les
choses très différentes, un daemon unix utilisera souvent des logs, et
des programmes connexes à ce daemon permettront de le redémarrer /
stopper, d'analyser ces logs, etc.
sous Windows, une appli type serveur aura souvent son control panel ou
sa fenêtre de configuration (généralement réduite dans la systray ), si
l'appli est complètement faceless, elle loguera ses info dans les listes
systèmes d'évènements; tout ceci n'est pas une obligeation, mais le
conformisme est souvent de règle sous Windows.
Le fait que un programme n'utilise pas le shell n'exclut pas
qu'il puisse être invoqué depuis un shell. Et ça m'étonnerait
que des .bat ne servent pas sous Windows ; ils servent ici, au
moins, pas mal.
un batch réponds à d'autres règles (puisque qu'il est nécessairem ent
interprété par le shell qui le lance); je parlais ici d'exécutables
compilés.
à nouveau, unix fera exactement ce que l'utilisateur demande ('&' a une
conséquence lors d'un lancement depuis un shell).
windows ne fera qu'en fonction du type de programme; si c'est une appli
avec GUI, un lancement depuis l'invite de commande est strictement
identique à un clic sur ce programme et donc l'interpréteur rends
aussitôt la main;
si c'est un prog console, la fenêtre de l'interpréteur
est utilisée ou une fenêtre similaire est adjointe si le prog. est la ncé
par clic / scheduler / etc.Et enfin, si je veux tester un programme, ce n'est pas mal de
l'invoquer depuis un shell. (On peut invoquer n'importe quel
programme Windows depuis un shell.)
"invoquer", si cela ne signifie que démarrer, oui.
pour autant on ne garde aucun contrôle sur les progs non console lanc é
depuis le shell (ni la boite "Exécuter", ni le scheduler, ...)
Unix est un OS basé sur des shell (avec bien sur des
serveurs X qui existait bien avant que Windows ne sache
dessiner correctement un bouton).
Unix est un OS. Il s'avère que sous cet OS, il y a des
programmes d'interprêtation de commande dont on peut se servir,
et que la tradition est de s'en servir, pour combiner des
programmes existants, plutôt que d'écrire de nouveaux
programmes.
tout à fait d'accord - également d'accord avec ton raccourci: unix est
un IDE en soi.
Mais si je régarde sur mes machines Windows, il y a
pas mal de fichiers .bat aussi. Il doit y être pour une raison.
il y a en très très peu - un développeur peux bien sur en créer p our
automatiser qlq taches mais le système ne les utilise quasiment plus; de
plus leur syntaxe a tjrs été très pauvre comparé aux scripts shel l unix
(ou à l'interpréteur d'OS/2).
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
Le format PEM, c'est comme le format a.out sous Unix ? (C-à-d
le format normal d'un fichier binaire exécutable.)
le 'M' est une coquille, désolé, il faut lire format 'PE' (portable
executable).
c'est un format qui contient les modules linkés statiquement et les
informations pour les lins dynamiques à résoudre au lancement; il
contient également quelque informations sur les compatiblités du modu le
(16, 32 ou 64 bits, mode graphique ou non).
Prenons un cas concret : j'écris un programme interactif (donc,
avec interface graphique). À un moment donné, suite à une
commande de l'utilisateur (clique sur un bouton), le programme
veut imprimer une lettre à envoyer à un client. Évidemment,
c'est un programme à part qui s'occupe de formatter les données
dans une lettre et l'envoyer sur l'imprimante ; mon programme
se contente d'écrire des données dans un fichier temporaire, et
d'invoquer ce deuxième programme avec le nom du fichier. (C'est
un scénario assez fréquent, j'imagine.)
le scénario oui, mais pas directement la méthode qui tu sous-entends.Et ce deuxième
programme, évidemment, n'a aucun besoin d'une interface
graphique ou d'autre. Maintenant, d'après ce que j'ai compris
jusqu'ici, ce deuxième programme serait une application console
(parce qu'il n'a pas de GUI). J'espère quand même que quand
j'invoque CreateProcess pour le lancer, que le système ne va pas
ouvrir une fenêtre « invite à la commande ».
soit ce que tu décris correspond à une sortie raw sur une imprimante
basique, ou, pour un flux imprimante complexe, suppose une génération
complète des codes imprimantes (Esc IBM, PCL, PS, ...) par le 2ième
programme (sauf matériel d'impression très spécifique, personne
n'imprime comme cela sous Windows).
faire "soi-même" est possible, via des API MS (non standards) un code
peut créer sa console, gérer son curseur etc; mais par défaut les l ib.
systèmes ne le font pas - ce n'est pas tant une avantage que, encore une
fois, un principe d'autorité des prog. Windows, une appli. Windows
/doit/ se cogner tout le GUI Windows dès qu'elle veut afficher quelque
chose (on est à des années lumière des possibilités offertes à un client
X-Window).
une différence importance est l'héritage de l'environment sous uni x, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin sce la
n'a pas la même philosophie.
D'où est-ce qu'un processus hérite son environement, alors ?
Selon la documentation Microsoft : « By default, a child
process inherits a copy of the environment block of the parent
process. » Ça ressemble bien à ce que je connais d'Unix. (En
fait, sous Unix, dans la fonction de base de création d'un
nouveau processus, execve, on précise l'environement ; on peut
passer ce qu'on veut. Mais la convention est bien de passer son
propre environement, et il existe des formes d'exec simplifier
qui le font automatiquement.)
c'est bien le cas, mais, et c'est une opinion personnelle, je considère
que l'environnement hérité (quelque variables systèmes (path, etc) et
les droits liés à l'utilisateur) est assez pauvre; la gestion des
appartenances des processus est également non limpide (et non standard
pour ces APIs).
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
Et c'est quoi, la fenêtre « invite à la commande » ? Et c'est
quoi qui interprête les fichiers .bat ? Ils me semblent jouer
exactement le même rôle sous Windows que xterm et shell sous
Unix.
non, pas vraiment "exactement" le même rôle car ils sont bcp bcp moins
évolués.
ce qui interprêtre est le programme "command.com" c'est lui-même une
appli console; si tu lances "command" depuis un gestionnaire de taches
(comme le lanceur invoqué par "windows+R") il récupère (via kernel3 2)
une console "par défaut" qui hérite des variables d'env. systèmes m ais
d'aucun paramètre utilisateur (sauf défini comme variable
d'environnement). si tu le lances depuis une invite de commande, il
utilise la console du premier interpréteur (un "exit" quittera ce second
shell, un autre "exit" quittera l'invite et fermera la fenêtre). note
qu'il est impossible de lancer "command&" pour obtenir un second shell
hérité du premier mais indépendant de celui-ci.
Que le GUI de Windows soit plus integré dans le système que le
GUI de Unix, je sais bien.
euh, je prenais plutôt des réserves vis a vis de cette affirmation.
Mais il y a quand même énormement de
similarités entre les deux systèmes. [...]
nous sommes d'accord, mais tu listes ici des fonctionnalités, elles se
ressemblent forcément car ce sont bien deux O.S.
mon point ne valait que pour souligner qlq différences de principes de
mode de fonctionnement qui créent des différences notamment sous des
choses aussi basiques que cout.Microsoft, au moins, prétend qu'on peut se servir de Windows
comme serveur, et d'après ce que j'entends dire, il y a des gens
qui le font. Qui dit serveur dit une machine qui tourne sans
qu'il y ait quelqu'un devant l'écran.
pour ma part - et parce que j'ai bien pratiqué les serveurs MS, et des
applicatifs comme IIS ou SQL-Server) j'utilise un serveur linux et des
applicatifs Apache ou MySQL - mais oui, on prétends que l'on peut s'en
servir comme serveur - et d'ailleurs pour un serveur de droits (avec que
des protocoles 100% MS) ou un serveur de fichiers (avec des proto 100%
MS) il vaut mieux en effet utiliser un svr MS.
James Kanze wrote on 27/07/2007 09:53:
ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""no rmal""
("en charte") n'utilise jamais une console.
Je ne suis pas sûr ce que tu entends par « programme
normale ». Il y a beaucoup de types de programmes, des
serveurs, des applications à interface graphique, des
utilitiaires...
j'entendais "en charte" avec la charte graphique de l'OS.
bien sur que différents types de programmes ont besoin de différents
types d'interface / d'interaction - je ne les qualifiais pas, je disais
seulement que les outils de dev. pour Windows sont plus orientés vers la
construction d'applis avec GUI windows (par exemple comme cité Studio
n'interagit pas avec la console hôte d'un programme).
pour poursuivre la liste de ces petites différences qui rendent les
choses très différentes, un daemon unix utilisera souvent des logs, et
des programmes connexes à ce daemon permettront de le redémarrer /
stopper, d'analyser ces logs, etc.
sous Windows, une appli type serveur aura souvent son control panel ou
sa fenêtre de configuration (généralement réduite dans la systray ), si
l'appli est complètement faceless, elle loguera ses info dans les listes
systèmes d'évènements; tout ceci n'est pas une obligeation, mais le
conformisme est souvent de règle sous Windows.
Le fait que un programme n'utilise pas le shell n'exclut pas
qu'il puisse être invoqué depuis un shell. Et ça m'étonnerait
que des .bat ne servent pas sous Windows ; ils servent ici, au
moins, pas mal.
un batch réponds à d'autres règles (puisque qu'il est nécessairem ent
interprété par le shell qui le lance); je parlais ici d'exécutables
compilés.
à nouveau, unix fera exactement ce que l'utilisateur demande ('&' a une
conséquence lors d'un lancement depuis un shell).
windows ne fera qu'en fonction du type de programme; si c'est une appli
avec GUI, un lancement depuis l'invite de commande est strictement
identique à un clic sur ce programme et donc l'interpréteur rends
aussitôt la main;
si c'est un prog console, la fenêtre de l'interpréteur
est utilisée ou une fenêtre similaire est adjointe si le prog. est la ncé
par clic / scheduler / etc.
Et enfin, si je veux tester un programme, ce n'est pas mal de
l'invoquer depuis un shell. (On peut invoquer n'importe quel
programme Windows depuis un shell.)
"invoquer", si cela ne signifie que démarrer, oui.
pour autant on ne garde aucun contrôle sur les progs non console lanc é
depuis le shell (ni la boite "Exécuter", ni le scheduler, ...)
Unix est un OS basé sur des shell (avec bien sur des
serveurs X qui existait bien avant que Windows ne sache
dessiner correctement un bouton).
Unix est un OS. Il s'avère que sous cet OS, il y a des
programmes d'interprêtation de commande dont on peut se servir,
et que la tradition est de s'en servir, pour combiner des
programmes existants, plutôt que d'écrire de nouveaux
programmes.
tout à fait d'accord - également d'accord avec ton raccourci: unix est
un IDE en soi.
Mais si je régarde sur mes machines Windows, il y a
pas mal de fichiers .bat aussi. Il doit y être pour une raison.
il y a en très très peu - un développeur peux bien sur en créer p our
automatiser qlq taches mais le système ne les utilise quasiment plus; de
plus leur syntaxe a tjrs été très pauvre comparé aux scripts shel l unix
(ou à l'interpréteur d'OS/2).
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
Le format PEM, c'est comme le format a.out sous Unix ? (C-à-d
le format normal d'un fichier binaire exécutable.)
le 'M' est une coquille, désolé, il faut lire format 'PE' (portable
executable).
c'est un format qui contient les modules linkés statiquement et les
informations pour les lins dynamiques à résoudre au lancement; il
contient également quelque informations sur les compatiblités du modu le
(16, 32 ou 64 bits, mode graphique ou non).
Prenons un cas concret : j'écris un programme interactif (donc,
avec interface graphique). À un moment donné, suite à une
commande de l'utilisateur (clique sur un bouton), le programme
veut imprimer une lettre à envoyer à un client. Évidemment,
c'est un programme à part qui s'occupe de formatter les données
dans une lettre et l'envoyer sur l'imprimante ; mon programme
se contente d'écrire des données dans un fichier temporaire, et
d'invoquer ce deuxième programme avec le nom du fichier. (C'est
un scénario assez fréquent, j'imagine.)
le scénario oui, mais pas directement la méthode qui tu sous-entends.
Et ce deuxième
programme, évidemment, n'a aucun besoin d'une interface
graphique ou d'autre. Maintenant, d'après ce que j'ai compris
jusqu'ici, ce deuxième programme serait une application console
(parce qu'il n'a pas de GUI). J'espère quand même que quand
j'invoque CreateProcess pour le lancer, que le système ne va pas
ouvrir une fenêtre « invite à la commande ».
soit ce que tu décris correspond à une sortie raw sur une imprimante
basique, ou, pour un flux imprimante complexe, suppose une génération
complète des codes imprimantes (Esc IBM, PCL, PS, ...) par le 2ième
programme (sauf matériel d'impression très spécifique, personne
n'imprime comme cela sous Windows).
faire "soi-même" est possible, via des API MS (non standards) un code
peut créer sa console, gérer son curseur etc; mais par défaut les l ib.
systèmes ne le font pas - ce n'est pas tant une avantage que, encore une
fois, un principe d'autorité des prog. Windows, une appli. Windows
/doit/ se cogner tout le GUI Windows dès qu'elle veut afficher quelque
chose (on est à des années lumière des possibilités offertes à un client
X-Window).
une différence importance est l'héritage de l'environment sous uni x, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin sce la
n'a pas la même philosophie.
D'où est-ce qu'un processus hérite son environement, alors ?
Selon la documentation Microsoft : « By default, a child
process inherits a copy of the environment block of the parent
process. » Ça ressemble bien à ce que je connais d'Unix. (En
fait, sous Unix, dans la fonction de base de création d'un
nouveau processus, execve, on précise l'environement ; on peut
passer ce qu'on veut. Mais la convention est bien de passer son
propre environement, et il existe des formes d'exec simplifier
qui le font automatiquement.)
c'est bien le cas, mais, et c'est une opinion personnelle, je considère
que l'environnement hérité (quelque variables systèmes (path, etc) et
les droits liés à l'utilisateur) est assez pauvre; la gestion des
appartenances des processus est également non limpide (et non standard
pour ces APIs).
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
Et c'est quoi, la fenêtre « invite à la commande » ? Et c'est
quoi qui interprête les fichiers .bat ? Ils me semblent jouer
exactement le même rôle sous Windows que xterm et shell sous
Unix.
non, pas vraiment "exactement" le même rôle car ils sont bcp bcp moins
évolués.
ce qui interprêtre est le programme "command.com" c'est lui-même une
appli console; si tu lances "command" depuis un gestionnaire de taches
(comme le lanceur invoqué par "windows+R") il récupère (via kernel3 2)
une console "par défaut" qui hérite des variables d'env. systèmes m ais
d'aucun paramètre utilisateur (sauf défini comme variable
d'environnement). si tu le lances depuis une invite de commande, il
utilise la console du premier interpréteur (un "exit" quittera ce second
shell, un autre "exit" quittera l'invite et fermera la fenêtre). note
qu'il est impossible de lancer "command&" pour obtenir un second shell
hérité du premier mais indépendant de celui-ci.
Que le GUI de Windows soit plus integré dans le système que le
GUI de Unix, je sais bien.
euh, je prenais plutôt des réserves vis a vis de cette affirmation.
Mais il y a quand même énormement de
similarités entre les deux systèmes. [...]
nous sommes d'accord, mais tu listes ici des fonctionnalités, elles se
ressemblent forcément car ce sont bien deux O.S.
mon point ne valait que pour souligner qlq différences de principes de
mode de fonctionnement qui créent des différences notamment sous des
choses aussi basiques que cout.
Microsoft, au moins, prétend qu'on peut se servir de Windows
comme serveur, et d'après ce que j'entends dire, il y a des gens
qui le font. Qui dit serveur dit une machine qui tourne sans
qu'il y ait quelqu'un devant l'écran.
pour ma part - et parce que j'ai bien pratiqué les serveurs MS, et des
applicatifs comme IIS ou SQL-Server) j'utilise un serveur linux et des
applicatifs Apache ou MySQL - mais oui, on prétends que l'on peut s'en
servir comme serveur - et d'ailleurs pour un serveur de droits (avec que
des protocoles 100% MS) ou un serveur de fichiers (avec des proto 100%
MS) il vaut mieux en effet utiliser un svr MS.
James Kanze wrote on 27/07/2007 09:53:ton a priori biaise ton appréciation.
Windows n'est PAS un système basé sur des shell, un programme ""no rmal""
("en charte") n'utilise jamais une console.
Je ne suis pas sûr ce que tu entends par « programme
normale ». Il y a beaucoup de types de programmes, des
serveurs, des applications à interface graphique, des
utilitiaires...
j'entendais "en charte" avec la charte graphique de l'OS.
bien sur que différents types de programmes ont besoin de différents
types d'interface / d'interaction - je ne les qualifiais pas, je disais
seulement que les outils de dev. pour Windows sont plus orientés vers la
construction d'applis avec GUI windows (par exemple comme cité Studio
n'interagit pas avec la console hôte d'un programme).
pour poursuivre la liste de ces petites différences qui rendent les
choses très différentes, un daemon unix utilisera souvent des logs, et
des programmes connexes à ce daemon permettront de le redémarrer /
stopper, d'analyser ces logs, etc.
sous Windows, une appli type serveur aura souvent son control panel ou
sa fenêtre de configuration (généralement réduite dans la systray ), si
l'appli est complètement faceless, elle loguera ses info dans les listes
systèmes d'évènements; tout ceci n'est pas une obligeation, mais le
conformisme est souvent de règle sous Windows.
Le fait que un programme n'utilise pas le shell n'exclut pas
qu'il puisse être invoqué depuis un shell. Et ça m'étonnerait
que des .bat ne servent pas sous Windows ; ils servent ici, au
moins, pas mal.
un batch réponds à d'autres règles (puisque qu'il est nécessairem ent
interprété par le shell qui le lance); je parlais ici d'exécutables
compilés.
à nouveau, unix fera exactement ce que l'utilisateur demande ('&' a une
conséquence lors d'un lancement depuis un shell).
windows ne fera qu'en fonction du type de programme; si c'est une appli
avec GUI, un lancement depuis l'invite de commande est strictement
identique à un clic sur ce programme et donc l'interpréteur rends
aussitôt la main;
si c'est un prog console, la fenêtre de l'interpréteur
est utilisée ou une fenêtre similaire est adjointe si le prog. est la ncé
par clic / scheduler / etc.Et enfin, si je veux tester un programme, ce n'est pas mal de
l'invoquer depuis un shell. (On peut invoquer n'importe quel
programme Windows depuis un shell.)
"invoquer", si cela ne signifie que démarrer, oui.
pour autant on ne garde aucun contrôle sur les progs non console lanc é
depuis le shell (ni la boite "Exécuter", ni le scheduler, ...)
Unix est un OS basé sur des shell (avec bien sur des
serveurs X qui existait bien avant que Windows ne sache
dessiner correctement un bouton).
Unix est un OS. Il s'avère que sous cet OS, il y a des
programmes d'interprêtation de commande dont on peut se servir,
et que la tradition est de s'en servir, pour combiner des
programmes existants, plutôt que d'écrire de nouveaux
programmes.
tout à fait d'accord - également d'accord avec ton raccourci: unix est
un IDE en soi.
Mais si je régarde sur mes machines Windows, il y a
pas mal de fichiers .bat aussi. Il doit y être pour une raison.
il y a en très très peu - un développeur peux bien sur en créer p our
automatiser qlq taches mais le système ne les utilise quasiment plus; de
plus leur syntaxe a tjrs été très pauvre comparé aux scripts shel l unix
(ou à l'interpréteur d'OS/2).
Suite à des discussions dans comp.lang.c++, Alf Steinbach m'a
renvoyé à un papier excellent
(http://home.no.net/dubjai/win32apitut/01.pdf) qu'il a écrit.
D'après ce que j'ai bien compris de ce papier, l'éditeur de lien
ajoute un attribute (appelée « subsystem ») au fichier .exe,
que le système utilise pour faire certains choix :
oui c'est un des attributs du format PEM.
Le format PEM, c'est comme le format a.out sous Unix ? (C-à-d
le format normal d'un fichier binaire exécutable.)
le 'M' est une coquille, désolé, il faut lire format 'PE' (portable
executable).
c'est un format qui contient les modules linkés statiquement et les
informations pour les lins dynamiques à résoudre au lancement; il
contient également quelque informations sur les compatiblités du modu le
(16, 32 ou 64 bits, mode graphique ou non).
Prenons un cas concret : j'écris un programme interactif (donc,
avec interface graphique). À un moment donné, suite à une
commande de l'utilisateur (clique sur un bouton), le programme
veut imprimer une lettre à envoyer à un client. Évidemment,
c'est un programme à part qui s'occupe de formatter les données
dans une lettre et l'envoyer sur l'imprimante ; mon programme
se contente d'écrire des données dans un fichier temporaire, et
d'invoquer ce deuxième programme avec le nom du fichier. (C'est
un scénario assez fréquent, j'imagine.)
le scénario oui, mais pas directement la méthode qui tu sous-entends.Et ce deuxième
programme, évidemment, n'a aucun besoin d'une interface
graphique ou d'autre. Maintenant, d'après ce que j'ai compris
jusqu'ici, ce deuxième programme serait une application console
(parce qu'il n'a pas de GUI). J'espère quand même que quand
j'invoque CreateProcess pour le lancer, que le système ne va pas
ouvrir une fenêtre « invite à la commande ».
soit ce que tu décris correspond à une sortie raw sur une imprimante
basique, ou, pour un flux imprimante complexe, suppose une génération
complète des codes imprimantes (Esc IBM, PCL, PS, ...) par le 2ième
programme (sauf matériel d'impression très spécifique, personne
n'imprime comme cela sous Windows).
faire "soi-même" est possible, via des API MS (non standards) un code
peut créer sa console, gérer son curseur etc; mais par défaut les l ib.
systèmes ne le font pas - ce n'est pas tant une avantage que, encore une
fois, un principe d'autorité des prog. Windows, une appli. Windows
/doit/ se cogner tout le GUI Windows dès qu'elle veut afficher quelque
chose (on est à des années lumière des possibilités offertes à un client
X-Window).
une différence importance est l'héritage de l'environment sous uni x, un
processus fils héritant de l'env. du shell et les sous-processus du
parent; cela n'existe quasiment pas sous Windows, à tout le moin sce la
n'a pas la même philosophie.
D'où est-ce qu'un processus hérite son environement, alors ?
Selon la documentation Microsoft : « By default, a child
process inherits a copy of the environment block of the parent
process. » Ça ressemble bien à ce que je connais d'Unix. (En
fait, sous Unix, dans la fonction de base de création d'un
nouveau processus, execve, on précise l'environement ; on peut
passer ce qu'on veut. Mais la convention est bien de passer son
propre environement, et il existe des formes d'exec simplifier
qui le font automatiquement.)
c'est bien le cas, mais, et c'est une opinion personnelle, je considère
que l'environnement hérité (quelque variables systèmes (path, etc) et
les droits liés à l'utilisateur) est assez pauvre; la gestion des
appartenances des processus est également non limpide (et non standard
pour ces APIs).
ce qui change est que Windows ne dispose ni de xterm, ni de shell, ni
rien de comparable -
Et c'est quoi, la fenêtre « invite à la commande » ? Et c'est
quoi qui interprête les fichiers .bat ? Ils me semblent jouer
exactement le même rôle sous Windows que xterm et shell sous
Unix.
non, pas vraiment "exactement" le même rôle car ils sont bcp bcp moins
évolués.
ce qui interprêtre est le programme "command.com" c'est lui-même une
appli console; si tu lances "command" depuis un gestionnaire de taches
(comme le lanceur invoqué par "windows+R") il récupère (via kernel3 2)
une console "par défaut" qui hérite des variables d'env. systèmes m ais
d'aucun paramètre utilisateur (sauf défini comme variable
d'environnement). si tu le lances depuis une invite de commande, il
utilise la console du premier interpréteur (un "exit" quittera ce second
shell, un autre "exit" quittera l'invite et fermera la fenêtre). note
qu'il est impossible de lancer "command&" pour obtenir un second shell
hérité du premier mais indépendant de celui-ci.
Que le GUI de Windows soit plus integré dans le système que le
GUI de Unix, je sais bien.
euh, je prenais plutôt des réserves vis a vis de cette affirmation.
Mais il y a quand même énormement de
similarités entre les deux systèmes. [...]
nous sommes d'accord, mais tu listes ici des fonctionnalités, elles se
ressemblent forcément car ce sont bien deux O.S.
mon point ne valait que pour souligner qlq différences de principes de
mode de fonctionnement qui créent des différences notamment sous des
choses aussi basiques que cout.Microsoft, au moins, prétend qu'on peut se servir de Windows
comme serveur, et d'après ce que j'entends dire, il y a des gens
qui le font. Qui dit serveur dit une machine qui tourne sans
qu'il y ait quelqu'un devant l'écran.
pour ma part - et parce que j'ai bien pratiqué les serveurs MS, et des
applicatifs comme IIS ou SQL-Server) j'utilise un serveur linux et des
applicatifs Apache ou MySQL - mais oui, on prétends que l'on peut s'en
servir comme serveur - et d'ailleurs pour un serveur de droits (avec que
des protocoles 100% MS) ou un serveur de fichiers (avec des proto 100%
MS) il vaut mieux en effet utiliser un svr MS.