Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Notre professeur d'architecture des ordinateurs a affirmé aujourd'hui que le langage C était un langage de haut niveau.
Pourquoi ? Car « le code passe par un compilateur, cela fait donc du C un langage de haut niveau ». PEBKAC.
PEBKAC #5756 proposé par UbuntuMan le 04/10/2012 | 27 commentaires | 👍🏽 👎🏽 +79
Je peux te trouver des bouquins d'assembleur où on t'expliquera que le Pascal, le C ou le Fortran sont des langages de haut niveau. Il faut un référentiel pour affirmer ça, mais étant donné qu'il s'agit d'un prof d'architecture, il est très facile de supposer que pour lui, le bas niveau c'est de coder en binaire.
Commentaire #60833 écrit par Skefrep le 04/10/2012 à 12h41 | 👍🏽 👎🏽
ben moi aussi j'ai déjà entendu ça de la part d'un prof, ça m'a aussi surpris mais je serais curieux de connaître le fin mot.
Commentaire #60837 écrit par grosse fesse le 04/10/2012 à 12h48 | 👍🏽 👎🏽
@Morrock : c'est pas un problème de réciproque ?
Je veux dire, ça existe des langages de bas niveau compilés ?
Commentaire #60841 écrit par Fana le 04/10/2012 à 12h52 | 👍🏽 👎🏽
Tout à fait.

Cependant, la justification « le code passe par un compilateur, cela fait donc du C un langage de haut niveau » est tout de même une belle aberration.
Commentaire #60842 écrit par Morrock le 04/10/2012 à 12h53 | 👍🏽 👎🏽
Ben le bas niveau, c'est le langage proche de la machine (virtuelle ou pas), où tu peux gérer toute action de la machine. Il dépend donc fortement de la machine. Le haut niveau ce sont les autres qui n'en dépendent pas.

Le C est du haut niveau, car je n'ai pas besoin de savoir sur quel type de machine je suis pour faire, un programme. J'ai juste besoin du compilateur adapté. Il y a ce qu'on appelle une abstraction.
Commentaire #60846 écrit par but2ene le 04/10/2012 à 13h07 | 👍🏽 👎🏽
L'assembleur en est un. Il faut quand même gérer les macros et changer les noms des instructions, avant de le donner à manger à ton ordi. Donc de le compiler même si ça demande moins de calculs.
Pourtant c'est du bas niveau.
Commentaire #60847 écrit par but2ene le 04/10/2012 à 13h10 | 👍🏽 👎🏽
Ben justement le référentiel est : le langage dépend-il d'une machine ou d'un type de machine ou pas ?
Commentaire #60848 écrit par but2ene le 04/10/2012 à 13h13 | 👍🏽 👎🏽
Et des langages haut niveaux pas compilés, ça existe aussi ? Les langages interprétés sont considérés comme tels ?
Commentaire #60849 écrit par Fana le 04/10/2012 à 13h17 | 👍🏽 👎🏽
Le bouton Power de mon ordinateur est une instruction de bas niveau :-)
Commentaire #60851 écrit par juu le 04/10/2012 à 13h26 | 👍🏽 👎🏽
Sauf qu'en C, certains types n'ont pas la même longueur en fonction de l'architecture sur laquelle tu compiles ! Il est vrai que si c'est bien codé au départ, ça marche bien. Mais il est extrèmement facile de tout casser et de ne pas comprendre pourquoi en C...
Commentaire #60861 écrit par Acné le 04/10/2012 à 14h27 | 👍🏽 👎🏽
Je pense que ça dépend dans quel cadre on se place. Mon prof d'architecture machine considérait effectivement que le C était du haut niveau, et je crois que le bas niveau c'était l'assembleur pour lui. Mais il y avait un contexte : on se plaçait vraiment au niveau de la machine.
Mais les profs qui enseignent le C le considéraient eux comme bas niveau, mais là on parle par rapport aux autres langages "haut niveau".

Suis pas sure que ce soit bien clair ce que je dis...
Commentaire #60862 écrit par Elissa :-) le 04/10/2012 à 14h48 | 👍🏽 👎🏽
Euh, je suis le seul à me souvenir comment ça marche ces trucs là ou quoi ?!

Grosso modo, le compilateur passe d'un langage de haut niveau à un langage de bas niveau.
Puis un assembleur produit du code machine à partir d'un langage de bas niveau.
(je passe les étapes de liens et de pré-traitement)

Donc techniquement, l'affirmation n'est pas *complètement* fausse même si ça n'est pas la meilleure définition. Après, certains objecteront que le C *n'est pas* un langage de haut niveau, mais c'est un autre débat :)

ps.: l'assembleur ne se compile pas...
Commentaire #60863 écrit par lnl le 04/10/2012 à 14h49 | 👍🏽 👎🏽
Yep, et binaire avec ça.
Commentaire #60871 écrit par N. le 04/10/2012 à 16h26 | 👍🏽 👎🏽
Non :
« Il ne passe pas par un compilateur » = langage compris (presque) nativement par la machine = bas niveau
« Il passe par un compilateur » = langage compris (presque) nativement par l'humain = haut niveau
Commentaire #60875 écrit par BSK le 04/10/2012 à 17h20 | 👍🏽 👎🏽
Oui, tu ne les traduit pas vu qu'ils sont interprété. Donc pas de compilation au vrai sens du terme.
Commentaire #60891 écrit par but2ene le 04/10/2012 à 18h04 | 👍🏽 👎🏽
Idem pour celui de la multiprise où il est branché.
Commentaire #60892 écrit par but2ene le 04/10/2012 à 18h05 | 👍🏽 👎🏽
Même le langage assembleur passe par un compilateur... même s'il se borne a convertir des instructions simples en code hexadécimal, et des variables en adresses mémoire.

Donc oui, c'est une belle aberration.
Commentaire #60894 écrit par OzoneGrif le 04/10/2012 à 18h12 | 👍🏽 👎🏽
Ben un compilateur c'est de transformer d'un langage source à un langage cible.
J'ai un compilateur d'Esterel en C. Les deux étant des langages de haut niveau.

Si l'assembleur-Macro ne se compile comment transforme tu un fichier du style :
ReadCol MACRO seleCol, num1,num2,num3,num4 ;envois le nombre presse dans w et key, num doivent etre des constantes
SelCol seleCol ;Selectionne la colone a scanner
movfw key ;Mets la valeur key dans W
btfss PORTB,bLINE1 ;Regarde si la ligne 1 est presse
movlw num1 ;Si c'est le cas on met la valeur num1 dans w et rien sinon
btfss PORTB,bLINE2 ;Regarde si la ligne 2 est presse
movlw num2 ;Si c'est le cas on met la valeur num2 dans w et rien sinon
btfss PORTB,bLINE3 ;Regarde si la ligne 3 est presse
movlw num3 ;Si c'est le cas on met la valeur num3 dans w et rien sinon
btfss PORTB,bLINE4 ;Regarde si la ligne 4 est presse
movlw num4 ;Si c'est le cas on met la valeur num4 dans w et rien sinon
movwf key ;On stoque le résultat dans key w n'est pas change.

en série de caractères non visible que le cpu comprends ?
Commentaire #60895 écrit par but2ene le 04/10/2012 à 18h13 | 👍🏽 👎🏽
Donc les langages interprétés sont des languages de bas niveaux puisqu'ils ne passent pas par un compilateur !
Commentaire #60906 écrit par vadim le 04/10/2012 à 19h30 | 👍🏽 👎🏽
Un langage de bas niveau est proche de la machine.
Un langage de haut niveau s'abstrait des spécificités de la machine.
Et bien sur, différents langages ont différents niveaux d'abstraction, donc certains langages sont plus "haut niveau" que d'autres..

Par rapport à l'assembleur, le C est un langage de haut niveau.
Par exemple on peut écrire i = j +k; sans (trop) se soucier des types de chaque variable et surtout sans se soucier de savoir si les instructions correspondantes travaillent sur les registres, sur la pile, ou sur la RAM.

Par rapport au C#, le C est un langage de bas niveau.
Par exemple, on peut écrire patate = new ClassPatate(); sans se soucier de récupérer la taille de ClassPatate, ni connaitre la liste des membres à initialiser.
Commentaire #60907 écrit par Shirluban le 04/10/2012 à 19h51 | 👍🏽 👎🏽
@ BSK : Donc d'après toi, tous les langages interprétés sont des langages de bas niveau?
Commentaire #60918 écrit par Morrock le 04/10/2012 à 21h03 | 👍🏽 👎🏽
"C is a very nice high level language"
-- John Mashey, Bell Labs
(source : http://www.youtube.com/watch?v=tc4ROCJYbm0&t=19m24s )
Commentaire #60923 écrit par Enerhpozyks le 04/10/2012 à 22h49 | 👍🏽 👎🏽
Pour corriger la confusion sur ce thread entre "compilateur" et "assembleur", je citerais Wikipedia qui donne une définition précise de la différence :

"Contrairement à un langage de haut niveau, il y a une correspondance un à un (une bijection) entre le code assembleur et le langage machine. Ainsi il est théoriquement possible de traduire le code dans les deux sens sans perte d'information. La transformation du code assembleur en langage machine est accomplie par un programme nommé assembleur, dans l'autre sens par un programme désassembleur. Les opérations s'appellent respectivement assemblage et désassemblage."

Il n'est pas possible de générer du code C à partir d'un code compilé, c'est donc un langage de haut-niveau.
Mais bien sûr tout est relatif, donc un programmeur Java trouvera que le C est un langage de bas niveau, mais c'est un abus de langage qui signifie "est un langage de plus bas niveau".
Commentaire #60945 écrit par paulez le 05/10/2012 à 11h44 | 👍🏽 👎🏽
@Morrock : non, ici l'interpréteur c'est comme un compilateur.
Commentaire #61648 écrit par Loki le 11/10/2012 à 23h19 | 👍🏽 👎🏽
Ici c'est un booléen : On, le circuit est fermé et le courant passe. Off, le circuit est ouvert et le courant ne passe plus.
1 ou 0 -> Binaire /o/
Commentaire #66954 écrit par ROB le 24/11/2012 à 17h02 | 👍🏽 👎🏽
l'assembleur ne passe pas par un compilateur mais par un assembleur, c'est bien ce qui en fait un langage bas niveau
Commentaire #81378 écrit par Yo le 28/02/2013 à 14h20 | 👍🏽 👎🏽
@Yo, je confirme, le compilateur transforme en premier le code C (par exemple) en code assembleur, puis utilise l'assembleur pour faire du code machine. Si on développe en assembleur, on utilise directement l'assembleur
Commentaire #92829 écrit par Garf365 le 16/05/2013 à 16h26 | 👍🏽 👎🏽