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

Mono / dotGNU : .NET pour Linux

183 réponses
Avatar
Sébastien Kirche
Bonjour à tous,

je sors agréablement surpris d'une semaine de formation sur .NET en
environnement M$.

J'y ai découvert la programmation en C++.NET (je développe en C/C++
traditionnel sur Mac au boulot et je bidouille sous GNU/Linux à la
maison).

Déjà voir que .NET faisait usage d'un compilo JIT m'a un peu fait revoir
mon appréciation négative sur .NET que je considérais (mal) comme Java
avec son code interprété.

Ensuite la surprise vient que le formateur (qui ne pratique pas Linux) a
su m'indiquer qu'il existait une implémentation pour Linux. Deux en fait
après avoir creusé le sujet : Mono (sponsorisé par Ximian/Novell) et
dotGNU.

Et l'agréable vient qu'après avoir bataillé avec des paquetages un peu
expérimentaux (tout n'est pas encore finalisé) j'ai pu voir que mes
programmes de test fonctionnaient directement sous Linux _et_ sous Win
avec le même exécutable (qui d'ailleurs est aussi un .exe sous Linux).

Tiens d'ailleurs pour ajouter à la surprise, le VB.NET est aussi en
cours de portage, ça fait un peu bizarre :)

Sinon on peut pour le moment partager du C# et de l'assembleur IL en
plus de VB (je pense que d'autres suivront mais je n'ai pas vu de c++)
et l'IDE que j'ai testé (MonoDevelop) bien qu'en v0.5 a l'air pas mal.

J'aime bien la complétion intelligente à la Visual Studio (qui àma est
la seule application vraiment valable chez M$ ;).

D'autres ont-il aussi testé .NET en cross-plateforme et qu'en
pensent-ils ?

Crosspost & Suivi prudent vers fr.comp.os.linux.debats
--
Sébastien Kirche

10 réponses

Avatar
noone
Il s'appuie sur Beagle
C'est Beagle qui s'appuie sur DotLucene/Mono, et

non l'inverse.


oui oui...

c'est surtout l'occasion de parler de Beagle

projet pas vraiment original mais qui peut être très pratique

J'imagine bien l'intégration de Beagle dans la recherche d'informations
dans /usr/share/doc
dans les pages man
dans les pages info

il faudrait alors intégrer ça à (pour Gnome) devhelp, yelp, et nautilus


il faudrait faciliter la recherche d'information locale (pour ceux qui
n'ont pas encore le web)


Avatar
Sébastien Kirche
Le 1 Jun 2005, a dit :

c'est surtout l'occasion de parler de Beagle

projet pas vraiment original mais qui peut être très pratique

J'imagine bien l'intégration de Beagle dans la recherche
d'informations dans /usr/share/doc dans les pages man dans les pages
info

il faudrait alors intégrer ça à (pour Gnome) devhelp, yelp, et
nautilus


il faudrait faciliter la recherche d'information locale (pour ceux qui
n'ont pas encore le web)


C'est la même chose que Remembrance Agent (http://www.remem.org/) pour
EmacsOS, sauf que ça ne clignote pas et que ça ne fait pas «pouet» avec
la souris ?

--
Sébastien Kirche

Avatar
remi_inconnu
Les librairies fournis en standard avec python sont importantes, et si
tu ajoutes celles que tu peux télécharger, je pense que l'on ne doit
pas être loin des langages Java et .Net. En terme de vitesse,
personnellement je n'ai jamais trouvé Java très rapide, j'ignore si
.Net est meilleur et le delta avec Python ne me semble pas si important.
Avatar
remi_inconnu
En gros t'as rien compris à Python, le typage dynamique c'est
justement ce qui le rend si agréable à utiliser et si puissant, et
j'espère que JAMAIS il n'introduiront de typage statique dans Python.
Avatar
remi_inconnu
VB6 n'a que partiellement un typage dynamique, rien à voir avec le
merveilleux typage de Python ou tout est dynamique.
VB6 n'est d'ailleurs pas non plus orienté objet, d'ailleurs est ce un
vrai langage pro ?.
L'apprentissage du typage dynamique n'est pas immédiat pour quiconque
débute en Python ayant une expérience dans un langage fortement
typé. Par contre quand on le maitrise, on a plus de limite quand à ce
que l'on peut concevoir, et surtout les programmes sont bien plus
légers.
On se demande ensuite comment on a pu s'en passer jusque là.
Avatar
talon
wrote:
Les librairies fournis en standard avec python sont importantes, et si
tu ajoutes celles que tu peux télécharger, je pense que l'on ne doit
pas être loin des langages Java et .Net. En terme de vitesse,
personnellement je n'ai jamais trouvé Java très rapide, j'ignore si
.Net est meilleur et le delta avec Python ne me semble pas si important.



Je te fournis un exemple, que je trouve amusant. Il s'agit du programme
quicksort que Richard nous a monté l'autre jour, en python.
D'une part je le fais tourner directement sous l'interprète python (sans
psyco), d'autre part je le fais tourner en jython, aprés l'avoir compilé en
.class utilisant jytonc. Donc il s'agit de java faisant tourner la machine
virtuelle de python, faisant tourner le programme ...
(le tout sur un P4, FreeBSD):

niobe% /usr/local/jdk1.5.0/bin/java -classpath ../jython.jar:. qs
taille temps
10000 0.4180002212524414
20000 0.7450001239776611
40000 1.6530001163482666
80000 3.246000051498413
160000 7.165999889373779
320000 14.794000148773193
640000 29.848999977111816
niobe% /usr/local/jdk1.5.0/bin/java -server -classpath ../jython.jar:. qs
taille temps
10000 0.7549998760223389
20000 0.49699997901916504
40000 0.8710000514984131
80000 1.8999998569488525
160000 4.078999996185303
320000 8.028000116348267
640000 16.175999879837036
niobe% python ../qs.py
taille temps
10000 0.171875
20000 0.34375
40000 0.7421875
80000 1.7578125
160000 4.0234375
320000 9.5390625
640000 19.9921875


Morale de l'histoire, Java c'est quand même plus performant que ce que certains
croient! Autre morale, la "précompilation" de tout le bytecode avec -server
peut faire une grosse différence. Aussi notable le fait que la première
exécution prend plus de temps avec -server.

Voici le programme qs.py

niobe% cat qs.py
import time, random

def qsort(x):
if len(x) > 1:
lt = [i for i in x if i < x[0] ]
eq = [i for i in x if i == x[0]]
gt = [i for i in x if i > x[0]]
return qsort(lt) + eq + qsort(gt)
else:
return x

if __name__ == "__main__":
print "taillettemps"
random.seed()
for n in (10000, 20000, 40000, 80000, 160000, 320000,640000):
l = [random.randrange(1000000) for i in range(n)]
t = time.clock()
qsort(l)
t = time.clock() - t
print n, 't', t



--

Michel TALON

Avatar
remy
"Michel Talon" a écrit dans le message de
news:d7n5h4$lbk$
wrote:
Les librairies fournis en standard avec python sont importantes, et si
tu ajoutes celles que tu peux télécharger, je pense que l'on ne doit
pas être loin des langages Java et .Net. En terme de vitesse,
personnellement je n'ai jamais trouvé Java très rapide, j'ignore si
.Net est meilleur et le delta avec Python ne me semble pas si important.



Je te fournis un exemple, que je trouve amusant. Il s'agit du programme
quicksort que Richard nous a monté l'autre jour, en python.
D'une part je le fais tourner directement sous l'interprète python (sans
psyco), d'autre part je le fais tourner en , aprés l'avoir compilé en
.class utilisant jytonc. Donc il s'agit de java faisant tourner la machine
virtuelle de python, faisant tourner le programme ...
(le tout sur un P4, FreeBSD):


tu ne veut pas faire un essai avec gcj histoire de voir
si cela passe bien sur avec jythonc


--
des conneries j'en ai dites oui oui je vous assure...
mais elles n'engagent que votre perception
remy


Avatar
talon
remy wrote:
(le tout sur un P4, FreeBSD):


tu ne veut pas faire un essai avec gcj histoire de voir
si cela passe bien sur avec jythonc




Directement comme ça, ça ne passe pas. Je suppose qu'il faudrait que le
jython.jar soit compilé avec gcj. J'obtiens des choses comme:
niobe% gcj33 -classpath ../jython.jar:. -O3 qs.java
......
/var/tmp//ccz2aJqa.o(.data+0x22c): undefined reference to
`org::python::core::PyRunnable::class$'
/var/tmp//ccz2aJqa.o(.data+0x2d0): undefined reference to
`org::python::core::PyFunctionTable::class$'
collect2: ld returned 1 exit status

Je n'ai pas l'habitude de gcj, donc ...

--

Michel TALON


Avatar
Sébastien Kirche
Le 2 jun 2005, a dit :



C'est la même chose que Remembrance Agent (http://www.remem.org/)
pour EmacsOS, sauf que ça ne clignote pas et que ça ne fait pas
«pouet» avec la souris ?




Faut arrêter avec les trucs de geeks...


Tu parles d'Emacs ou de RA ?

Trouver de l'aide c'est d'abord pour les débutants (on est tous
débutant dans un domaine ;-) )


Oui oui. Moi en ce moment c'est plutôt LaTeX, Python et Mono.

Donc les interfaces textes c'est bien quand tu sais mais pour accéder
à de l'*aide* il me semble qu'une interface graphique est un
plus... avec un gros bouton qui fait "pouet" si ça t'amuse


Je parlais des fonctionnalités (le coup de l'interface clignotante était
un clin d'oeil bien sûr) : on a dans les deux cas (si j'ai bien suivi,
c'était le but de ma question) un moteur d'indexation de documents.
Texte uniquement pour RA, images et musique en plus Beagle.

La différence c'est que RA suivant sa configuration regarde ce que l'on
tape et propose au fil de l'eau une liste de documents pouvant avoir un
rapport, alors que Beagle fonctionne plus comme un moteur de recherche
classique (càd à partir d'une requête).

Emacs c'est bien... en abuser...
et pourtant je l'utilise pas mal... mais ça n'est pas le même public.


Sûr. Mais il n'y a pas beaucoup de choses que je fasse sur mon micro
sans passer par Emacs dans mon utilisation courante. Question de goût
(mauvais diront certains ?).

--
Sébastien Kirche


Avatar
Rémi
wrote:

Les librairies fournis en standard avec python sont importantes, et si
tu ajoutes celles que tu peux télécharger, je pense que l'on ne doit
pas être loin des langages Java et .Net. En terme de vitesse,
personnellement je n'ai jamais trouvé Java très rapide, j'ignore si
.Net est meilleur et le delta avec Python ne me semble pas si important.




Je te fournis un exemple, que je trouve amusant. Il s'agit du programme
quicksort que Richard nous a monté l'autre jour, en python.
D'une part je le fais tourner directement sous l'interprète python (sans
psyco), d'autre part je le fais tourner en jython, aprés l'avoir compilé en
.class utilisant jytonc. Donc il s'agit de java faisant tourner la machine
virtuelle de python, faisant tourner le programme ...
(le tout sur un P4, FreeBSD):

niobe% /usr/local/jdk1.5.0/bin/java -classpath ../jython.jar:. qs
taille temps
10000 0.4180002212524414
20000 0.7450001239776611
40000 1.6530001163482666
80000 3.246000051498413
160000 7.165999889373779
320000 14.794000148773193
640000 29.848999977111816
niobe% /usr/local/jdk1.5.0/bin/java -server -classpath ../jython.jar:. qs
taille temps
10000 0.7549998760223389
20000 0.49699997901916504
40000 0.8710000514984131
80000 1.8999998569488525
160000 4.078999996185303
320000 8.028000116348267
640000 16.175999879837036
niobe% python ../qs.py
taille temps
10000 0.171875
20000 0.34375
40000 0.7421875
80000 1.7578125
160000 4.0234375
320000 9.5390625
640000 19.9921875


Morale de l'histoire, Java c'est quand même plus performant que ce que certains
croient! Autre morale, la "précompilation" de tout le bytecode avec -server
peut faire une grosse différence. Aussi notable le fait que la première
exécution prend plus de temps avec -server.

Voici le programme qs.py

niobe% cat qs.py
import time, random

def qsort(x):
if len(x) > 1:
lt = [i for i in x if i < x[0] ]
eq = [i for i in x if i == x[0]]
gt = [i for i in x if i > x[0]]
return qsort(lt) + eq + qsort(gt)
else:
return x

if __name__ == "__main__":
print "taillettemps"
random.seed()
for n in (10000, 20000, 40000, 80000, 160000, 320000,640000):
l = [random.randrange(1000000) for i in range(n)]
t = time.clock()
qsort(l)
t = time.clock() - t
print n, 't', t





Impressionnant la performance de jython, cependant là ou je trouverai
java lent c'est encore sur les IHM et au lancement des applications.