Informatique Recherche de livre pour apprendre le jave et le C++

Anelya

Bucheron
17 Août 2016
11
3
14
33
Android n'est pas codé en soi en Java. Il est basé sur le noyau Linux qui est exclusivement codé en C. Ils ont juste foutu leur propre JVM (dalvik jusqu'à lollipop je crois, ensuite je sais plus), et construit une partie de leur OS (tout ce qui est apps je crois) en Java.

D'où le "pas à proprement parlé". Je tenais simplement à souligner que le java est loin d'être peu utilisé. Suffit de voir le nombre d'offres d'emploi pour du développement java de toute manière.
 

TD_

Jeune vieux
5 Juillet 2014
434
29
135
26
Alsace, Colmar
En soit j'adore le java donc temps qu'il reste fonctionnel ça me va.
Le C j'ai commencé, mais c'est un langage qui m'a très peut inspiré, en C pas moyen d'essayer d'y comprendre quelque chose si tu n'as pas un minimum de connaissances. Enfin c'est perso
 

Asu

Cheval d'égout
Ancien
2 Avril 2011
1 862
420
217
23
Bouches-du-Rhône, France
Je parle du C++ depuis le début, pas du C. Le C c'est un langage compliqué à apprendre car il est vachement bas niveau comparé au reste des langages populaires aujourd'hui. Même si le langage en soi reste des plus simples dans le concept.
Le problème en C++ c'est que beaucoup de tutoriels ne sont pas du tout à jour, et n'apprennent pas les concepts modernes apportés par les nouveaux standards (notamment le C++11).
 

LeMyth0

Il faut dire la vérité, rien que la vérité !
28 Décembre 2014
398
25
90
Je vois qu'on parle beaucoup des langages C, C++ et Java mais avons nous des langage plus poussés ? Des langage qui appartiennent à des groupe privé un truc du genre ? Pourquoi on ne parle pas des langage "traducteurs" ?
 

LeMyth0

Il faut dire la vérité, rien que la vérité !
28 Décembre 2014
398
25
90
Ce sont plutôt des logiciels de traduction. Comment un ordinateur passe de la demande d'utilisateur au fonctionnement en binaire. Vois-tu le genre ?
 

TD_

Jeune vieux
5 Juillet 2014
434
29
135
26
Alsace, Colmar
Ce sont plutôt des logiciels de traduction. Comment un ordinateur passe de la demande d'utilisateur au fonctionnement en binaire. Vois-tu le genre ?
Bhé c'est un peu ce qu'il se passe avec Java, sans Java installé sur ton PC tu ne lance pas ton code. Par contre que ton PC soit un linux, osx ou windows, Java traduit.
Apres c'est surement possible de traduire un code directement, mais bon... Je me demande qui aura le courage x)
Regarde => https://fr.wikipedia.org/wiki/Liste_des_langages_de_programmation

Apres ils ont chacuns leurs spécialités

Orientés objet
Impératifs
Fonctionnels
Déclaratifs
Concurrents
Merci Wiki :)
 

Neph

Cyberchenapan
15 Mai 2016
386
168
155
autre part
crypt.lol
Je vois qu'on parle beaucoup des langages C, C++ et Java mais avons nous des langage plus poussés ? Des langage qui appartiennent à des groupe privé un truc du genre ? Pourquoi on ne parle pas des langage "traducteurs" ?

Je ne suis pas certain de bien saisir le sens de ton interrogation lorsque tu parles de langages "traducteurs". Mais si j’interprète bien, il n'existe pas vraiment de tel langage. On pourrait éventuellement parler d'algorithme (pour les compilateurs, interpréteurs, linkers, etc), mais, c'est tout.
Un fichier sur ton pc n'est qu'une suite d'octets, ton code source également. Il faut donc pour ton pc un moyen de transformer ce code en langage machine, une suite d'octets représentant des instructions compréhensibles par ton processeur (et non pas du texte). Dans n'importe quel cas, ton programme, lors de son exécution, finira en suite d'instructions compréhensibles (et spécifiques) par ta machine.
Pour arriver à ce résultat, un compilateur peut être écrit en utilisant n'importe quel langage de programmation, y compris celui pour lequel il est destiné.

Concrètement, en vulgarisant (mais pas trop =), ça pourrait ressembler à quelque chose de similaire.
Ton code source est celui ci. Il va devoir être compilé (ou interprété) afin d'être exécuté (ici, sur une arch x86_64).

Code:
une_fonction () {
  une_chaine = "Hello world\n";

  print une_chaine;
}

Comme tu l'as dit, il suffit de traduire ce code (une suite d'octets représentant des valeurs ascii) en suite d'octets représentant des instructions. Ton compilateur (ou interpréteur) connait la syntaxe de ton langage et va remplacer cela par les valeurs correspondantes aux instructions dans un fichier exécutables (ou le faire lors de l'exécution pour l'interpreteur).
Lors de son exécution, l'os va charger les instructions de ton programme en mémoire. Cela *pourrait* ressembler à quelque chose du genre si on examinait le contenu de celle ci.

Code:
push rbp                                                                           ; function prologue
mov  rbp, rsp

sub  rsp, 0x10
mov  QWORD_PTR[rbp - 0x10], 0x6f77206f6c6c6548   ; ow olleH
mov  DWORD_PTR[rbp - 0x8], 0x0a646c72                   ; \ndlr

mov  rax, 0x1                                                                    ; write() system call
mov  rdi, 0x1                                                                     ; descripteur de fichier 1 (stdout)
lea  rsi, [rbp - 0x10]                                                           ; adresse de la chaine de caractère "Hello world\n" (chut)
mov  rdx, 0xb                                                                    ; longueur de la chaine de caractère
int  0x80                                                                            ; interuption
;passe le relais au kernel qui va alors s'occuper d'aller écrire la chaine de caractère à l'adresse corespondante à stdout (sans importance)

leave                                                                                 ; function epilogue (mov rsp, rbp // pop rpb)
ret

Il s'agit de la suite d'instructions du programme (en asm). Chacune de ces lignes est en réalité une suite d'octets (l'asm est la pour simplifier la lecture) représentant une instruction.
Par exemple, les deux premières ressemblent en réalité à quelque chose de similaire (cette fois ci en hexadecimal):
Code:
55
48 89 e5

Comprendre ce code a peu d'importance (il ne correspond de toute manière pas totalement à la réalité).
Mais on voit bien qu'il serait facile d'écrire un programme qui transformerait, par exemple, une_chaine = "Hello world\n" en cette série de trois instructions:
Code:
sub  rsp, 0x10
mov  QWORD_PTR[rbp - 0x10], 0x6f77206f6c6c6548  ; ow olleH
mov  DWORD_PTR[rbp - 0x8], 0x0a646c72  ; \ndlr


J'espère que ça t'aidera à y voir plus clair et non pas l'inverse (et que je n'ai pas raconté trop de conneries). J'ai un gros doute après relecture..

Et puisque ça parlait initialement de livres. Sur le sujet, sans partir trop loin, pour "dégrossir" un peu le fonctionnement d'un système d'exploitation, je recommande "The Linux programming interface" de Michael Kerisk (il n'existe malheureusement pas en français :/).
Faire du C peut également énormément aider à comprendre si on s'intéresse un minima aux différentes phases de la compilation et de l'édition de liens (linker, dynamic loader).
Se renseigner sur le format des exécutables (que ça soit PE ou ELF) peut également être pas mal.
 
Dernière édition:
  • J'aime
Reactions: Diagamma