OVH Cloud OVH Cloud

Microsoft et Java

295 réponses
Avatar
Wykaaa
Microsoft semble reconnaître que Java permet de développer plus
rapidement que C# et qu'il y a moins de failles de sécurité dans Java
que dans .net :
http://dsi.silicon.fr/nouveautes/microsoft-java-forever%E2%80%A6-1366

10 réponses

Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 18:22, JKB a écrit :
Non, c'est au makefile de te le dire, pas à l'éditeur de liens.



Moi en Java c'est ni à l'un ni à l'autre.
Je dis juste à Maven ce dont j'ai besoin.
À sa charge de trouver où est le .jar, de le télécharger, de configurer
le compilateur pour trouver le .jar…

Va regarder pkgsrc.



Ça ne change rien.

C'est toujours à moi, développeur, de trouver quel package me fournit
toto.so et quelle est la bonne version à installer.
Si j'ai plusieurs projets avec des versions différentes de la même lib,
je suis niqué.
Si je veux moi-même donner ma librairie à d'autres projets, je vais être
obligé de la pkgsrc-iser, de la deb-iser ou de la exe-ifier.
Si je suis en environnement sans gestion des dépendances transitives
(Windows par exemple), ça va être à moi de me taper la chaîne de
dépendances à la main.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/NQiAAoJEK8zQvxDY4P9JqgH/AngY/6n33JdknZartCk5ehh
KXyIf5dgAhwIsRZVS9e7UV6AdRxRpZyGPoo3Sr0vq0wQoPQdmo/GCeU/axdeD9a2
SEOxsVEtQmBma/xXt4n6D2c8qJzKHgD7jGZ1ddVaTgu97GOiAN2IKruQbSs3rDOO
04Oy7OmoJjrh4TBcvBntD/2tblx7e1OtmomucB1NRzRMJVcRnb4/+rYjIFxIu1u9
oOqaamnoahXwTMT8BS5CEWu9Q8He95F9xXlSNnFbl1bgI+zUuF/CeeHSFtfOtll5
Sb8wQdjUIIa4Ts2Zf65Lxs8J4uhESHVsew6Fjwe4bMZFPEOs0OKybWj7cdetm9Y =YQl6
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 18:30, Nicolas George a écrit :
Tous les projets n'ont pas les mêmes spécificités, c'est normal d'avoir des
pratiques différentes.



Globalement parlant, tous les projets ont globalement les mêmes besoins.
Intégrer des librairies et des dépendances, compiler, générer la sortie?

Le contenu peut être différent, mais le contenant est globalement le même.

C'est bien l'esprit java que tu défends : on a un trou carré, et on fait à
toute force entrer tous les projets dans ce trou carré, même s'ils sont
naturellement ronds ou en forme d'étoile.



Oui et non.
Si Maven contraignait les sources, oui, cela sera pénible et dangereux.
Mais il ne s'agit que de conventions, rien ne t'empèche de t'en écarter
si tu en ressents le besoin (par exemple pour y intégrer Androïd ou GWT).
Mais globalement parlant, le moule est suffisamment générique et propre
pour être utilisé en l'état sur une énorme proportion de projets.
Personnellement, je n'ai encore jamais trouvé de justification valable
pour sortir du socle Maven, du n-tiers, du MVC ou de l'IoC.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/NUyAAoJEK8zQvxDY4P9kUsH/2G7gEm9OmHj++kuBcBOj6h2
X1o1RY6ABNC4oqk3JU+6NJbuRU+DDFebc5hM9ZGc+gvZZdqG/GLaV10b1FXFCqu5
rP6Ajayuq7UPCvKSB3zkXIC/IsW0y3r1fRCexngq2ZggTJ1uO8SFtMfzOWqY/9SG
rCT2Ylfad2em/PqyIHOuojdGV3QiClR5RY2Svibu9DkdN61uWAGU01RmY2PLGGVs
vn7gzxz4+P1H4zFyTrEmVnkDy0lXOlM7TwvsmkbKzQBcIRw06+xPeu3yune0UV0e
ELFfmOS0H1GkzCm5CoRMrkZmay4w5hRMNWlIfCepuf78Jy77HPwJvUtdMG8AlUU =1UdA
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 18:25, JKB a écrit :
Si, tu le sais parfaitement. Les fonctions de la libc (et de la
plupart des bibliothèques) te renvoient une erreur et un code
d'erreur dans errno.



Donc je vais blinder mon code de errno (théoriquement 1 ligne sur 2)
pour ensuite le farcir de if ( error == MaLib.SEG_FAULT ) … else if (
error == MaLib.FOO_ERROR ) ?
Pire encore, ma propre fonction va devoir propager cette erreur à
l'appelant, donc aussi devoir gérer errno, la valeur de retour, avec
encore plus de if/else et de return partout, et l'appelant devrait aussi
faire un if -1, un appel à errno, une platré de if/else pour se
rattraper et une platré de gestion de errno en cas de non récupération
pour ensuite propager à l'appellant qui devra…………

T'appelles ça du code propre toi ?

Tu sais donc parfaitement pourquoi ça a planté
lorsque tu peux avoir une ambiguité. On n'a vraiment pas dû
apprendre le C au même endroit...



Euh pas exactement au même endroit je pense =)
Mais on a donc bien vu les mêmes codes tout bloated de gestion et de
propagation d'erreurs avec des chiés de #define dans les .h, des platrés
de if/elif, de return dans tous les coins, de tricks à la con pour
pouvoir à la fois faire un return « métier » et un return « erreur »
(ben oui, si ma méthode devait déjà retourner quelque chose, je fais
comment pour retourner -1 ou le code d'erreur ?)

Et alors ? La récupération peut être aussi bête que ne pas faire
planter le programme sur une erreur de segmentation.



Utilité ?
« Votre programme a planté. Mais ceci n'est pas un segfault »

Je préfère de loin le « Segmentation fault : null pointer dereference in
toto.so:38 », au moins j'ai de quoi tracker l'erreur…

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/NdzAAoJEK8zQvxDY4P9j08H/j3nUTHrbei/II9HRF++MTJI
uJ22whCXQNNy7j6WTNnTGJ+ukBOAH0BFfSH9ceR3Z1L8jfIP9vKa6cwBK1EegEHF
dFQLKZpNw0SVHnJ2D77JrcHMAN2duFDykmXK+chEtcCGR1AQ9WApk5gqWeN+lxZD
J+jmR5wEk1UoEi4hLhaM1793Tl/S4N4Qiauj3q892tc5qUKwtaA55gOFXdNDCFvd
2FIxZTLr2vyJB1ApuLAe5gKaxx5PXzNHzobQwERA9N3/LNdHIvQFroStDwlkxtZ8
5JTtePwR/BeWgXEwYhXfJOrySaocpxGswerFisgajZmQC9W4wChMFzlhak9pkj4 =LsjY
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 18:27, JKB a écrit :
Et donc, merci d'apporter encore un peu plus d'eau, cela revient
même à utiliser une hérésie comme Java à des endroit où d'autres
outils seraient largement plus efficaces (style calcul scientifique
avec Fortran). Merci de ton soutien.



La discussion n'est pas de savoir quel langage choisir en fonction du
contexte mais lequel permet de faire les choses plus proprement.

Certes je ne ferais pas un OS ou du temps réel en Java.
Mais je ne serais pas assez fou pour aller faire de la bdd ou du web en
C/C⁺⁺ !


- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/Nf/AAoJEK8zQvxDY4P9E0YIAIEQyY7Bw8p4R3MCYO71XZY/
9KmzAHQMbJtPOpxKO6aR7tGRTBfgKPEqKmbJRClP6xYqEttvgha/pQMR+naoBvs/
85E5qoCmjdnZDJNnVaPu6PkhoC6AKf94JVmMWw0udM55Trx7C+PLACB0pkF+NdMw
J3JN22G4ZwWbvbUG6WaL+VxYDzJE2SnXhlRwguACpY/gwbU5GHuQqpy9S3FmHjPv
5yuzWQfNUQrwPKluPGZUPvM00K8sDu7dcUxDC8Znu5idQdO4bv/vySavXWjpvLX8
iioAk1znaBv6RBub/NWVwWWHxEDvmrO24OkMCwnixoUnYjN1Pet5J+HpXIkOC9A L7
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 18:33, Nicolas George a écrit :
... et le mauvais programmeur rajoutera un catch-all autour, en masquant non
seulement la condition d'erreur qu'il était censé traiter mais aussi les
autres conditions d'erreur qui peuvent survenir.



Et le chef de projet ira lui taper dessus à la prochaine revue de code
ou la prochaine analyse de la couverture de code des tests U.

Même mieux, Jenkins via Findbug/Checkstyle via Maven enverra de suite un
mail au responsable pour annoncer l'hérésie et crucifier le développeur
en place publique.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/Nh/AAoJEK8zQvxDY4P9+UoH/29qZcIXdRXVDYzCVoNwsWDU
LJjndiYs2oHX30RIh4i0K4R4MPFB76Pdu2APOM/dFIyaCB6bti4buw3kpcgPgQ2C
2YablKJu4a3EJQitI0HiGPUk3Ifnf7zPt7023ftGCTTXFRDzmtG47W7+HQf5ZvGc
5EYBQGCWpWHrXvhDNE1Xost08Qn/dQNCdTLmaTpZLDa7yoxUjGLreqBeezO7G5Z8
IrsFJLWGE17ZX8dct006R839tifo8ZtrwRt2vmuWQTz/Ha8yn7iTddiBRXQ8RJkc
vJTJ569WSg9HVAUQV7vckTnmCSIMU05qpaOj1L4hDvSRdS2ez13Wyj6YsFS4EvU =Qpjf
-----END PGP SIGNATURE-----
Avatar
JKB
Le Sat, 18 Jun 2011 18:50:59 +0200,
Aéris écrivait :

Le 18/06/2011 18:25, JKB a écrit :
Si, tu le sais parfaitement. Les fonctions de la libc (et de la
plupart des bibliothèques) te renvoient une erreur et un code
d'erreur dans errno.



Donc je vais blinder mon code de errno (théoriquement 1 ligne sur 2)
pour ensuite le farcir de if ( error == MaLib.SEG_FAULT ) … else if (
error == MaLib.FOO_ERROR ) ?
Pire encore, ma propre fonction va devoir propager cette erreur à
l'appelant, donc aussi devoir gérer errno, la valeur de retour, avec
encore plus de if/else et de return partout, et l'appelant devrait aussi
faire un if -1, un appel à errno, une platré de if/else pour se
rattraper et une platré de gestion de errno en cas de non récupération
pour ensuite propager à l'appellant qui devra…………

T'appelles ça du code propre toi ?



Oui. Parce que c'est la seule façon d'avoir un truc fiable. Ton
exception est traitée en dehors de la fonction, pire, avec une
ribambelle et demi de fonctions appelées entre la chose qui a levé
ton exception et sa récupération. Si tu veux alors récupérer
_proprement_ ton erreur pour la traiter autrement qu'en sortant du
programme, je te souhaite bien du plaisir.

Tu sais donc parfaitement pourquoi ça a planté
lorsque tu peux avoir une ambiguité. On n'a vraiment pas dû
apprendre le C au même endroit...



Euh pas exactement au même endroit je pense =)
Mais on a donc bien vu les mêmes codes tout bloated de gestion et de
propagation d'erreurs avec des chiés de #define dans les .h, des platrés
de if/elif, de return dans tous les coins, de tricks à la con pour
pouvoir à la fois faire un return « métier » et un return « erreur »
(ben oui, si ma méthode devait déjà retourner quelque chose, je fais
comment pour retourner -1 ou le code d'erreur ?)



Au hasard :

int ma_fonction_qui_renvoie_une_erreur(paramètres d'entrée,
*paramètres de sortie).

Et alors ? La récupération peut être aussi bête que ne pas faire
planter le programme sur une erreur de segmentation.



Utilité ?
« Votre programme a planté. Mais ceci n'est pas un segfault »

Je préfère de loin le « Segmentation fault : null pointer dereference in
toto.so:38 », au moins j'ai de quoi tracker l'erreur…



Arrête de ne pas regarder plus loin que le bout de ton nez. Je te
prends un exemple tout bête, un shell un peu spécial. S'il n'a plus
de mémoire disponible, il est de bon ton qu'il écrive sur stdout
"not enough memory" ou quelque chose du même genre en retournant une
invite (et au passage en libérant la mémoire qu'il était en train
d'utiliser pour essayer d'exécuter la dernière requête) et non en
segfaultant. Enfin, si tu préfères qu'un programme interactif
segfaulte, c'est ton problème, pas le mien.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
JKB
Le Sat, 18 Jun 2011 18:55:27 +0200,
Aéris écrivait :

Le 18/06/2011 18:33, Nicolas George a écrit :
... et le mauvais programmeur rajoutera un catch-all autour, en masquant non
seulement la condition d'erreur qu'il était censé traiter mais aussi les
autres conditions d'erreur qui peuvent survenir.



Et le chef de projet ira lui taper dessus à la prochaine revue de code
ou la prochaine analyse de la couverture de code des tests U.



Je viens de loler très fort !

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
JKB
Le Sat, 18 Jun 2011 18:53:19 +0200,
Aéris écrivait :

Le 18/06/2011 18:27, JKB a écrit :
Et donc, merci d'apporter encore un peu plus d'eau, cela revient
même à utiliser une hérésie comme Java à des endroit où d'autres
outils seraient largement plus efficaces (style calcul scientifique
avec Fortran). Merci de ton soutien.



La discussion n'est pas de savoir quel langage choisir en fonction du
contexte mais lequel permet de faire les choses plus proprement.

Certes je ne ferais pas un OS ou du temps réel en Java.
Mais je ne serais pas assez fou pour aller faire de la bdd



Il y a pourtant des choses très bien en C.

ou du web en
C/C⁺⁺ !



Idem.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Nicolas George
Aéris , dans le message <4dfcd87f$0$4688$, a
écrit :
Et le chef de projet ira lui taper dessus à la prochaine revue de code
ou la prochaine analyse de la couverture de code des tests U.



C'est vraiment du wishful thinking à l'état pur, ça.
Avatar
Nicolas George
Aéris , dans le message <4dfcd536$0$27523$, a
écrit :
Globalement parlant, tous les projets ont globalement les mêmes besoins.
Intégrer des librairies et des dépendances, compiler, générer la sortie?



C'est extrêmement réducteur, comme vision. Rien qu'un exemple, sur le
premier point que tu donnes : entre un projet qui utilise systématiquement
trois bibliothèques élémentaires et un projet qui peut utiliser une
ribambelle de bibliothèques optionnelles, parfois de manière incompatible
et/ou redondante, parfois pas des appels indirects, etc. (je suis justement
en train de compiler un tel projet dans une fenêtre voisine), la gestion des
dépendances est radicalement différente.

Mais globalement parlant, le moule est suffisamment générique et propre
pour être utilisé en l'état sur une énorme proportion de projets.
Personnellement, je n'ai encore jamais trouvé de justification valable
pour sortir du socle Maven, du n-tiers, du MVC ou de l'IoC.



Quand on n'a qu'un marteau...