OVH Cloud OVH Cloud

Fichier Windows et matériel Linux

294 réponses
Avatar
nom
Bonjour,

A supposer qu'une entreprise veuille mettre son parc sous Linux.
Et qu'elle reçoive des documents venant d'Access, Excel,... peut-elle
les lire , les travailler et les renvoyer de manière que le
destinantaire sur produits Microsoft puisse les lire, etc...
?


Merci

10 réponses

Avatar
Richard Delorme

3.4.3
1 *undefined behavior*
behavior, upon use of a nonportable or erroneous
program construct or of erroneous data for which
this International Standard imposes no requirements

En clair et en français, un comportement indéfini veut juste
dire que le Standard n'en a rien à battre des programmes
erronés ou des programmes non portables.



Prends un peu de recul : ce que je critique dans le C, c'est la
notion même de programme "erroné". Je ne vois quel point tu fais
quand tu cites la norme.


Parce que, à te lire, on pourrait comprendre qu'un comportement indéfini
est un comportement aberrant d'un programme, alors qu'il ne s'agit que
d'une position d'un comité de normalisation par rapport à la façon de
traiter certains programmes erronés, en laissant le choix à l'implémenteur.

Maintenant, si on écrit un programme correct, où est le
problème ?


Le comportement indéfini n'est pas un problème quand il ne
se produit pas. Sympa comme logique.


Écrire un programme correct en C est faisable. La Norme signale
parfaitement toutes les situations produisant un comportement indéfini.
On peut les éviter par une bonne connaissance du langage, et la
concision du langage C le facilite : il n'y a que 95 comportements
indéfinis en C89, soit 4 pages d'erreurs à éviter.

Non, la seule défense du C, c'est que c'est un assembleur
portable, et il faut vivre avec les conséquences.


Assimiler le C a de l'assembleur est ridicule.

--
Richard


Avatar
george
JKB , dans le message , a
écrit :
Et pourquoi ? Dans l'ensemble des langages possibles, il existe
l'interprété et le compilé (plus quelques trucs exotiques)


Et dans tout ça, tu places Lisp où ? Forth ? Et java en bytecode ? Et
java avec un JIT ? Et perl ? Et les expressions régulières dans perl ?
Et printf en C, c'est compilé ou interprété ?

Entre l'assembleur pur et l'interprété pas à pas, il y a tout un
continuum de possibilités, et aucun langage, en partique, ne se situe
réellement à un extrême, il y a toujours un peu des deux.

Avatar
David MAREC
Bonjour,
D'après Manuel Leclerc:

Indiscutable ?

Tiens, un exemple marrant :

if (library == NULL)
len = strlen(idstr) + 1;
else
len = strlen(library) + strlen(idstr) + 1;
strdata = (char *) malloc (len);


Hum.

strcpy(strdata, library);
strcat(strdata, idstr);

En pascal, c'est plutôt :

strdata := library + idstr;


Les chaines de caractères ont une taille maximum fixe en Pascal, si ma
mémoire est bonne.
Ce que vous venez d'écrire en Pascal n'est pas l'équivalent de la
version "C".

Avatar
george
"Manuel Leclerc" , dans le message <40e1741a$, a écrit :
Accessoirement, réfléchis un peu à ce que peut donner
quelque chose du style :

file = path + "/" + basename + "." + extension

en C ou avec ton compilateur pascal.
???



Eh bien avec une bonne partie des compilateurs, ce code sera implémenté
sous forme de :

temp1 = path + "/";
temp2 = temp1 + basename;
temp3 = temp2 + ".";
file = temp3 + extension;

Soit path copié trois fois pour rien. Pour éviter ça, il faut que
l'optimisation ait été spécifiquement prévue dans le compilateur, et si
tu espères que ces optimisations seront prévues dans tous les cas
possibles, tu es bien naïf.

Et ceci est un problème bien réel. J'ai déjà vu des gens coder en java
des trucs du style

chaine = "";
for(...) {
chaine += nouveau_bout;
}
return chaine;

Je ne te racconte pas la lenteur du résultat.


Avatar
JKB
Le 29-06-2004, à propos de
Re: Fichier Windows et matériel Linux,
Nicolas George écrivait dans fr.comp.os.linux.debats :
JKB , dans le message , a
écrit :
Et pourquoi ? Dans l'ensemble des langages possibles, il existe
l'interprété et le compilé (plus quelques trucs exotiques)


Et dans tout ça, tu places Lisp où ? Forth ? Et java en bytecode ? Et
java avec un JIT ? Et perl ? Et les expressions régulières dans perl ?
Et printf en C, c'est compilé ou interprété ?


Votre question n'a aucun sens. Forth à de rares exceptions est
interprété. Printf est géré par le C, donc interprété ou compilé
selon l'implantation du langage (il existe des interpréteurs C)...

Entre l'assembleur pur et l'interprété pas à pas, il y a tout un
continuum de possibilités, et aucun langage, en partique, ne se situe
réellement à un extrême, il y a toujours un peu des deux.


Révisez vos définitions. L'assembleur n'est pas un compilateur, de
même que la compilation ne se réduit pas à l'assemblage.

JKB


Avatar
j
Le Tue, 29 Jun 2004 13:25:38 +0000 (UTC) après l'an de grâce,
inspiré(e) (Nicolas George) écrivait la plume
légère :

C'est vrai, et c'est même tellement vrai qu'à haut niveau, c'est ce
formalisme qui est employé. Cependant, cette notation a de gros
problèmes pour l'enseignement, en ce qu'elle favorise manipulations
qui ne sont pas forcément légitimes. J'ai déjà vu quelqu'un simpl ifier
f


C'est aussi la raison pour laquelle Bourbaki a décidé de shunter la
géométrie comme manière d'apprendre les maths et remplacer cela par
l'apprentissage des théories ensemblistes :
raison officielle :


dans f'/f, et ne garder que ', si on enseignait la même chose avec les
formes différentielles, 80% des élèves, au bas mot, feraient n'impo rte
quoi. Le pire étant qu'environ la moitié des manipulations abusives


Quand les élèves dessinent ils font toujours des figures particulières
qu'ils prennent pour le cas général.


Cependant tant la géométrie que la notation de Leibniz aussi fausses
soient-elles permettent se bâtir une intuition des maths

Quant aux smplification si on regarde les domaines où elles sont
valides (aka les fonctions de physiciens ie. celles qui sont dérivables
à l'infini, continues en tout point ou presque ;) ), elles sont tout à
fait légitimes.
Oui, la plupart du temps df(x,y)/dxdyß(x,y)/dydx et quand c'est plus
le cas, c'est que vous êtes un chercheur qui travaille sur un problème
pointu.


En math ce qui doit primer c'est la capacité à manipuler les outils pour
obtenir un résultat où la capacité à montrer que l'on est capable de
manipuler le formalisme?

qu'on a envie de faire avec les dx sont, au final, exactes, mais pour
des raisons autres.


Tu es contre le RPN qui est plus simple (car moins trompeur que les
parenthèses) mais contre-intuitif, et et tu es pour la notation de
Leibnitz parce qu'elle est inuitive (donc soit-disant trompeuse) ?
En fait, tu es pour faire ce qui a été toujours fait ?


Soit dit en passant, le professeur Gleick (épistémologue) écorne la
raison officielle de l'utilisation de la théorie des ensembles pour
l'apprentissage. Selon lui, l'école mathématique française bien
représentée à normale aurait été un peu énervée par Poincar é (le dernier
grand mathématicien français) qui se serait mis en avant et surtout
prétendait que l'intuitation et la créativité sont bien plus
fondamentales en sciences que le formalisme et la technique.



La sélection par les maths moderne ne mesure pas le niveau scientifique
d'un étudiant, mais juste sa capacité à être un singe savant.



--
Progress might have been all right once, but it's gone on too long.
-- Ogden Nash

Avatar
remy
"Nicolas George" a écrit dans le message de news:
cbrtg8$hnb$
Accessoirement, réfléchis un peu à ce que peut donner
quelque chose du style :

file = path + "/" + basename + "." + extension

en C ou avec ton compilateur pascal.
???



Eh bien avec une bonne partie des compilateurs, ce code sera implémenté
sous forme de :

temp1 = path + "/";
temp2 = temp1 + basename;
temp3 = temp2 + ".";
file = temp3 + extension;

Soit path copié trois fois pour rien. Pour éviter ça, il faut que
l'optimisation ait été spécifiquement prévue dans le compilateur, et si
tu espères que ces optimisations seront prévues dans tous les cas
possibles, tu es bien naïf.

Et ceci est un problème bien réel. J'ai déjà vu des gens coder en java
des trucs du style

chaine = "";
for(...) {
chaine += nouveau_bout;
}
return chaine;



String tab[]=new String[100];

//init du tableaux

public String concaTab(String t[])
{
String chaine = "";
for(...)
{
chaine += t[i];
}
return chaine;

}

tu propose quoi comme autre solution en java
a+ remy




Je ne te racconte pas la lenteur du résultat.




Avatar
Richard Delorme

Si, par « mécanisme "built-in" », tu veux dire que les autres
langages font des choses, comme l'allocation dynamique ou la
mesure de la longueur d'une chaîne, sans qu'on leur demande,
alors qu'en C tout est explicite, c'est pour moi indiscutable
que le programme C sera plus efficace.



Indiscutable ?

Tiens, un exemple marrant :

if (library == NULL)
len = strlen(idstr) + 1;
else
len = strlen(library) + strlen(idstr) + 1;
strdata = (char *) malloc (len);
strcpy(strdata, library);
strcat(strdata, idstr);


Ça commence bien : comportement indéfini si strdata ou library vaut
NULL, utilisation d'un idenficateur réservé (strdata), cast inutile, ...

Une version plus correcte et plus rapide serait :

/* library & idstr sont supposées être des chaines valides */
l_library = strlen(library);
l_idstr = strlen(idstr);
sdata = malloc(l_idstr + l_library + 1);
if (sdata) {
strcpy(sdata, library);
strcpy(sdata + l_library, idstr);
}


En pascal, c'est plutôt :

strdata := library + idstr;


Et que fait le langage en interne ? Il n'alloue pas de mémoire pour
strdata ? Il n'a pas besoin de connaître la longueur de library pour lui
concaténer idstr ?
La différence c'est que le comportement ici est opaque, tandis qu'en C,
il est explicite.

L version C sera un plus performante au niveau mémoire
et CPU ? Ce n'est pas évident. strlen et strcat ne
sont pas des fonctions particulièrement conçues pour
optimiser les performances de manipulations de chaîne,
me semble-t-il...


Si, mais il faut les utiliser à bon escient.

En tout cas, au jour d'aujourd'hui, pour des vrais
programmes de la vraie vie, je classe la version C dans
la catégorie "brain fuck".


Les vrais programmes de la vraie vie sont écrit en C, pas en Pascal.

--
Richard


Avatar
chmod 777
Manuel Leclerc wrote:

C'est un truc genre "type de donnée string" par exemple. Comme
en pascal.


Pascal est un type en string?

OK, OK, pas taper!!!

Je n'ai pas pu résister: j'ai dû trop fréquenter alt.sex.nimporte.quoi ;o)

Lionel


--
Mon adresse EST valide: ne rien supprimer!
J'espère être tranquille grâce à la méthode Paugam

Avatar
remy

Une version plus correcte et plus rapide serait :

/* library & idstr sont supposées être des chaines valides */
l_library = strlen(library);
l_idstr = strlen(idstr);
sdata = malloc(l_idstr + l_library + 1);
if (sdata) {
strcpy(sdata, library);
strcpy(sdata + l_library, idstr);
}



prenons un cas "classique"

une base de donnees avec une tab
tu veux la publier sur le woin woin woin

donc tu as un tableau que tu dois contactener
et tu dois enrober chaque ligne du tableau de quelques balises html
par exemple

et dans 1 a 2 ans la taille de ton tableau passe de 50 lignes a 100 lignes

entre un code java et c quel est le plus lisible et quel est celui
qui a un cout de maintenance le moins cher
et au niveau rapidite d'execution l'on est pas loin du kif kif
avec du c propre
sans parler de l'interaction avec la base de donnees

donc le langage depend de l'objectif a mon avi

a+ remy