Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 21/06/2014, à 20:00

ssdg

Re : programation questions general, lien systeme et renseignements

oni_shadow a écrit :
Les bibliothéques C sont écrites en C;
Globalement, les bibliothèques sont écrit dans le même langage, ou dans un meilleur langage;

ça je le savais mais visiblement je n'arrive pas a me faire comprendre

tout cela reste encore bien obscure, dommage.

En fait, une bibliothèque est un ensemble de morceaux de programme pré-écrits.

Soit c'est pour communiquer avec quelque chose (comme le serveur graphique) le développeur a écrit son protocole de communication entre les deux programmes et l'emballe dans un ensemble de fonctions de ton langage. Si c'est des utilitaires (par exemple la fonction getline du C) qui utilise des fonctions standard du langage et fourni un raccourcis pour une opération courante. Dans les deux cas, on utilise les fonctions existantes de la bibliothèque standard pour fournir un service au dévellopeur pour refaire des opérations courantes ou demander une action à un autre programme. (sur la même machine (serveur X) ou une autre (bibliothèque pour se connecter Base de données))

et pour ce qui est de la bibliothèque standard, la première est généralement écrite dans un langage déjà existant (pour le C, je crois que c'était de l'assembleur) et les suivantes sont généralement écrites avec les compilateur/librairie standard précédents. (en java, java 1 était écris en C, java 2 en java1, ...)


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#27 Le 22/06/2014, à 10:15

alius

Re : programation questions general, lien systeme et renseignements

Je n'ai pas compris,

Sinon pour répondre à la question plus haut. Il est bien sur possible de faire de la programmation système et d'utiliser pour faire du graphique une librairie comme X11, OpenGL.

Tu devras tout d'abord apprendre a faire des tracés simples et ensuite travailler sur des algorithmes permettant de tracer des formes complexes, (cercle, rectangle, arrondie, 3D, ...). Ya pas mal de boulot et de code à donner !

Tu pourras par la suite coder ton propre parser CSS et ainsi élaborer ton interface graphique avec tout ce que tu aura appris et codé plus haut.

Je te souhaite bon courage !


Alius

Hors ligne

#28 Le 22/06/2014, à 13:57

pires57

Re : programation questions general, lien systeme et renseignements

Salut,

Je suis pas trop d'accord pour java, du moins pas sur le point de la performance.
Java est un langage haut niveau (comme C#) qui ne s'exécute pas sur le système directement mais sur la machine virtuel java (JVM) à partir d'un code source compiler (bytecode) qui a la particularité de ne pas s'intéresser à la machine, c'est a dire que le bytecode éxécuter sur une machine sera en tout point identique a celui exécuté sur une autre machine totalement différente (niveau composant).
C'est ensuite la JVM qui se charge de faire la liaison entre le bytecode et le système d'exploitation.


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#29 Le 22/06/2014, à 15:43

alius

Re : programation questions general, lien systeme et renseignements

Oracle a bien bossé sur la JVM et les performances ont bien augmenté, mis à part ce **** de ramasse miette mais ça c'est l'algo qui est lourd c'est pas la JVM en elle même qui rame.

Attention aussi, il y a plusieurs type de virtualisation.
Tu peux avoir deux machines identiques mais sur deux systèmes différents,
les perfs de la JVM ne seront que peu différentes car maintenant beaucoup de composants font de la très très bonne virtualisation (les dernières générations Intel par exemple).
Mais ça reste du bytecode et ça bouffe beaucoup (trop) de mémoire !


Alius

Hors ligne

#30 Le 22/06/2014, à 20:36

ssdg

Re : programation questions general, lien systeme et renseignements

pires57 >Pardon, pour le "là encore on se retrouve à executer du bytecode" je pensais à LLVM qui me semble commencer à compiler en pseudo-langage machine (comme le bytecode java) qui sera traduit/interpreté au dernier moment.

Pour le Java, tout à fait. Si tu as compris autre chose c'est que je me suis mal exprimé.


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#31 Le 22/06/2014, à 21:18

Haleth

Re : programation questions general, lien systeme et renseignements

de plus en plus de projets passent de GCC à LLVM et il me semble que là encore, on se retrouve à interpréter du bytecode.

Pourquoi? parceque ce sont souvent de gros programmes (en complexité) qui ne peuvent plus être optimisés par un cerveau humain. Ce n'est pas parfait comme optimisation, mais il faudrait des années à un humain pour faire ce que font des machines virtuelles (type python, java, ...)

Non.

LLVM et GCC sont des compilateurs, même combat dans les deux cas;
Et il ne faut pas des années pour atteindre le niveau du java, un nouveau né qui conchit les bras de sa maman fait déjà mieux .. smile


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#32 Le 23/06/2014, à 10:24

grim7reaper

Re : programation questions general, lien systeme et renseignements

tiramiseb a écrit :

Sinon, vous saviez que Python est plus rapide que C ?
http://morepypy.blogspot.fr/2011/02/pyp … afted.html
smile

Non.
Le C est plus rapide que Python, mais Python peut (dans certains cas) être plus rapide.
Et c'est exactement ce que dit ton article: "PyPy faster than C on a carefully crafted example"
La partie en gras est importante...



Haleth a écrit :

Hey, seb, on dirait que tu nous sort un vieux troll baveux !

Et toi tu tombes dedans, et réponds à côté...

Haleth a écrit :

Et puis, si par hasard, tu te dis : "au lieu de copier le code, et si j'étais meilleur que ça !".

Programmons le C de meilleur façon :

Et c'est là que tu pars en hors-sujet.
Si le code de add était dans un fichier séparé, il y a une raison...

Haleth a écrit :

Et le résultat :

# gcc -O3 -o main *.c && time ./main 

real    0m0.002s
user    0m0.000s
sys 0m0.000s

OWH MON DIEU !
En fait, quand on sait programmer, le C est 100 fois plus rapide !

Ouais forcément, quand tu compares un return 0 en C à la somme des 1 000 000 000 premier nombres en Python, il faut s'attendre à une différence gigantesque.
Ton programme C ne fait rien. Il suffit de regarder l'assembleur généré:

main:
.LFB1:
    .cfi_startproc
    rep
    ret
    .cfi_endproc

Tu t'en aies rendu compte au moins? Si oui, admet que la comparaison est malhonnête.

Le but de l'article c'est de montrer que PyPy permet de l'optimisation inter-module, ce que ne permet pas le C et du coup dans certains cas, grâce à cette optimisation, PyPy peut poutrer le C.
Dans le cas général, on est d'accord que le C reste plus rapide.

Au passage, oui je sais que GCC fait de la LTO et que ça améliore un peu les choses (typiquement, même si ta fonction add est dans une autre TU (Translation Unit) mais que tu la compiles en même temps elle va être optimisé quand même), mais que je sache, tu ne peux toujours pas optimiser le code qui est dans un .so (alors que PyPy peut optimiser le code des bibliothèques que tu utilises. Et c'est ça le sujet de l'article.

De même ici, PyPy bouffe le C car ayant plus d'info à l'exécution il peut se permettre des optim' qu'un compilo C ne peut pas faire. Mais ça ne veux pas dire que Python est plus rapide que le C en général.

Hors ligne

#33 Le 23/06/2014, à 10:31

tiramiseb

Re : programation questions general, lien systeme et renseignements

troll powaaaaaa ! lol

Hors ligne

#34 Le 23/06/2014, à 10:44

Haleth

Re : programation questions general, lien systeme et renseignements

Ouais forcément, quand tu compares un return 0 en C à la somme des 1 000 000 000 premier nombres en Python, il faut s'attendre à une différence gigantesque.
Ton programme C ne fait rien. Il suffit de regarder l'assembleur généré:

Haha
Et que fait le programme en python ?
Il fait la somme, et drop le résultat.
On peut donc dire, vu que le C évite le calcul inutile, que le compilateur C est plus optimisé que pypy, en éliminant le code inutile.


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#35 Le 23/06/2014, à 10:46

grim7reaper

Re : programation questions general, lien systeme et renseignements

Mouais, t'as rien compris quoi >_<
Va-y, met le code de add dans un .so (ce qui est l'équivalent d'un module Python) et on en reparle de qui drop quoi.

Hors ligne

#36 Le 23/06/2014, à 10:54

tiramiseb

Re : programation questions general, lien systeme et renseignements

Haleth a écrit :

vu que le C évite le calcul inutile, que le compilateur C est plus optimisé que pypy, en éliminant le code inutile.

Ça serait vrai s'il savait "éliminer le code inutile" quand il est placé dans un autre fichier, ce qui n'est pas le cas.
C'est exactement ce que ce cas de figure démontre : PyPy sait optimiser quand on utilise une bibliothèque, pas GCC.

Et en effet, tu as sauté à pieds joints dans mon troll...
grim7reaper te suit de très près, cela dit... smile

Hors ligne

#37 Le 23/06/2014, à 11:01

grim7reaper

Re : programation questions general, lien systeme et renseignements

tiramiseb a écrit :
Haleth a écrit :

vu que le C évite le calcul inutile, que le compilateur C est plus optimisé que pypy, en éliminant le code inutile.

Ça serait vrai s'il savait "éliminer le code inutile" quand il est placé dans un autre fichier, ce qui n'est pas le cas.

C'est plus compliqué que ça.
GCC sait éliminer le code inutile même s'il est dans un autre fichier à condition que tu le compiles en même temps que ton programme (grace à la LTO).
Par contre, si le code est dans une bibliothèque, là oui GCC ne peut pas le faire.

Hors ligne