Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Chercher un livre sur le C avec certains critères.

200 réponses
Avatar
Francois
Bonjour à tous,

Je débute dans le C et personnellement j'apprends surtout avec les
livres. J'ai commencé "Livre du C premier langage" de Delannoy (je
précise que j'avais quand même des petites notions de programmations,
même si, à mon sens, j'étais [ et suis encore ? ] vraiment ce qu'on
appelle un débutant).

Je suis en train de lire le K&R (deuxième édition) qui est bien sûr
beaucoup plus difficile. C'est du concentré, mais quand on y regarde de
prêt, c'est quand assez précis et bien fait. Ceci étant, il y a des
choses qui ne me satisfont pas complètement.

Je trouve que ce livre à une approche trop éloignée de la machine
(comment une donnée est encodée ? comment se passe l'histoire du signed
ou unsigned du point de vue de la machine etc.). Je m'explique.

Bien sûr, le langage C est un langage abstrait de "haut niveau" qui se
doit (en principe) de ne pas faire référence à la machine. Donc c'est
normal qu'un livre sur le C ne parle pas (trop) des problèmes qui
dépendent de l'architecture. Ceci étant, j'aimerais savoir si un tel
livre existe malgré tout. Un livre qui expose le langage C et qui
n'hésite pas de temps en temps à parler de ce qui se passe dans la
machine (bien sûr, justement, ce qui se passe dépend de la machine et
n'est pas universel, mais le livre pourrait présenter les choses sur
seulement une architecture "classique" par exemple). Bon, si je pouvais
éviter les circuits électroniques et compagnie quand même, ça serait
bien. Qu'on me dise que "le complément à 2 fait que l'addition devient
plus simple pour l'ordinateur puisqu'il suffit de faire une addition
classique" me suffit amplement. Une preuve de cela en passant des
explications sur des circuits électroniques peut-être me serait un peu
indigeste.

Bref, j'espère avoir été clair sur cette sorte de compromis que je
recherche (existe-t-il ?). Vous pouvez aller voir cette discussion (où
mon pseudo est sisco)

http://www.siteduzero.com/forum-83-245206-p1-afficher-le-codage-binaire-du-contenu-d-une-variable.html

qui pourra peut-être préciser mes aspirations.

Un livre en français, ça serait le top. Mais en anglais, ça le fera aussi.


Je vous remercie d'avance pour votre aide.



François

10 réponses

Avatar
Marc Boyer
On 2008-03-09, Francois wrote:
Pour moi, l'apprentissage se fait en deux phases :
- la première on apprend à programmer et à écrire du code propre
- la seconde on regarde son architecture, son comportement, on
s'intéresse aux autres archi etc. Mais avant de faire cela, il faut
apprendre à écrire du code assez propre.


De toute façon, ce que je cherche n'existant pas, c'est ainsi que je
vais faire. Mais je ne démords du fait qu'un savant mélange des deux
domaines, tout en délimitant *précisément* à chaque fois dans lequel des
deux le discours s'applique, eu été pour moi une bénédiction. ;-)


Dans notre formation, on enseigne
1) l'algorithmique
2) l'archi des ordis (simple)
3) le C

Ah ... de toute façon ce livre ne semble pas exister. S'il en existe un
à votre connaissance, n'hésitez surtout pas (même si je sais que ce sera
à contre coeur :-)) )


Tu peux essayer le 'C unleashed', les chapitres 5 et 6.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)


Avatar
Pierre Maurette
On 8 mar, 15:06, Francois wrote:


[...]

Qu'on me dise que "le complément à 2 fait que l'addition devient
plus simple pour l'ordinateur puisqu'il suffit de faire une addition
classique" me suffit amplement.


Aucun rapport avec le C, le complément à deux concerne le processeur
ou ce qui l'émule, il te faut acheter un ouvrage sur un assembleur
quelconque ou un ouvrage d'architecture des ordinateurs.


Pas tout à fait d'accord. La représentation des entiers signés en
complément à deux est fortement présente dans la norme C. Soit par des
silences assourdissants - les ub - soit dans par exemple <stdint.h>,
qui impose pratiquement un modèle naturel sous-jacent d'entiers
naturels donc sans padding et des signés en complément à deux. OK,
c'est C99, mais c'est une extension bien pratique de beaucoup
d'implémentations C89.
Je ne conteste pas le fait qu'il est important de savoir programmer
portable. Ceci dit, je suis convaincu que pour bien programmer
portable, il est utile de connaître les origines des défauts de
portabilité. De comprendre que pour être portable, il ne faut rien
présupposer de la représentation des données, padding, nombre de bits,
signés, boutisme...
Je pense que comprendre qu'au niveau machine, c'est une opération qui
est signée ou non, alors qu'en C c'est la donnée qui est signée ou non
est très important, et qu'il est très intéressant de bien piger comment
on passe de l'un à l'autre.
Il est impératif que ceux qui savent ne prennent pas ceux qui
apprennent, et éventuellement ceux qui enseignent ou écrivent, pour des
neuneus. Il ne faudrait pas tomber dans un certain travers courant en
C++, à savoir que les gurus affirment qu'un bon programmeur C++ ne doit
pas connaître le C préalablement, alors que leur propre niveau en C est
généralement excellent, puisqu'ils ont commencé par ce langage.
Le C est le langage idéal, un niche, pour interfacer du spécifique et
du portable. Je ne vois pas l'intérêt de programmer en C si on n'a pas
une idée assez précise des architectures sous-jacentes, le pluriel est
important.
Je ne connais pas de bouquin qui réponde à la demande de François. Je
dois dire que l'idée m'a effleuré d'en commettre un, à la suite d'un
autre. L'approche aurait été de ne pas cacher la machine-modèle, mais
au contraire de montrer les pièges de toute présupposition sur sa
nature.
Pour François, il me semble qu'il y a matière à expérimenter
efficacement, s'il a un peu de temps à perdre. Afficher par exemple ce
que les données ont dans le ventre. Le problème étant de trouver le
moyen d'expérimenter sur de l'étrange. Bon, il y a DOS, et Mac
éventuellement.


--
Pierre Maurette


Avatar
Francois

Ceci dit, je suis convaincu que pour bien programmer portable,
il est utile de connaître les origines des défauts de portabilité.


J'y connais pas des masses, mais j'approuve. D'une manière générale, le
"non dit" dans le but d'être irréprochable dans son discours est, selon
moins, une erreur pédagogique. Je trouve plus pédagogique de dire et de
montrer.
Dans la discussion que j'ai mise en lien dans premier message de ce fil,
un certain -ed- me disait "non, ça, c'est pas toujours vrai. Dans ce
cas là ...". Il pouvait dire ça car, lui, il a probablement du voir et
constater (parfois à ces dépens) plein de problèmes du genre. Tant qu'on
a pas vu...

Autre exemple (désolé, j'en reviens au maths).

a) Définition avec non dit irréprochable
UNE primitive de f sur I est une fonction F dérivable sur I tq F'=f

b) Définition sans non dit, irréprochable aussi
UNE primitive de f sur I est une fonction F dérivable sur I tq F'=f
Attention, on dit UNE, car si on en trouve une, alors on en déduit plein
d'autres en additionnant une constante. exple ...

Tout ça pour dire juste ceci :

Le problème, c'est que, lorsqu'on évite le non-dit, c'est plus difficile
(plus fatiguant) d'être irréprochable. Pour moi, la pédagogie que
j'aime, c'est celle de l'explicite (pas de non dit). Où le lecteur ne
doit pas jouer aux devinettes. Le tuto dont nous avons parlé avant
essaye de faire cela. Bon d'accord, hélas, il y a des erreurs. Avec K&R,
quant à lui, j'ai un peu l'impression qu'il faut parfois jouer aux
devinettes (cf : quelques messages avant à propos des tableau). C'est
une référence. Ca doit bien quand tu connais déjà très bien le C et que
dans ta tête les choses sont déjà bien en place.

Je pense que comprendre qu'au niveau machine, c'est une opération qui
est signée ou non, alors qu'en C c'est la donnée qui est signée ou non
est très important, et qu'il est très intéressant de bien piger comment
on passe de l'un à l'autre.


Euh ... oui, alors là justement, serait-ce possible d'avoir une
explication ?

Je ne connais pas de bouquin qui réponde à la demande de François. Je
dois dire que l'idée m'a effleuré d'en commettre un, à la suite d'un
autre.


Ah, mais c'est horrible de me dire ça !!! Au travail alors, vite, vite,
vite... :-))

L'approche aurait été de ne pas cacher la machine-modèle, mais au
contraire de montrer les pièges de toute présupposition sur sa nature.


Voilà de "MONTRER" ! Si se livre sort, alors là, je casse ma tire-lire.
J'ai l'impression que ce livre fictif est exactement celui que je
cherchais (sniiiiiiiiiif :-( )

Pour François, il me semble qu'il y a matière à expérimenter
efficacement, s'il a un peu de temps à perdre. Afficher par exemple ce
que les données ont dans le ventre.


Alors, si ça veut dire afficher le code binaire du contenu d'une
variable, c'est l'objet du lien se trouvant dans le message initial de
ce fil. Le lien pointe vers une discussion sur le SiteDuZero qui parle
de ça et qui a été complètement résolue je crois, avec l'aide de
personnes très compétentes d'ailleurs.


Je passe à autre chose.

a) Pour nos histoire de formalisme (lvalue etc.). Finalement, n'est-ce
pas un peu vain. Cela apporte-t-il quelque chose au programmeur ?
J'ai vraiment l'impression que ce formalisme de toute façon n'est pas
clairement et officiellement défini (je me trompe peut-être ?) et j'ai
l'impression aussi qu'au final, ce qui compte, c'est d'avoir sa propre
terminologie (en évitant quand même de faire un truc marginal) et
qu'elle soit cohérente. Non ?

b) Pouvez-vous me dire où je peux me procurer les normes C ?



François

Avatar
Francois
Je
dois dire que l'idée m'a effleuré d'en commettre un, à la suite d'un
autre.


Votre livre "Assembleur" à l'air bien je trouve. Il parle de problème
qui pourrait m'intéresser selon vous ?
Il n'est plus disponible sur amazon.


François

Avatar
candide

Dans notre formation, on enseigne
1) l'algorithmique
2) l'archi des ordis (simple)
3) le C


OK. Et fait-on la liaison entre tout ça (préoccupation de François) ?


Tu peux essayer le 'C unleashed', les chapitres 5 et 6.


Chapitre 5 : Playing with bits and Bytes 5 (Lawrence Kerby)
Chapitre 6 : Offline Data storage and retrieval (Steeve Summit)

Les deux chapitres sont du "plain C" alors que si j'ai bien compris, ce
dont parle François est placé à l'interface du C et de la machine.

Je n'ai pas lu le chapitre 6 mais c'est assez verbeux (comme beaucoup de
chapitres de ce livre) et je vois que ça parle de lecture/écriture dans
des fichiers, des formats texte vs binaire, lecture d'un fichier de
configuration genre fichier .ini.
Je crois que ce qui intéresse François est beaucoup plus bas niveau.


Par contre, j'avais lu le chapitre 5 qui est un chapitre de contenu
assez classique bien que je ne l'ai pas trouvé spécialement clair en
première lecture. Je trouve qu'il ne parle pas assez de la
"représentation des valeurs en C", ensuite il parle des 3 différentes
représentations classiques des entiers signés mais je suis resté sur ma
faim (il en parle là mais il n'en parle plus après donc c'est un peu
académique) puis il parle des opérations sur les bits d'entiers non
signés, très classique. La fin est plus intéressante et concerne les
questions de portabilité, je vais tacher de relire pour revoir en détail
ce qu'il dit.


Une autre référence que j'aurais pu suggérer à François est le
chapitre 6 du Harbison & Steele et intitulée "Conversions and
representations". J'ai lu le livre il y a quelque mois et j'ai trouvé ce
chapitre un des plus difficiles à assimiler et à cerner alors que sa
compréhension est sans doute essentielle pour franchir un cap dans
l'approfondissement du C. Difficile à lire parce que le sujet est
certainement complexe mais aussi parce que le talent d'exposition des
auteurs est proprement piètre.. Bon le chapitre parle de bits vs bytes,
de l'endianness (en première lecture, l'exposé m'a semblé bien
abstrait), de l'alignement, de la taille des pointeurs, c'est assez
disparate. Il y a ensuite un paragraphe abominable intitulé "Effects of
the adressing models" auquel je n'ai rien compris (bien que je l'ai lu
et relu) alors que ça traite de notions vraiment intéressantes au bout
du compte (ils disent qu'il existe des architectures très "difficiles"
pour implémenter le langage C mais hélas, je n'ai pas vraiment compris
leurs explications, elles ne sont pas assez concrètes, rien de
TANGIBLE). Il y a enfin un § sur la représentation des types mais assez
superficiel. Bref, je suis resté sur ma faim ou je n'ai pas compris. La
suite du chapitre (les conversions) est très spécifique au C et j'ai
beaucoup souffert en le lisant.

Avatar
espie
In article ,
Pierre Maurette wrote:
On 8 mar, 15:06, Francois wrote:


[...]

Qu'on me dise que "le complément à 2 fait que l'addition devient
plus simple pour l'ordinateur puisqu'il suffit de faire une addition
classique" me suffit amplement.


Aucun rapport avec le C, le complément à deux concerne le processeur
ou ce qui l'émule, il te faut acheter un ouvrage sur un assembleur
quelconque ou un ouvrage d'architecture des ordinateurs.


Pas tout à fait d'accord. La représentation des entiers signés en
complément à deux est fortement présente dans la norme C. Soit par des
silences assourdissants - les ub - soit dans par exemple <stdint.h>,
qui impose pratiquement un modèle naturel sous-jacent d'entiers
naturels donc sans padding et des signés en complément à deux. OK,
c'est C99, mais c'est une extension bien pratique de beaucoup
d'implémentations C89.


Pas du tout d'accord.

De ce que je connais, la norme C *impose* que les entiers non signes soient
sur en binaire sur n bits (ou au moins,
se comportent suffisamment comme si pour pouvoir faire de l'arithmetique
dans Z/2^Z), et que la conversion d'entiers signes en entiers non signes se
fasse sans douleur pour l'intervalle [0, 2^(n-1)[

Par contre, elle est tres silencieuse pour les entiers negatifs, et supporte
de facon a peu pres equivalente du complement a 2 ou du complement a 1.

Un petit tour dans la norme m'amene a 6.2.6.2, qui stipule de facon
tres explicite qu'il y a TROIS implementations legales des entiers
signes (complement a 2, complement a 1, et signe + grandeur), et qu'en plus
il peut y avoir des bits de bourrages.

Cote stdint.h, c'est pareil. Je te rappelle que la norme stipule que les
types intN_t et uintN_t sont *optionnels* (mais doivent exister si
l'implementation les supporte). Les seuls types obligatoires, c'est
(u)int_leastN_t, avec N = 8, 16, 32, 64... ce qui laisse enormement de
marge quant a la representation sous-jacente.



Avatar
Jean-Marc Bourguet
Pierre Maurette writes:

On 8 mar, 15:06, Francois wrote:


[...]

Qu'on me dise que "le complément à 2 fait que l'addition devient
plus simple pour l'ordinateur puisqu'il suffit de faire une addition
classique" me suffit amplement.


Aucun rapport avec le C, le complément à deux concerne le processeur
ou ce qui l'émule, il te faut acheter un ouvrage sur un assembleur
quelconque ou un ouvrage d'architecture des ordinateurs.


Pas tout à fait d'accord. La représentation des entiers signés en
complément à deux est fortement présente dans la norme C. Soit par des
silences assourdissants - les ub - soit dans par exemple <stdint.h>, qui
impose pratiquement un modèle naturel sous-jacent d'entiers naturels donc
sans padding et des signés en complément à deux. OK, c'est C99, mais c'est
une extension bien pratique de beaucoup d'implémentations C89.


J'aimerais bien que tu explicites ton raisonnement. Un format binaire est
imposé, plus ou moins implicitement en C89 si j'ai bonne mémoire,
explicitement en C99 qui donne le choix entre trois représentations
(complément à 2, compléments aux 1, grandeur et signe).

Je ne conteste pas le fait qu'il est important de savoir programmer
portable. Ceci dit, je suis convaincu que pour bien programmer portable,
il est utile de connaître les origines des défauts de portabilité.


Je n'ai pas du tout l'impression que je réfléchi généralement à ce niveau
là. Pas plus que je réfléchi au niveau RTL quand je programme en
assembleur (en fait nettement moins) ou en analogique quand je concois un
circuit numérique.

Je suis capable de travailler à tout ces niveaux et quelques autres (enfin,
l'analogique n'est pas celui que je préfère sans parler des aspects
quantiques) et de temps en temps j'utilise mes connaissances des niveaux
inférieurs quand je travaille à un niveau donné, mais ce n'est pas le plus
courant.

Oui, les connaître permet de comprendre le pourquoi de certaines règles,
comme connaître les techniques de compilation permet de comprendre d'autres
règles mais la part d'arbitraire dans toutes ces règles est loin d'être
négligeable.

Je pense que comprendre qu'au niveau machine, c'est une opération qui est
signée ou non, alors qu'en C c'est la donnée qui est signée ou non est
très important, et qu'il est très intéressant de bien piger comment on
passe de l'un à l'autre.


Rien n'empèche de concevoir des machines à tag avec des opérations
polymorphes (ça m'étonnerait qu'il n'y en ait pas eu dans les années 70 et
certaines VM chères aux langages modernes sont de ce genre), ni le C -- il
demande juste de pouvoir les contourner à certains moments -- , ni
l'architecture des ordinateurs -- bien que ce ne soit pas très tendance
actuellement, pour des raisons à la fois pratiques et idéologiques.

Il est impératif que ceux qui savent ne prennent pas ceux qui apprennent,
et éventuellement ceux qui enseignent ou écrivent, pour des neuneus.
Il ne faudrait pas tomber dans un certain travers courant en C++, à
savoir que les gurus affirment qu'un bon programmeur C++ ne doit pas
connaître le C préalablement,


Jamais quelqu'un avoir une position aussi stupide. Ce n'est pas nécessaire
de connaître le C; connaître le C à un niveau débutant ou moyen est
vraisemblablement un obstacle, donc si l'objectif est d'apprendre le C++,
il vaut mieux commencer par cela. Je crois aussi qu'en l'absence de base
de programmation, si l'objectif est d'apprendre les deux c'est plus facile
d'apprendre le C++ puis le C.

Je n'ai pas l'impression qu'il y a tant de différences sur ce qu'il est
nécessaire d'apprendre, juste sur l'ordre de présentation. Il y a la
tendance top-down et la tendance bottom-up -- mais les tenant du bottom-up
commence rarement tout au bas, c'est plutôt du middle-up.

alors que leur propre niveau en C est généralement excellent, puisqu'ils
ont commencé par ce langage.


Pas tous. Ceux qui ont 20 ans d'expérience, oui. Mais ceux qui ont appris
plus récemment ont parfois commencé par le C++ (j'ai fait sérieusement du C
après avoir fait sérieusement du C++ par exemple, même si j'ai eu un cours
de C avant de faire du C++; mais de toute manière je connaissais déjà
plusieurs langages avant mon premier contact avec le C).

Le C est le langage idéal, un niche, pour interfacer du spécifique et du
portable. Je ne vois pas l'intérêt de programmer en C si on n'a pas une
idée assez précise des architectures sous-jacentes, le pluriel est
important.


Tu en donnes pourtant un: l'extrême portabilité est une des niches du C...

Je ne connais pas de bouquin qui réponde à la demande de François. Je
dois dire que l'idée m'a effleuré d'en commettre un, à la suite d'un
autre. L'approche aurait été de ne pas cacher la machine-modèle, mais au
contraire de montrer les pièges de toute présupposition sur sa nature.
Pour François, il me semble qu'il y a matière à expérimenter
efficacement, s'il a un peu de temps à perdre. Afficher par exemple ce
que les données ont dans le ventre. Le problème étant de trouver le moyen
d'expérimenter sur de l'étrange. Bon, il y a DOS, et Mac éventuellement.


Aucun n'est de l'étrange (bon DOS a de la segmentation, mais quel aspect
étrange a le Mac?)

Tu peux concevoir une machine virtuelle paramétrée et un compilateur C qui
la cible :-)

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Jean-Marc Bourguet
Francois writes:


Ceci dit, je suis convaincu que pour bien programmer portable, il est
utile de connaître les origines des défauts de portabilité.


J'y connais pas des masses, mais j'approuve. D'une manière générale, le
"non dit" dans le but d'être irréprochable dans son discours est, selon
moins, une erreur pédagogique. Je trouve plus pédagogique de dire et de
montrer.
Dans la discussion que j'ai mise en lien dans premier message de ce fil, un
certain -ed- me disait "non, ça, c'est pas toujours vrai. Dans ce cas là
...". Il pouvait dire ça car, lui, il a probablement du voir et constater
(parfois à ces dépens) plein de problèmes du genre. Tant qu'on a pas vu...

Autre exemple (désolé, j'en reviens au maths).

a) Définition avec non dit irréprochable
UNE primitive de f sur I est une fonction F dérivable sur I tq F'=f

b) Définition sans non dit, irréprochable aussi
UNE primitive de f sur I est une fonction F dérivable sur I tq F'=f
Attention, on dit UNE, car si on en trouve une, alors on en déduit plein
d'autres en additionnant une constante. exple ...

Tout ça pour dire juste ceci :

Le problème, c'est que, lorsqu'on évite le non-dit, c'est plus difficile
(plus fatiguant) d'être irréprochable.


Ce n'est qu'un problème. Un gros problème est qu'on finit par arriver à
des considérations de mécanique quantique... je veux dire des
considérations plus compliquées que ce qu'on cherche à expliquer. Un autre
gros problèmes et que toutes ces considérations annexes finissent par
consommer des ressources qui seraient au final mieux consommées à autre
chose. Ce n'est pas un livre que tu veux, c'est une bibliothèque... Et il
faut bien commencer par quelque chose.

Pour moi, la pédagogie que j'aime, c'est celle de l'explicite (pas de non
dit). Où le lecteur ne doit pas jouer aux devinettes. Le tuto dont nous
avons parlé avant essaye de faire cela. Bon d'accord, hélas, il y a des
erreurs. Avec K&R, quant à lui, j'ai un peu l'impression qu'il faut
parfois jouer aux devinettes (cf : quelques messages avant à propos des
tableau). C'est une référence. Ca doit bien quand tu connais déjà très
bien le C et que dans ta tête les choses sont déjà bien en place.


Le K&R ne s'adresse pas à des gens qui apprennent à programmer, il
s'adresse à des programmeurs confirmés qui ne connaissent pas
nécessairement le C. Et je pas oublié qu'il a été écrit à une époque où
cela voulait dire connaissant plusieurs langages machines plus exotiques
que ce qu'on trouve de nos jours.

a) Pour nos histoire de formalisme (lvalue etc.). Finalement, n'est-ce
pas un peu vain. Cela apporte-t-il quelque chose au programmeur ?


Ce formalisme est un peu le contrat entre toi et celui qui te fourni un
compilateur. Comme tout les contrats, il n'intervient que quand il y a un
problème pour savoir c'est qui qui doit s'occuper du problème. (Et comme
dans tous les contrats, la réponse est "c'est le plus faible" -- il y a
aussi un aspect pragmatique à ne pas négliger).

J'ai vraiment l'impression que ce formalisme de toute façon n'est pas
clairement et officiellement défini (je me trompe peut-être ?)


Ca varie entre langages, mais c'est assez bien défini. Comme tout document
complexe, il y a des inconsistances et des problèmes qui ont échappé, mais
ils sont relativement rares.

et j'ai l'impression aussi qu'au final, ce qui compte, c'est d'avoir sa
propre terminologie (en évitant quand même de faire un truc marginal) et
qu'elle soit cohérente. Non ?


Se batir sa propre terminologie, c'est bien jusqu'au jour où on veut parler
avec quelqu'un.

b) Pouvez-vous me dire où je peux me procurer les normes C ?


Je ne suis pas sûr que ce soit une bonne chose à faire pour toi pour le
moment. Les versions officielles, auprès des organismes officiels (AFNOR,
ISO, ANSI -- ce dernier avait une version PDF pour 18$ il y a quelques
années, BSI -- ce dernier a fait publier une version papier par Wiley a
coût raisonnable).

Des brouillons et des versions de travail où non officielles sont
disponibles sur le site du comité http://www.open-std.org/jtc1/sc22/wg14,
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf est probablement
le document le plus à jour que tu puisses obtenir -- gratuitement ou non
d'ailleurs.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Marc Boyer
On 2008-03-10, candide wrote:

Dans notre formation, on enseigne
1) l'algorithmique
2) l'archi des ordis (simple)
3) le C


OK. Et fait-on la liaison entre tout ça (préoccupation de François) ?


Ben, en synchronisant les enseignements, et en faisant des
liens oraux et/ou écrit entre enseignements.


Tu peux essayer le 'C unleashed', les chapitres 5 et 6.


Chapitre 5 : Playing with bits and Bytes 5 (Lawrence Kerby)
Chapitre 6 : Offline Data storage and retrieval (Steeve Summit)

Les deux chapitres sont du "plain C" alors que si j'ai bien compris, ce
dont parle François est placé à l'interface du C et de la machine.

Je n'ai pas lu le chapitre 6 mais c'est assez verbeux (comme beaucoup de
chapitres de ce livre) et je vois que ça parle de lecture/écriture dans
des fichiers, des formats texte vs binaire, lecture d'un fichier de
configuration genre fichier .ini.
Je crois que ce qui intéresse François est beaucoup plus bas niveau.


Ca parle pourtant de padding il me semble, et de portabilité,
d'endianess. Mais je l'ai pas relu, je parle de mémoire.

Par contre, j'avais lu le chapitre 5 qui est un chapitre de contenu
assez classique bien que je ne l'ai pas trouvé spécialement clair en
première lecture.


Possible. C'est le problème de lire des trucs qu'on connait déjà.
On manque cruellement d'esprit critique.

Je trouve qu'il ne parle pas assez de la
"représentation des valeurs en C", ensuite il parle des 3 différentes
représentations classiques des entiers signés mais je suis resté sur ma
faim (il en parle là mais il n'en parle plus après donc c'est un peu
académique) puis il parle des opérations sur les bits d'entiers non
signés, très classique.


Que dire de plus ?

Une autre référence que j'aurais pu suggérer à François est le
chapitre 6 du Harbison & Steele et intitulée "Conversions and
representations".


C'est un très bon bouquin. Je ne me souviens pas particulièrement
de ce chapitre.

J'ai lu le livre il y a quelque mois et j'ai trouvé ce
chapitre un des plus difficiles à assimiler et à cerner alors que sa
compréhension est sans doute essentielle pour franchir un cap dans
l'approfondissement du C. Difficile à lire parce que le sujet est
certainement complexe mais aussi parce que le talent d'exposition des
auteurs est proprement piètre.. Bon le chapitre parle de bits vs bytes,
de l'endianness (en première lecture, l'exposé m'a semblé bien
abstrait), de l'alignement, de la taille des pointeurs, c'est assez
disparate. Il y a ensuite un paragraphe abominable intitulé "Effects of
the adressing models" auquel je n'ai rien compris (bien que je l'ai lu
et relu) alors que ça traite de notions vraiment intéressantes au bout
du compte (ils disent qu'il existe des architectures très "difficiles"
pour implémenter le langage C mais hélas, je n'ai pas vraiment compris
leurs explications, elles ne sont pas assez concrètes, rien de
TANGIBLE). Il y a enfin un § sur la représentation des types mais assez
superficiel. Bref, je suis resté sur ma faim ou je n'ai pas compris. La
suite du chapitre (les conversions) est très spécifique au C et j'ai
beaucoup souffert en le lisant.


Ceci dit, les conversions en C, c'est pénible. Je ne vois pas comment
le faire clair.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)


Avatar
Francois

Ce n'est qu'un problème. Un gros problème est qu'on finit par arriver à
des considérations de mécanique quantique... je veux dire des
considérations plus compliquées que ce qu'on cherche à expliquer. Un autre
gros problèmes et que toutes ces considérations annexes finissent par
consommer des ressources qui seraient au final mieux consommées à autre
chose. Ce n'est pas un livre que tu veux, c'est une bibliothèque... Et il
faut bien commencer par quelque chose.


Tout cela est très juste et semble frappé du sceau du bon sens et de la
raison.

et j'ai l'impression aussi qu'au final, ce qui compte, c'est d'avoir sa
propre terminologie (en évitant quand même de faire un truc marginal) et
qu'elle soit cohérente. Non ?


Se batir sa propre terminologie, c'est bien jusqu'au jour où on veut parler
avec quelqu'un.


:-)) C'est très juste et très drôle aussi. :-))

b) Pouvez-vous me dire où je peux me procurer les normes C ?


[couic]

est probablement le document le plus à jour que tu puisses obtenir
-- gratuitement ou non d'ailleurs.


Merci beaucoup.


Francois