OVH Cloud OVH Cloud

Give me reasons to switch

56 réponses
Avatar
Philippe
Boujours à tous!

J'aimerais , sans déclencher une avalanche de trolls, vous demander en
toute inocense ce qui vous plait tant dans les *BSD comparé à Linux (Je
viens de la Banquise...), ou au contraire ce qui vous gène dans Linux.
J'aimerait découvrir le monde des *BSD en particulier NetBSD et je
cherche des raisons de m'y mettre.

En toute amicalité, j'espère obtenir des avis intérésants. Les BSDistes
ont souvent une image de puristes ( voire d'extrémistes ) et j'aurais
voulu les entendre pour me faire un idée réaliste.

Sans chercher la guerre de religion, je vous dit à bientôt!

Philippe ^_^

10 réponses

2 3 4 5 6
Avatar
Burelle Marwan
On Mon, 4 Aug 2003 13:05:14 +0000 (UTC)
Marc Espie wrote:

C'est des coups a ne plus developper qu'en smalltalk ca, d'autant
qu'on peut maintenant trouver une jolie implementation sur les 3 BSD:
squeak(pub)


Un peu d'objet en ocaml, c'est pas mal non plus (si tu tiens tant que ca
a l'objet). Mais (je snip toutes les explications), perso, je prefere le
fonctionnel type, et je trouve les modules/functors bien plus simple a
utiliser.

En prime, toujours pour parler de ocaml (decidement je fais de la pub
aujourd'hui, c'est la temperature ca...), l'implem est libre, elle
compile sans probleme sur pas mal de plateforme, on peut travailler avec
une machine virtuelle et du bytecode partout ou ca compile, et un
certains nombre de plateformes disposent d'un support natif tres
performant (en tout cas sous linux et freebsd, les resultats sont plus
qu'a la hauteur, je n'ai pas assez essaye sur Open et Net).

Le defaut, il y en a toujours de toute facon, c'est (meme si pour moi
c'est un avantage) l'aspect fonctionnel, la plus part des gens en ont
pas l'habitude. Apres, pour se comparer au point que tu as evoque sur
java et c++, notament la gestion des erreurs, tu as effectivement des
exceptions, un gc... et puis il y a le typage fort.

Enfin, on est un peu HS par rapport au groupe...

--
Burelle Marwan,
Equipe Bases de Donnees - LRI
http://www.cduce.org
( | )

Avatar
espie
In article ,
Burelle Marwan wrote:
Un peu d'objet en ocaml, c'est pas mal non plus (si tu tiens tant que ca
a l'objet). Mais (je snip toutes les explications), perso, je prefere le
fonctionnel type, et je trouve les modules/functors bien plus simple a
utiliser.


J'aime pas DU TOUT la syntaxe de ML, mais c'est personnel.

Je me demande aussi toujours dans quelle mesure notre vision
franco-francaise est deformee par ce langage developpe ici, et
fortement enseigne a la fac en France, par rapport au reste du monde...
on repere quand meme assez souvent les poles de developpement caml a
la presence, a un moment ou un autre, d'un chercheur INRIA dans le coin...

J'ai vu peu d'applications developpees en caml, et je peux presque toujours
retracer leur existence en deux trois liens jusqu'a Xavier Leroy,
Damien Doligez, Emmanuel Chailloux, ou Jacques Garrigue.

C'est le probleme de ces jolis langages fonctionnels `recents'.
Miranda, Mercury, Haskell, OCaml, SMLNJ sont tous tres bien. Et si tu
mets toutes leurs communautes ensemble, je ne suis meme pas sur que tu
arrives a la taille de la communaute Common-Lisp (et tu es loin derriere
la communaute Perl ou C. Et meme la communaute Java, mais comme la
communaute Java est surtout constituee de mediocres, ca n'est pas un mal).

Et je suis pas trop convaincu par certains des aspects `experimentatoires'
de ocaml (cote gestion d'objets par exemple).

Pour en revenir a BSD, l'aspect byte-code+implementation native est
source de bugs dans l'arbre des ports: nos petits camarades testent
le plus souvent sur 386 (`ca marche chez moi') et oublient allegrement
les quelques archis ou on n'a que du byte-code.


Ami lecteur, un gros troll se cache dans ce message (enfin, meme pas cache,
en fait).

Avatar
espie
In article ,
Miod Vallat wrote:
Pas tous. CC m'a fait remarque l'autre jour que la totalite des fils dans
lesquels tu intervenais derivaient tot ou tard vers la consommation de
boissons

ethyliques ou de choses bonnes a manger.


Et donc, dans ce cas, le thread est déclaré terminé, et on gagne un
«point CC», pas vrai ?


Yep, a decouper a l'explosif sur l'ecran, comme il se doit.


Avatar
pornin
According to Marc Espie :
[des trucs sur Java]

Marc, tu pipotes un peu, et tu as oublié de donner _la_ raison
pour laquelle tu râles contre Java, à savoir qu'il n'y a pas de JVM
native et efficace sous OpenBSD (alors qu'il y en a une sous FreeBSD).


Il y a fort a parier que, tot ou tard, on aura des implementations
java plus efficaces que celles du C++.


Peu probable, maintenant que Microsoft est sorti du bois et torpille
Java à coups de C#.


- evolution rapide, avec une enorme bibliotheque derriere, qui conduit
bien souvent en production a avoir une jvm par appli, ou presque. (et
comme c'est du proprietaire dont on a souvent pas les sources, tout
recompiler ne marche pas trop).


Ceci est bien faux. Le langage est à évolution rapide dans le sens
de l'ajout de classes et de méthodes, mais pas dans le sens de la
disparition. La très grande partie des évolutions se fait sous la forme
de packages indépendants qui sont progressivement rajoutés dans le
"standard" ; on peut notamment distribuer par ailleurs ces packages si
on veut en profiter tout en tournant sur les vieilles JVM (par exemple,
quand on veut utiliser Swing, histoire d'avoir un rendu graphique joli,
mais qu'on veut continuer à tourner sur les JVM 1.1, histoire de rester
compatible avec les malheureux qui utilisent Internet Explorer 4 comme
JVM). J'utilise régulièrement tout un tas d'outils en Java qui marchent
bien sur les vieux JDK (1.1) et que je lance néanmoins sur des JDK
récents (1.4) sans encombre.

Ensuite, la rapidité est très contestable. Le JDK 1.0 date de 1995, on en
est au JDK 1.4. Ça fait 5 versions en 8 ans.


- implementation libre (FSF, par exemple) a la traine (bon d'accord, le
C++ n'est pas tres au point non plus). Plus cafouilleuse qu'Ada, c'est dire!


On peut difficilement reprocher à Sun ou à Java le manque d'intérêt que
porte la FSF au langage. En d'autres lieux, tu serais le premier à
dire que c'est ces salauds de GNU-istes qui tentent d'enterrer Java
(et de promouvoir C# à la place, cf Mono).


- quelques defauts du langage lui-meme: qui a du mal a gerer la genericite
de facon esthetiquement plaisante (peu grave);


Note que Sun est en train de rajouter ça dans son futur JDK 1.5. Ça tient
plus de l'optimisation qu'autre chose, puisque c'est une histoire de
typage statique vs typage dynamique.


qui a supprime les types non signes pour simplifier la vie du
programmeur, ce qui oblige a des atrocites pour manipuler de betes
adresses IPv4;


Soyons précis : il y a un type entier non signé en Java (char). Sinon,
j'ai suffisamment programmé en Java des choses qui nécessitent de
manipuler des mots binaires (algos de cryptographie, essentiellement)
pour pouvoir déclarer que ces "atrocités" sont une vue de l'esprit. Le
manque de types non signés n'est, dans la pratique, pas un problème,
parce que les types signés ont une taille, une représentation mémoire
et un comportement en cas d'overflow garantis et pratiques (complément
à deux, troncature). Les opérateurs binaires bit-à-bit sont présents
et marchent comme il se doit. Le langage force le programmeur à écrire
explicitement les casts qui vont dans le sens de la diminution de taille
des types, et c'est _très bien_.


qui n'a comme concept de `ressource' integree au langage que la
memoire, ce qui est pour moi la pire des conneries de java. Les gens
programment comme des pieds, comme le langage gere la memoire `pour
eux', oublient bien souvent qu'il y a plein d'autres ressources a
gerer, en particulier en cas d'erreur (connexions reseaux, connexions
BD, imprimantes, peripheriques); et le langage n'offre guere
qu'un pauvre `finally' pour gerer ca, au lieu d'exceptions et de
destructeurs en bonne et due forme...


Bwah ! Tous les objets Java ont une méthode finalize() pour ça, et
ce depuis le JDK 1.0 !
Histoire d'être précis : la méthode finalize() est invoquée quand
l'objet est désalloué par le GC. On peut forcer un passage du GC en
appelant System.gc().

Maintenant, si tu veux faire une gestion plus fine de ce genre de choses
(notamment savoir exactement quand ton destructeur est appelé), rien
n'empêche d'écrire tes destructeurs et de les appeler au moment où tu
veux. Il n'y a pas de différence fondamentale entre "delete truc" et
"truc.delete()".


Il y a des choses intelligentes à dire sur les défauts de Java et de la
JVM (et ce sont deux choses distinctes) ; tu en as même trouvées deux ou
trois tout seul. Voilà une liste des défauts que je vois à la JVM, et à
Java :

-- [JVM] La présence d'un garbage collector rend le système peu
utilisable sur les machines avec peu de mémoire (il existe un Java
spécial pour les systèmes embarqués, mais avec des restrictions assez
pénibles). Le seul GC qui soit compatible avec le swap est le compteur
de références, qui, comme on le sait, ne suffit pas à désallouer
les structures circulaires, qu'on fabrique facilement en Java (par
opposition à Perl, par exemple, qui fait du lien faible dans tous les
sens justement pour pouvoir utiliser un GC à compteur de références).
La recherche scientifique a néanmoins accumulé pas mal de résultats sur
les GC (et ce n'est pas un effet de Java : les plus grosses avancées
datent du temps du Lisp) et le GC qu'on trouve dans une bonne JVM
(de chez Sun ou IBM) fournit un travail suffisamment "lisse" pour que
l'interface utilisateur ne soit pas bloquée pendant un temps notable
(par opposition au GC inclus dans emacs, par exemple).

-- [JVM] Le temps d'initialisation est long, donc peu adapté aux
micro-applications "ligne de commande" comme ls ou grep.

-- [JVM] Le bytecode est optimisé pour être compact, afin de rendre
son transfert plus rapide, mais ça se fait un peu au détriment de la
vitesse résultant. On peut attendre des performances supérieures avec
un bytecode différent, tel que celui de la CLI (la machine virtuelle
qui va avec C#). Il reste que le compilateur JIT fourni avec un JDK
1.4 de chez Sun fait plutôt bien son boulot : sur du calcul entier
brutal, donc typiquement le genre de code qui fait le plus souffrir
Java, j'observe un facteur d'au plus 3. Sur une application "typique"
(genre un traitement de texte), la différence est bien moindre.

-- [Java] Le langage manque de quelques facilités syntaxiques qui
rendraient la vie agréable. Idéalement, on aurait un système de "macros"
avec une bonne gestion des noms (comme dans Scheme). Une feature qui
manque est la possibilité de faire en une ligne un "proxy" (encapsuler
un autre objet et déclarer des méthodes de même nom qui forwardent les
requêtes, sans pour autant étendre la classe).

-- [Java] La bibliothèque standard manque d'appels spécifiques Unix.
C'est normale, pour faire quelque chose de portable avec Windows, et
on peut toujours déclarer des méthodes "natives" et les implémenter
en C, mais ce n'est pas "le jeu" et ça fait revenir les problèmes
de bibliothèques dynamiques que le système des fichiers .jar avait
supprimés (penser aux problèmes de distribution d'un programme binaire
en C : il faut linker avec les bonnes versions des bibliothèques ; les
BSD ont tendance à gérer ça mieux que les Linux, mais ça n'a rien de
parfait. Et le C++ rajoute une couche de plus.)

-- [Java] Les tableaux Java n'ont pas la puissance des pointeurs
du C ; on se retrouve souvent à devoir passer une paire
"tableau,offset" là où en C on fournirait un pointeur vers la
bonne entrée dans le tableau. C'est un peu lourdingue syntaxiquement.
Mais on conçoit bien que c'est important pour une gestion "sûre" des
tableaux (avec vérification des limites lors des accès).

-- [Java] Il n'y a pas de primitive de fabrication de types
composites comme des "struct" en C, à part faire des classes.
Quand on veut renvoyer deux "int" en même temps, on doit
définir une classe pour ça, c'est un peu le marteau-pilon pour
éclater la gueule à une mouche.

-- [Java] Il y a un "bug" pénible de la spécification Java. Chaque
classe peut avoir du code "static" exécuté lors du chargement de
la classe. Ce code peut référencer d'autres classes, qui doivent
être chargées avant. Ça construit un graphe de dépendances. Quand
ce graphe est cyclique (ce qui est, essentiellement, un bug du
programme), le chargeur de classes se contente de mettre certaines
références à "null", et ce silencieusement. Ça c'est gonflant.



En dehors de ça, fort de mon expérience, je déclare que Java est
un langage décent, adapté à la programmation d'"applications" (par
opposition à des "commandes"). Il lui manque quelques features, qu'on
peut trouver ici à là dans quelques autres langages, mais je n'ai
pas encore rencontré de langage qui offre une meilleure combinaison
d'efficacité, support syntaxique, et existence d'une large bibliothèque.
À noter le gros avantage de Java (à mon sens) : javadoc.

Quant à la JVM, c'est une machine virtuelle décente, qui a l'avantage
d'exister et de tourner correctement. Même si, conceptuellement, CLI
a l'air plus intéressant sur le long terme.


--Thomas Pornin

Avatar
Erwan David
(Thomas Pornin) écrivait :

On peut difficilement reprocher à Sun ou à Java le manque d'intérêt que
porte la FSF au langage. En d'autres lieux, tu serais le premier à
dire que c'est ces salauds de GNU-istes qui tentent d'enterrer Java
(et de promouvoir C# à la place, cf Mono).


Ah bon c'est pas vrai ? Entre mono et le connecteur Exchange pour
évolution, hein...

--
Monde de merde

Avatar
espie
In article <bgm0ak$2vke$,
Thomas Pornin wrote:
According to Marc Espie :
- evolution rapide, avec une enorme bibliotheque derriere, qui conduit
bien souvent en production a avoir une jvm par appli, ou presque. (et
comme c'est du proprietaire dont on a souvent pas les sources, tout
recompiler ne marche pas trop).


Ceci est bien faux. Le langage est à évolution rapide dans le sens
de l'ajout de classes et de méthodes, mais pas dans le sens de la
disparition. La très grande partie des évolutions se fait sous la forme
de packages indépendants qui sont progressivement rajoutés dans le
"standard" ; on peut notamment distribuer par ailleurs ces packages si
on veut en profiter tout en tournant sur les vieilles JVM (par exemple,
quand on veut utiliser Swing, histoire d'avoir un rendu graphique joli,
mais qu'on veut continuer à tourner sur les JVM 1.1, histoire de rester
compatible avec les malheureux qui utilisent Internet Explorer 4 comme
JVM). J'utilise régulièrement tout un tas d'outils en Java qui marchent
bien sur les vieux JDK (1.1) et que je lance néanmoins sur des JDK
récents (1.4) sans encombre.


Je pense que ton style de programmation te conduit a faire les choses
correctement.

Je n'ai helas pas eu la bonne idee de noter les problemes
qu'on m'a racontes dans le detail, mais j'ai entendu plus d'une fois des
gens se plaindre des problemes qu'ils avaient a mettre en production
plusieurs applications Java en meme temps. Je ne chercherai pas a
argumenter plus, comme je n'ai pas de details precis.
Mais ne t'inquiete pas: la prochaine personne qui a ce genre d'ennuis avec
Java, je te l'envoie, et tu pourras lui expliquer comment il faudrait
faire.


Pour ce qui est de la JVM native sous Open, on en a une, qui compile et
tourne a peu pres en OpenBSD 3.3... le portage est tellement solide qu'il
a completement casse lors du passage en ELF (semblerait que java soit
dependant de certaines particularites de dlopen...), et c'est pas une
jvm-1.4. Mais plusieurs personnes travaillent dessus, et il est clair
qu'on aura une jvm native tot ou tard...

Pour faire un parallele avec d'autres choses, a un moment donne, on n'avait
pas de port de mozilla natif sur OpenBSD, et je tapais sur mozilla. On a
maintenant un port de mozilla natif sur OpenBSD, et je tape toujours sur
mozilla. On a des threads qui marchent `mieux' et je trouve toujours la
programmation multi-threade (a la pthreads, hein) aussi dangereuse entre
les mains du programmeur confirme.

Et ca sera pareil pour java: je n'aimerai toujours pas beaucoup le
langage meme lorsqu'on aura une jvm native.

Alors, tu me diras, y a-t-il une correlation entre ne pas tourner sur
OpenBSD et ne pas susciter mon agrement ?

Pour les trois cas cites, un peu! Si ces trois trucs tournent/ont eu
tourne mal ou pas du tout sur Open, c'est parce que la portabilite de
ces choses n'est pas si bonne, et que l'engin est un peu fragile et
tres facile a casser (voir tres obscur, et pas trop documente cote portage).
Dans la meme serie, j'ai decouvert avec stupefaction recemment que mozilla
ne tournait pas sur certaines archis supportees par Open parce qu'il
necessite des stubs assembleur... qui bien sur n'existent pas.

Or, pour moi, si c'est peu robuste, c'est pas forcement extremement sur...
(et de toutes facons, je fais surtout du OpenBSD dans l'idee de developper
un systeme robuste)


Avatar
Gerald Niel
Le dimanche 03 août 2003 à 12:34 GMT, Nicolas Cartron écrivait sur
fr.comp.os.bsd :

Tu évoquais la puissance des ports, c'est un argument en faveur de
l'utilisation de FreeBSD en tant que station de travail.
Je peux t'assurer que c'est du bonheur à mettre à jour / utiliser /
administrer ! :)


Laissons murrir alors...

@+
--
Voici mon problème, j'ai deux PCs relies par des cartes ethernet,
configures avec le protocole PPP.
-+- Romain in Guide du linuxien pervers - "Ils sont fous ces romains !" -+-


Avatar
shaddai
On Mon, 04 Aug 2003 15:36:27 +0200, Stephane Dupille wrote:
C'est des coups a ne plus developper qu'en smalltalk ca, d'autant qu'on
peut maintenant trouver une jolie implementation sur les 3 BSD: squeak
(pub)


Reste Objective-C alors. C'est grosso-modo une fusion de smalltalk
avec du C. Du peu que j'en ai vu ca a l'air top ! Pas vraiment
repandu... Ca a eu son heure de gloire avec les machines NeXT, et
semble revenir avec les nouveaux Mac.


Mais c'est pas vrai, après quelques discussion conviviales à caractère
informatif sur fcou a propos de macos x, les macounets envahissent fcob
et tentent de faire de nouveaux adeptes. D'ailleurs les macounets ne
forment-ils pas une secte ?
Fort heureusement, apple coule dans 6 mois, tenons bon.

--
We are the knights who say
echo '16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq'|dc


Avatar
Christophe Labouisse
Le Mon, 04 Aug 2003 16:06:44 +0000, Thomas Pornin a écrit :

[ une JVM par appli ]
Ceci est bien faux. Le langage est à évolution rapide dans le sens de

l'ajout de classes et de méthodes, mais pas dans le sens de la
disparition. La très grande partie des évolutions se fait sous la
forme de packages indépendants qui sont progressivement rajoutés dans
le "standard" ; on peut notamment distribuer par ailleurs ces packages
si on veut en profiter tout en tournant sur les vieilles JVM (par
exemple, quand on veut utiliser Swing, histoire d'avoir un rendu
graphique joli, mais qu'on veut continuer à tourner sur les JVM 1.1,
histoire de rester compatible avec les malheureux qui utilisent Internet
Explorer 4 comme JVM). J'utilise régulièrement tout un tas d'outils en
Java qui marchent bien sur les vieux JDK (1.1) et que je lance
néanmoins sur des JDK récents (1.4) sans encombre.

Bwah ! Tous les objets Java ont une méthode finalize() pour ça, et ce
depuis le JDK 1.0 !
Histoire d'être précis : la méthode finalize() est invoquée quand
l'objet est désalloué par le GC. On peut forcer un passage du GC en
appelant System.gc().


Ce n'est pas tout à fait vrai, un appel à gc() suggère à la machine
virtuelle de faire un effort pour désallouer les objets inutilisés. J'ai
le souvenir d'avoir entendu beaucoup de développeurs hurler contre
l'inefficacité de gc().

Maintenant, si tu veux faire une gestion plus fine de ce genre de choses
(notamment savoir exactement quand ton destructeur est appelé), rien
n'empêche d'écrire tes destructeurs et de les appeler au moment où tu
veux. Il n'y a pas de différence fondamentale entre "delete truc" et
"truc.delete()".


Effectivement devant les problèmes liés au GC, l'équipe d'Eclipse a
préféré faire des destructeurs explicites pour SWT
(http://www.eclipse.org/articles/swt-design-2/swt-design-2.html pour des
explications).
Ceci-dit il y a une petite différence : en Java appeler truc.delete() ne
permettra pas de libérer la mémoire occupée par l'objet. Dans un cas
comme SWT où l'important est de libérer des ressources système non
gérée par la VM c'est OK mais si c'est pour demander gentiment à la VM
de bien vouloir libérer la mémoire liée à cet objet c'est raté.


En dehors de ça, fort de mon expérience, je déclare que Java est un
langage décent, adapté à la programmation d'"applications" (par
opposition à des "commandes"). Il lui manque quelques features, qu'on
peut trouver ici à là dans quelques autres langages, mais je n'ai pas
encore rencontré de langage qui offre une meilleure combinaison
d'efficacité, support syntaxique, et existence d'une large
bibliothèque. À noter le gros avantage de Java (à mon sens) :
javadoc.


Ce n'est pas faux mais ça fait malgré tout un paquet d'années que des
logiciels comme Doc++ ou Doxygen permettent d'avoir des fonctionnalités
équivalentes en C++ avant en plus l'avantage de pouvoir faire du PDF via
TeX.
--
Le cinéma en Lumière : http://www.lumiere.org/


Avatar
pornin
According to Marc Espie :
Je pense que ton style de programmation te conduit a faire les choses
correctement.


C'est pareil pour tous les langages et environnements de programmation.
Ce que Java ne fait pas, et qu'aucun autre langage ne fait à ma
connaissance, c'est absorber suffisamment les erreurs des programmeurs
pour qu'un mauvais programmeur puisse quand même produire de bons
programmes. Cette idée est présente dans le marketing fait par Sun
autour de Java, et elle est fausse, et je suis le premier à le
reconnaître.

Maintenant, ça ne fait pas de Java un mauvais langage. Ou alors, il
faut considérer qu'il n'y a pas de langage de programmation décent (ce
qui serait assez nihiliste). Je dirais même que de ce point de vue, les
outils de développement fournis avec un bon JDK, et les comportements
requis par le standard Java, sont plutôt très bons : le "dead code"
facilement détectable doit être éliminé, il faut des casts explicites
pour les conversions numériques qui diminuent la taille des entiers, le
compilateur agit pour une version donnée du langage et de la bibliothèqu
et avertit pour tout usage d'une classe ou méthode normalement non
présente dans cette version ou considérée comme "obsolète",...


Honnêtement, quand j'encadre des gens pour leur faire programmer
quelques bibliothèques, je préfère que ce soit en Java, parce que
c'est beaucoup plus facile de les forcer à faire du code lisible (dans
mon expérience, la relecture critique par autrui est une condition
quasi-nécessaire à la production de code correct et a fortiori robuste).
Même si, personnellement, je me sens plus à l'aise en C qu'en Java
(la plupart du temps).


--Thomas Pornin

2 3 4 5 6