OVH Cloud OVH Cloud

Apprendre le langage C et quelques questions

89 réponses
Avatar
heron maladroit
question :

Ne souhaitant pas passer trop de temps sur le langage C, =E7a fait 1 an
que j'ai commenc=E9 et je consid=E8re y donner encore 1 ann=E9e de plus (=
=E0
raison de 4 =E0 8 heures par semaine), je pense que ce n'est pas
n=E9cessaire de lire le K&R en profondeur pour un niveau en C que je
veux garder "basique". C'est bien de l'avoir sous le coude et par
moment pour voir un peu un style de programmation d=E9finitivement
brillant au niveau algorithmes.

En effet, =E9tant comptable, je ne sais pas tr=E8s bien =E0 quoi le langage
C pourrait me servir concr=E8tement. L'informatique occupe beaucoup mon
temps en dehors du temps de travail mais je ne vois pas pour le temps
que je peux y consacrer pour apprendre comment dans les conditions
actuelles du march=E9, trouver un travail dans ce domaine en qualit=E9
d'autididacte. Peut-=EAtre je peux envisager d'=E9crire des petites
applications sur des appareils mobiles ou des applications web ? On
dirait que les grands =E9diteurs mettent en place des outils de
d=E9veloppement maison pour les appareils Andro=EFd, iPhone...

Et =E9galement, j'utilise linux et je ne sais pas quel niveau en langage
C il faut pour appr=E9cier plus en profondeur cet OS ? J'ai vu que le
langage Shell est quelque chose d'utile pour personaliser Linux. Y-a-t-
il un pont entre le Shell (un des shell) et le langage C ?

J'ai quelques bases en C qu'on retrouve dans d'autres langages
(notamment au niveau algorithmique, pointeurs...), c'est pourquoi
j'envisage apr=E8s de me consacrer au C++. Mais je souhaite avant
consolider les bases et les aspects un peu d=E9licats de ce langage
assez =E9prouvant =E0 apprendre (mais j'ai commenc=E9 avec beaucoup de
sacrifices sur les loisirs, la vie de famille etc et je ne ferais pas
machine arri=E8re). Je garde professionnellement la t=EAte hors de l'eau,
je donne la priorit=E9 pour gagner de l'argent mais c'est beaucoup
d'=E9nergie... C=F4t=E9 francophone, l'initiative d'entreprendre et
=E9galement d'apprendre n'est pas tant encourag=E9e. Malheureusement, on
voit le r=E9sultat ; l'=E9tat en France pr=E9f=E8re une distribution Linux
anglo-saxonne au d=E9pit de Mandriva....C'est un autre d=E9bat.

Je voudrais savoir si jusqu'=E0 pr=E9sent la "route" que j'ai choisie est
coh=E9rente. Et surtout comment orienter la derni=E8re ann=E9e
d'apprentissage. Dans un livre, j'ai pu voir la biblioth=E8que Glib.
J'ai trouv=E9 que la programmation =E9tait assez diff=E9rente de celle de
stdio, stdlib. Faudrait-il que je me consacre =E0 cet biblioth=E8que afin
d'avoir une connaissance plus pratique de ce langage ? Ou est-ce que
c'est r=E9server =E0 un usage niveau expert du langage C, qui ne serait
pas tr=E8s "utile" lors d'une conversion vers C++, Python, Php,
Javascript des langages vers lesquels je souhaite m'orienter par la
suite. Des langages comme Vb net, C sharp m'int=E9resseraient =E9galement.
Avant, je consid=E8re passer approximativement le double du temps que
j'ai pass=E9 =E0 apprendre le C sur le C++ afin de comprendre la POO. Je
ne sais pas si c'est coh=E9rent.

Merci pour vos conseils (on dirait que ce groupe est de moins en moins
anim=E9 - faut-il s'exprimer en anglais pour retrouver les experts de ce
forum...)

9 réponses

5 6 7 8 9
Avatar
Marc Boyer
Le 28-05-2010, JKB a écrit :
Le 28-05-2010, ? propos de
Re: Apprendre le langage C et quelques questions,
Marc Boyer ?crivait dans fr.comp.lang.c :

Et ton bug, il date de quand ?



De Solaris 2.8. Sous 2.7, ça se comporte normalement. La différence,
c'est que le 2.7 est issu du 2.5 qui se devait de tourner sur des
machines avec très peu de mémoire (16 ou 32 Mo) alors que le 2.8
demandait déjà beaucoup plus de mémoire pour s'installer. C'était
l'époque des U420R qui étaient vendues d'office avec 512 Mo de
mémoire (si la mienne est bonne).



Donc, vers le décolage de Java, non ?



Hélas oui (mais je ne vois pas trop ce que Java viendrait faire dans
les différents malloc() de Solaris 2.8...).



Une question de gestion des priorités chez Sun ? C'est toi qui as écrit
je crois que Solaris était un bon OS jusqu'à l'arrivée de Java.

Il me semble que le fait important n'est pas tellement qu'il y ait eut
un bug dans les malloc() de Solaris, mais plutôt qu'une fois le bug
identifié, personne ne prenne le temps de le corriger, non ?

Est-ce qu'à un moment, Sun n'a pas surtout misé sur Java, en laissant
un peu de côté Solaris ?

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
JKB
Le 31-05-2010, ? propos de
Re: Apprendre le langage C et quelques questions,
Marc Boyer ?crivait dans fr.comp.lang.c :
Le 28-05-2010, JKB a écrit :
Le 28-05-2010, ? propos de
Re: Apprendre le langage C et quelques questions,
Marc Boyer ?crivait dans fr.comp.lang.c :

Et ton bug, il date de quand ?



De Solaris 2.8. Sous 2.7, ça se comporte normalement. La différence,
c'est que le 2.7 est issu du 2.5 qui se devait de tourner sur des
machines avec très peu de mémoire (16 ou 32 Mo) alors que le 2.8
demandait déjà beaucoup plus de mémoire pour s'installer. C'était
l'époque des U420R qui étaient vendues d'office avec 512 Mo de
mémoire (si la mienne est bonne).



Donc, vers le décolage de Java, non ?



Hélas oui (mais je ne vois pas trop ce que Java viendrait faire dans
les différents malloc() de Solaris 2.8...).



Une question de gestion des priorités chez Sun ? C'est toi qui as écrit
je crois que Solaris était un bon OS jusqu'à l'arrivée de Java.



Oui, et je maintiens ;-)

Il me semble que le fait important n'est pas tellement qu'il y ait eut
un bug dans les malloc() de Solaris, mais plutôt qu'une fois le bug
identifié, personne ne prenne le temps de le corriger, non ?



Je crois que les BR chez Solaris, au moins sur la partie Solaris
passaient directement vers /dev/null dès que ça ne touche pas
directement à Java. À tel point que je me demande si le but ultime
de Sun n'était pas de tuer Solaris à plus ou moins court terme.

Est-ce qu'à un moment, Sun n'a pas surtout misé sur Java, en laissant
un peu de côté Solaris ?



On dirait. Les versions de Solaris se sont succédées à un rythme
effréné jusqu'à la version 10 (qui est un truc franchement batard,
mais ça n'engage que moi) qui stagne depuis quelques longues
années.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
heron maladroit
Je suis désolé de ne pas être intervenu plus tôt, lire vos expéri ences
me demandait un peu de temps à certains moments car je suis loin de la
profession (informatique) et je ne peux pas trop intervenir dans un
domaine que je ne maîtrise pas sauf sur certains points techniques du
langages.

Je dois aussi dire en réponse que j'ai déjà posté sous un autre
pseudo, simplement je pensais que ce changement "d'identité" qui n'est
pas motivé par quelque chose de particulier pouvait passer inaperçu,
sauf qu'il y a toujours un détail révélateur... : bpascal123.

Pour donner une réponse globale aux posts qui me concernent, c'est
évident que la marche est haute avec le langage c. Je me souviens de
ce samedi soir ou exténué d'installer pour la enième fois ubuntu sur
un netbook sans que soit le son, soit le micro soit compiz, soit autre
chose ne fonctionne...je me dis, je vais relever mes manches et
participer à la programmation des drivers pour porter linux sur les
machines que j'utilise. Je recherche quelque chose comme "comment
apprendre à programmer un driver pour linux" sur google et parmi les
résultats je tombe sur un site qui donne la voie à suivre et conseil
de bonnes bases en langage c. Langage que je ne connaissais pas, tout
comme la programmation à part vba.

Je ne suis pas sûre pour quelles raisons (programmer en vba
certainement), quelques années avant, j'avais décidé d'apprendre
quelques bases sur les algorithmes toujours en autodidacte à partir
des ressources accessibles sur internet.

Ca fera un an que je me suis investi dans l'apprentissage du langage
c. J'ai bien regardé d'autres langages entre temps mais au bout de
quelques semaines avec le langage c, j'ai apprécié. J'ai essayé de
m'intéresser à la POO avec VB pour m'orienter indirectement vers VBA.
Seulement l'apprentissage des objets m'a freiné.

Et puis le langage c semble assez structuré pour apprendre comme
autodidacte. J'ai lu plus haut qu'une personne avait mis quelque chose
comme 1 semaine pour apprendre l'assembleur et quelque chose comme 3
mois ou plus pour apprendre le langage c. De mon côté, j'ai essayé de
faire un peu d'assembleur mais il existe tellement de systèmes(asm,
iasm, windows, linux... ) que j'ai été découragé. Juste pour
connaître les bases du langage c et quelques bases de l'assembleur, je
me suis dit alors que ça faisait trop. Mais si quelqu'un dit que c'est
plus simple d'apprendre l'assembleur que le langage c, je serais
curieux de connaître sa méthode. Mais je reconnais qu'il y a certains
domaines ou être autodidacte n'est pas simple. Pour reprendre un autre
post ou il est dit qu'il vaut mieux choisir le langage informatique
qu'une personne autour de soi connaît...

Je me suis rendu compte que programmer un driver avec une formation de
comptable demanderait de tels efforts que ça serait peine perdue.
Alors je continue avec le langage c car j'ai commencé et je souhaite
atteindre un certain niveau avant de changer et actuellement je
m'intéresse au C++. Certaines notions fondamentales semblent se
retrouver dans les 2 langages ; les constantes, enum et surtout les
structures qui me paraissent être les bases du langage objet que je
crois voir dans la notation pointée. Je ne sais pas si c'est le cas,
mais je me dis que savoir manipuler les structures de données en lang
c peut aider en c++.

Je ne suis pas sûre où ce que j'apprends peut me mener. Il me semble
qu'on se dirige vers une spécialisation à travers des équipes
d'informaticiens ou chacun à un rôle, je suppose que c'est le cas avec
ajax, c++, un ou plusieurs spécialistes en javascript, css, xml,
php...en c++ le langage permet de diviser assez facilement les tâches
je crois comprendre...En c, des personnes d'expérience 10, 20...30 ans
qui ne font que ça apportent leur expertise pour créer un driver pour
tel ou tel système...

Je sais que je ne peux pas concurrencer des professionnels mais après
avoir vécu avec des amstrad cpc 64 et 6128, commodore 64, atari st
520, 1040, pc 1512 ... je me sens attiré par l'informatique. Pour
reprendre un autre post, les jeux et applications vendus en boîte pour
un certain prix et aujourd'hui ces jeux sont disponibles en
téléchargement et sont plus abordables financièrement et de bonnes
qualités (peut-être parce que le nombre de clients et l'offre
d'application ont augmenté).

Peut-être après avoir fourni certains efforts pour apprendre un ou
plusieurs langage, je ne vais rien créer d'exceptionnel et simplement
apporter un plus à mon métier de comptable mais je ne crois pas qu'une
personne qui connaît un ou plusieurs langages informatique peut ne pas
se sentir concernée par les possibilités de vendre une part de sa
création même en dehors de son métier de salarié? Ou bien, je ne fa is
que rêver et la réalité est que tout est offshore en Inde, Chine... u n
peu comme avec l'industrie du textile et les pays tigres il y 20 ou 30
ans.

Être réaliste, c'est aussi savoir se déclarer vaincu ou tout
simplement faire le bon choix...

nouveau pseudo : heron maladroit
pseudo précédent : bpascal123
Avatar
-ed-
On 6 juin, 04:00, heron maladroit wrote:

Pour donner une réponse globale aux posts qui me concernent, c'est
évident que la marche est haute avec le langage c. Je me souviens de
ce samedi soir ou exténué d'installer pour la enième fois ubuntu su r
un netbook sans que soit le son, soit le micro soit compiz, soit autre
chose ne fonctionne...je me dis, je vais relever mes manches et
participer à la programmation des drivers pour porter linux sur les
machines que j'utilise.



Bah, si tu n'es pas un expert dans le domaine, tu n'as pas de grande
chance de pouvoir intervenir toi même. Le langage C n'est que l'outil
qui permet d'écrire ou de modifier des drivers.

Pense-tu que de savoir tenir un tournevis fait de toi un expert dans
le réglage d'un moteur à explosion ?

Il faut bien plus de connaissances techniques pour pouvoir agir
efficacement, à commencer par un très bonne connaissance des
'modules', du système, du mode kernel, de l'architecture matériel de
sa plateforme et de l'extension mise en cause etc. En effet, les
drivers sont une extension du noyau du système, et fonctionnent donc
dans un mode particulier qui interdit l'usage de certaines fonctions
(printf(), par exemple, mais on s'en sort avec un printk(), malloc()
etc.). De plus, il faut tenir compte des éventuels aspects temps réel
(interruptions, tâches etc.). Et je ne parle pas des problèles de
mémoire logique vs mémoire physique ... C'est très complexe et pas du
tout à la portée de quelqu'un qui débute en informatique, et qui
semble, de plus avoir du mal avec les notions de base ...


Je recherche quelque chose comme "comment
apprendre à programmer un driver pour linux" sur google et parmi les
résultats je tombe sur un site qui donne la voie à suivre et conseil
de bonnes bases en langage c. Langage que je ne connaissais pas, tout
comme la programmation à part vba.

Je ne suis pas sûr pour quelles raisons (programmer en vba
certainement), quelques années avant, j'avais décidé d'apprendre
quelques bases sur les algorithmes toujours en autodidacte à partir
des ressources accessibles sur internet.

Ca fera un an que je me suis investi dans l'apprentissage du langage
c. J'ai bien regardé d'autres langages entre temps mais au bout de
quelques semaines avec le langage c, j'ai apprécié. J'ai essayé de
m'intéresser à la POO avec VB pour m'orienter  indirectement vers V BA.
Seulement l'apprentissage des objets m'a freiné.

Et puis le langage c semble assez structuré pour apprendre comme
autodidacte.



Pas vraiment. Pascal est un langage universitaire très structuré, et
sans 'zones d'ombre'. Tout est défini, sinon, on ne peut pas compiler
(ce qui n'empêche pas de faire des erreur de programmation, mais au
moins, le comportement est prévisible).

En C, qui est un langage pragmatique (d'origine industrielle), on
compte sur la qualité du programmeur pour faire attention à ce qu'il
écrit. Il n'y a quasiment aucun contrôle et si on est pas un expert,
on a toutes les chances de faire n'importe quoi. Ce n'est pas du tout
un langage de débutant.

J'ai lu plus haut qu'une personne avait mis quelque chose
comme 1 semaine pour apprendre l'assembleur et quelque chose comme 3
mois ou plus pour apprendre le langage c.



Et ? Mozart était un génie, Tu penses pouvoir apprendre la musique et
la composition aussi facilement ?

De mon côté, j'ai essayé de
faire un peu d'assembleur mais il existe tellement de systèmes(asm,
iasm, windows, linux... )  que j'ai été découragé. Juste pour



Oui, car, désolé de de décevoir, mais tu es comme la majorité d'ent re
nous, c'est à dire pas très doué pour ce sujet. Ne pas se laisser
aveugler par les prestations de quelques petits génies ... On est tous
passés par des phases d'apprentissages longue et laborieuses et
probablement sans fin, car la technologie évolue tous les jours ...
(encore une fois, un langage n'est qu'un outil relativement bien
défini et stable, mais l'usage qu'on en fait n'a pas de limites ...)


connaître les bases du langage c et quelques bases de l'assembleur, je
me suis dit alors que ça faisait trop. Mais si quelqu'un dit que c'est
plus simple d'apprendre l'assembleur que le langage c, je serais
curieux de connaître sa méthode. Mais je reconnais qu'il y a certains
domaines ou être autodidacte n'est pas simple. Pour reprendre un autre
post ou il est dit qu'il vaut mieux choisir le langage informatique
qu'une personne autour de soi connaît...



De formation électrinique (Bac F2, niveau BTS), je suis quasiment
autodidacte en informatique (j'ai du faire 5 jours de stage de C où
les seules choses que j'ai apprises sont les listes chainées et les
arbres). Par contre, j'ai commencé par le BASIC (le vrai : 10 GOTO 10,
une catastrophe), et j'ai été sauvé par le Pascal qui m'a enfin donn é
ce que je cherchais (structures de code et de données). A la même
époque, j'ai été initié à l'assembleur x86 lors d'un stage long d e
micro-informatique industrielle. Je suis ensuite rapidement passé au
C. Mais à l'époque, pas de forum, pas de soutient. Juste le K&R, seul
livre disponible ...

Après quelques années de pratique en milieu industriel, je me suis
intéressé au forum f.c.l.c (ici-même) et à sa version 'originale'
comp.lang.c, ce qui m'a ouvert les yeux sur bien des aspects obscurs
du langage C que j'ignorais.

Par contre, il me manque une étude avancée de l'algorithmie qui me
frêne dans la mise en œuvre des applications complexes. Je n'ai
visiblement pas le cerveau fait pour ça, et les arbres (Huffman, par
exemple) me donnent des boutons... Un informaticien 'moderne' et bien
formé a un niveau BAC +5, ce qui est loin d'être mon cas ...

Je me suis rendu compte que programmer un driver avec une formation de
comptable demanderait de tels efforts que ça serait peine perdue.



Sans notions d'électronique, c'est pas facile ... Mais tout
s'apprend ... Il faut du temps, de la motivation, du gout pour le
sujet, et peut être quelques prédispositions, je ne sais pas trop ...

Alors je continue avec le langage c car j'ai commencé et je souhaite
atteindre un certain niveau avant de changer et actuellement je
m'intéresse au C++.  Certaines notions fondamentales semblent se
retrouver dans les 2 langages ;



Il y a une base commune, mais malheureusement (et contrairement à
Objective-C), le C++ n'est pas un sur-ensemble du C. Il y a des points
de divergences qui provoquent, une fois encore, bien des confusions
(eh oui, encore un langage industriel, pas de chance ...)

http://www.david.tribble.com/text/cdiffs.htm

les constantes, enum et surtout les
structures qui me paraissent être les bases du langage objet que je
crois voir dans la notation pointée. Je ne sais pas si c'est le cas,
mais je me dis que savoir manipuler les structures de données en lang
c peut aider en c++.



Oui, vaguement, mais le plus important en C++ est la notion de classe,
évidemment, qui repose sur la théorie de la POO. J'ai cru comprendre
que tu n'aimais pas ...

Je ne suis pas sûr où ce que j'apprends peut me mener.



Je crois qu'on te l'a dit plusieurs fois, mais la connaissance d'un ou
plusieurs langage ne fera pas de toi un expert de la théorie de la
programmation, ni un expert de la mise en œuvre de telle ou telle
technologie ... L'informatique, c'est beaucoup plus large que la
simple utilisation (correcte) d'un langage quel qu'il soit. La
programmation sous Windows, par exemple, nécessite, avant tout, la
connaissance de la technologie Windows, qui n'a rien à voir avec
l'apprentissage d'un langage (même si certains aspects du C sont
utilisés pour définir les interfaces des fonctions systèmes de
Windows).

A toi de te fixer un objectif clair et réaliste, et d'apprendre les
technologies et outils nécessaires pour y arriver.

Il me semble
qu'on se dirige vers une spécialisation à travers des équipes
d'informaticiens ou chacun à un rôle, je suppose que c'est le cas ave c
ajax, c++, un ou plusieurs spécialistes en javascript, css, xml,
php...en c++ le langage permet de diviser assez facilement les tâches
je crois comprendre...



Tu fais une fixation sur les langages... Tu as tord. Ce sont les
technologies mises en œuvre qui font la spécialisation. Par exemple,
un spécialiste du calcul scientifique n'a que faire du web ou des
bases de données (quoi que, calcul partagé ... mauvais exemple...).

En c, des personnes d'expérience 10, 20...30 ans
qui ne font que ça apportent leur expertise pour créer un driver pour
tel ou tel système...



Alors c'est là que tu te trompes. Tu peux avoir fait 30 ans de C, ça
ne fera pas de toi un expert de la programmation de drivers.

Pour programmer un driver linux, (module), il faut déjà commencer par
comprendre ce qu'est le noyau du système et comment s'y "greffe" un
module. Il faut comprendre comment est organisé le système de fichier,
(car un driver devient une sorte de fichier particulier), en
comprendre l'interface normalisé (open, close, read, write, poll
etc.). Ça demande pas mal de connaissances et d'expérimentations, rien
que pour maitriser l'existant.

Ensuite, il faut apprendre à maitriser l'environnement de
développement très particulier des modules (rien à voir avec le
développement d'une application basique genre console), et les moyens
de tester le bazar sans planter toute la machine (en mode kernel,
c'est vite fait !)

Aucune de ces connaissance n'a de lien avec le langage C.

Là où il intervient, c'est dans l'écriture du code et dans l'appel de s
différentes fonctions systèmes permettant de réaliser le driver.
Encore faut-il savoir quoi écrire à l'intérieur des fameuses fonction
open() read() etc. On peut s'adresser directement au matériel, ou
utiliser des fonctions des drivers de bas niveau existants. Tout celà
est fort complexe, et encore une fois la connaissance du langage C (et
surtout de ses fonctions standards) n'aide pas. D'ailleurs sous Linux,
le langage utilisé est GNUC, un dérivé proche du C...

Je sais que je ne peux pas concurrencer des professionnels mais après
avoir vécu avec des amstrad cpc 64 et 6128, commodore 64, atari st
520, 1040, pc 1512 ...



Des machines 'historiques' extrêmement simples comparées aux monstres
d'aujourd'hui ...

je me sens attiré par l'informatique. Pour
reprendre un autre post, les jeux et applications vendus en boîte pour
un certain prix et aujourd'hui ces jeux sont disponibles en
téléchargement et sont plus abordables financièrement et de bonnes
qualités (peut-être parce que le nombre de clients et l'offre
d'application ont augmenté).



Gné ? Quel vélo ?

Peut-être après avoir fourni certains efforts pour apprendre un ou
plusieurs langage, je ne vais rien créer d'exceptionnel et simplement
apporter un plus à mon métier de comptable mais je ne crois pas qu'un e
personne qui connaît un ou plusieurs langages informatique peut ne pas
se sentir concernée par les possibilités de vendre une part de sa
création même en dehors de son métier de salarié? Ou bien, je ne fais
que rêver et la réalité est que tout est offshore en Inde, Chine... un
peu comme avec l'industrie du textile et les pays tigres il y 20 ou 30
ans.



Tu continues à confondre langage, programmation, informatique.
Commence par mettre de la clarté dans ton esprit, tu y verras plus
clair, et tu constateras que tu ne te poses pas les bonnes
questions...
Avatar
espie
In article ,
-ed- wrote:
On 6 juin, 04:00, heron maladroit wrote:

Pour donner une réponse globale aux posts qui me concernent, c'est
évident que la marche est haute avec le langage c. Je me souviens de
ce samedi soir ou exténué d'installer pour la enième fois ubuntu sur
un netbook sans que soit le son, soit le micro soit compiz, soit autre
chose ne fonctionne...je me dis, je vais relever mes manches et
participer à la programmation des drivers pour porter linux sur les
machines que j'utilise.



Bah, si tu n'es pas un expert dans le domaine, tu n'as pas de grande
chance de pouvoir intervenir toi même. Le langage C n'est que l'outil
qui permet d'écrire ou de modifier des drivers.



Meme en etant un expert, il y a parfois besoin d'etre "interne" au processus
pour pouvoir developper certains pilotes.

Je ne sais pas si la situation s'est assainie recemment, mais il y avait
pas mal de pilotes linux qui, en pratique, n'etaient pas vraiment ouverts.

Quand tu vois un pilote qui a ete ecrit par un mec sous NDA (et employe de
la boite qui fabrique le matos), bourree de magic constants, et sans un
commentaire, tu as un peu l'impression que c'est juste une facon de
te donner du binaire sans le dire. Petit avantage: si c'est bien foutu,
ca compile ailleurs que sur i386. Gros inconvenient: c'est importable sur
d'autres OS.

Si la communaute linux etait un peu plus vigilante par rapport a ce genre
de choses, et n'etait pas la premiere a accepter tout et n'importe quoi
(entre ndiswrapper pour les cartes reseaux, ou les pilotes proprietaires
nvidia, et leur ridicule excuse de pilote libre), on ne serait sans doute
pas dans la merde noire ou on est actuellement, avec une grosse partie
des boites qui ne joue pas du tout, du tout, le jeu...
Avatar
JKB
Le 06-06-2010, ? propos de
Re: Apprendre le langage C et quelques questions,
Marc Espie ?crivait dans fr.comp.lang.c :
In article ,
-ed- wrote:
On 6 juin, 04:00, heron maladroit wrote:

Pour donner une réponse globale aux posts qui me concernent, c'est
évident que la marche est haute avec le langage c. Je me souviens de
ce samedi soir ou exténué d'installer pour la enième fois ubuntu sur
un netbook sans que soit le son, soit le micro soit compiz, soit autre
chose ne fonctionne...je me dis, je vais relever mes manches et
participer à la programmation des drivers pour porter linux sur les
machines que j'utilise.



Bah, si tu n'es pas un expert dans le domaine, tu n'as pas de grande
chance de pouvoir intervenir toi même. Le langage C n'est que l'outil
qui permet d'écrire ou de modifier des drivers.



Meme en etant un expert, il y a parfois besoin d'etre "interne" au processus
pour pouvoir developper certains pilotes.



C'est un euphémisme. Je n'ai jamais développé de pilotes pour
Linux/x86, mais pour Linux/sparc, c'est exactement ça. C'est même
tellement ça que certains pilotes sont cassés par d'autres parce
qu'il y a sciemment des effets de bords (je pense en particulier aux
pilotes SCSI ESP dont il faut dégrader les performances pour qu'ils
fonctionnent sur du matos un peu ancien parce que le pilote récent
casse un peu tout).

Je ne sais pas si la situation s'est assainie recemment, mais il y avait
pas mal de pilotes linux qui, en pratique, n'etaient pas vraiment ouverts.



Je peux de répondre : non.

Quand tu vois un pilote qui a ete ecrit par un mec sous NDA (et employe de
la boite qui fabrique le matos), bourree de magic constants, et sans un
commentaire, tu as un peu l'impression que c'est juste une facon de
te donner du binaire sans le dire.



Il y a bien pire que ça. Depuis quelques mois, on voit fleurir des
firmwares binaires pour des pilotes qui n'en ont pas besoin. Je
pense en particulier aux pilotes FCAL des Sun. Solaris n'utilise pas
de firmware chargé à la volée. OpenBSD non plus. FreeBSD encore
moins. Linux charge ce #@^[@# de pilote sous forme de _binaire_. Et
c'est exactement pareil pour les décodeur TV. Ça ne se justifie pas,
mais c'est comme ça, tu te démerde avec, et surtout, c'est très
pratique à installer.

Petit avantage: si c'est bien foutu,
ca compile ailleurs que sur i386. Gros inconvenient: c'est importable sur
d'autres OS.



Non. Je croyais que les firmwares consistait à une initialisation du
matériel et donc étaient des binaires adaptés à un processeur
embarqué dans la carte ou le composant en question jusqu'à ce que
j'essaye d'utiliser un décodeur TV sur interface USB. Et bien, ça ne
fonctionne pas ailleurs que sous i386/amd64, preuve soit que le
pilote est écrit avec un pied et qu'il a des problèmes de boutisme,
soit que le binaire en question s'adresse au CPU principal et non à
un hypothétique CPU dans le décodeur TV.

Si la communaute linux etait un peu plus vigilante par rapport a ce genre
de choses, et n'etait pas la premiere a accepter tout et n'importe quoi
(entre ndiswrapper pour les cartes reseaux, ou les pilotes proprietaires
nvidia, et leur ridicule excuse de pilote libre), on ne serait sans doute
pas dans la merde noire ou on est actuellement, avec une grosse partie
des boites qui ne joue pas du tout, du tout, le jeu...



Contrairement aux communautés BSD, la communauté Linux (si elle
existe) essaye de concurrencer Windows et essaye de supporter au
plus vite les derniers matériels. La conséquence de cette
inconséquence, c'est l'inclusion de firmwares ou de binaires dans le
noyau.

Je pense de toute façon que Linux est mort à courte ou moyenne
échéance si le développement du noyau continue comme il est fait
actuellement ou chaque changement de noyau revient à essuyer les
plâtres avec une brique. Jusqu'à la série 2.4, on pouvait facilement
bosser avec des noyaux vanilla. Aujourd'hui, c'est impossible sauf à
tester chaque configuration spécifiquement. Le nombre de bugs qui
sont dans le mainstream et qui y restent parce que ce n'est pas
visible sur l'architecture dominante est indigne d'un noyau d'OS.

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Antoine Leca
JKB écrivit :
Marc Espie ?crivait dans fr.comp.lang.c :
Petit avantage: si c'est bien foutu, ca compile ailleurs que sur i386.
Gros inconvenient: c'est importable sur d'autres OS.



Non.



Non quoi ? Non il n'y a même pas le petit avantage quand le driver est
bien foutu (ce qui est effectivement rare, ÀMHA) ?
Ou non l'inconvénient n'est pas gros, ou ce n'est pas d'être importable,
ou le fait d'être importable n'est pas un inconvénient ?


Antoine (qui est par ailleurs assez en accord avec vos positions)
Avatar
JKB
Le 07-06-2010, ? propos de
Re: Apprendre le langage C et quelques questions,
Antoine Leca ?crivait dans fr.comp.lang.c :
JKB écrivit :
Marc Espie ?crivait dans fr.comp.lang.c :
Petit avantage: si c'est bien foutu, ca compile ailleurs que sur i386.
Gros inconvenient: c'est importable sur d'autres OS.



Non.



Non quoi ? Non il n'y a même pas le petit avantage quand le driver est
bien foutu (ce qui est effectivement rare, ÀMHA) ?



Et bien, c'est non parce que les pilotes bourrés de 'magic
constants' s'adressent soit à des fonctionnalités des puces pas
forcément correctement documentées, soit à des processeurs
spécifiques (adressages spéciaux, ruses de programmation pour
contourner des problèmes des composants et attaquer des opérations
atomiques...).

Lorsque le truc compile et fonctionne sur un i386, cela ne veux pas
dire qu'il va fonctionner sur un sparc parce que le code assemblé à
la main et collé dans des tableaux d'entiers ne fonctionnera pas.
Idem pour les firmwares binaires (j'ai une carte Wifi Ralink dans un
adaptateur Sbus/pcmcia qui n'a _jamais_ fonctionné à cause de ça).

Ou non l'inconvénient n'est pas gros, ou ce n'est pas d'être importable,
ou le fait d'être importable n'est pas un inconvénient ?



Le problème est d'avoir des choses pas vraiment documentées et
dépendante de l'architecture.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
espie
In article ,
JKB wrote:
Et bien, c'est non parce que les pilotes bourrés de 'magic
constants' s'adressent soit à des fonctionnalités des puces pas
forcément correctement documentées, soit à des processeurs
spécifiques (adressages spéciaux, ruses de programmation pour
contourner des problèmes des composants et attaquer des opérations
atomiques...).

Lorsque le truc compile et fonctionne sur un i386, cela ne veux pas
dire qu'il va fonctionner sur un sparc parce que le code assemblé à
la main et collé dans des tableaux d'entiers ne fonctionnera pas.
Idem pour les firmwares binaires (j'ai une carte Wifi Ralink dans un
adaptateur Sbus/pcmcia qui n'a _jamais_ fonctionné à cause de ça).



Ca, c'est pas specialement propre aux pilotes semi-proprietaires remplis
de magic constant. Suffit d'avoir les idees pas tres claires sur ton bus
et ton peripherique, pour que hop, un coup de changement d'endianess du
processeur, et paf tu as perdu. Deja teste maintes fois sur des cartes
PCI qui ne marchaient plus des que tu les mettais dans un sparc ou un powerpc,
parce que le pilote supposait que ton architecture hote etait i386...

Bref, c'est plus propre aux pilotes non testes ailleurs que sur i386.

Les pilotes opaques remplis de magic constant ne font qu'exacerber les
choses.
5 6 7 8 9