1"use strict";(globalThis.webpackChunk||=[]).push([[4440],{4518(e,n,i){i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"BaseProg/HautNiveauVsBasNiveau","title":"Niveaux d\u2019abstraction : du code source \xe0 la machine","description":"\xab Haut niveau \xbb et \xab bas niveau \xbb d\xe9crivent la distance entre ce que le code","source":"@site/docs/BaseProg/HautNiveauVsBasNiveau.md","sourceDirName":"BaseProg","slug":"/BaseProg/HautNiveauVsBasNiveau","permalink":"/docs/BaseProg/HautNiveauVsBasNiveau","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{},"sidebar":"bibliotechSidebar","previous":{"title":"Socle commun de la programmation","permalink":"/docs/BaseProg/socle"},"next":{"title":"Compilation, interpr\xe9tation et ex\xe9cution","permalink":"/docs/BaseProg/CompilationVsInterpretation"}}');var t=i(4848),s=i(8453);const a={},l="Niveaux d\u2019abstraction : du code source \xe0 la machine",o={},c=[{value:"Le m\xeame besoin, plusieurs niveaux",id:"le-m\xeame-besoin-plusieurs-niveaux",level:2},{value:"Ce qu\u2019un niveau plus \xe9lev\xe9 abstrait",id:"ce-quun-niveau-plus-\xe9lev\xe9-abstrait",level:2},{value:"Langage, impl\xe9mentation et cha\xeene d\u2019outils",id:"langage-impl\xe9mentation-et-cha\xeene-doutils",level:2},{value:"Performance : mesurer la cha\xeene r\xe9elle",id:"performance--mesurer-la-cha\xeene-r\xe9elle",level:2},{value:"V\xe9rification observable",id:"v\xe9rification-observable",level:2}];function u(e){const n={code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"niveaux-dabstraction--du-code-source-\xe0-la-machine",children:"Niveaux d\u2019abstraction : du code source \xe0 la machine"})}),"\n",(0,t.jsx)(n.p,{children:"\xab Haut niveau \xbb et \xab bas niveau \xbb d\xe9crivent la distance entre ce que le code\nexprime et les d\xe9tails de la machine qu\u2019il faut g\xe9rer. Ce ne sont ni des notes\nde qualit\xe9, ni un classement automatique des performances."}),"\n",(0,t.jsx)(n.h2,{id:"le-m\xeame-besoin-plusieurs-niveaux",children:"Le m\xeame besoin, plusieurs niveaux"}),"\n",(0,t.jsxs)(n.p,{children:["Prenons un besoin observable : augmenter le code du caract\xe8re ",(0,t.jsx)(n.code,{children:"a"}),", puis afficher\n",(0,t.jsx)(n.code,{children:"b"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"En Python, les op\xe9rations sur les nombres, les cha\xeenes et la sortie standard\nsont fournies par l\u2019environnement :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-python",children:'code = ord("a")\nprint(chr(code + 1))\n'})}),"\n",(0,t.jsx)(n.p,{children:"En C, le programme nomme le type de la valeur et appelle une fonction de la\nbiblioth\xe8que standard :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-c",children:"#include <stdio.h>\n\nint main(void) {\n char letter = 'a';\n putchar(letter + 1);\n return 0;\n}\n"})}),"\n",(0,t.jsx)(n.p,{children:"En assembleur, les instructions et conventions d\xe9pendent de l\u2019architecture et\ndu syst\xe8me. Cet extrait x86-64 pour Linux place les arguments d\u2019un appel syst\xe8me\ndans des registres pr\xe9cis :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-asm",children:"section .data\n letter db 'b'\n\nsection .text\n global _start\n_start:\n mov rax, 1 ; write\n mov rdi, 1 ; stdout\n mov rsi, letter ; adresse des octets\n mov rdx, 1 ; longueur\n syscall\n"})}),"\n",(0,t.jsx)(n.p,{children:"Les trois extraits expriment un r\xe9sultat proche, mais ne d\xe9l\xe8guent pas les m\xeames\nd\xe9cisions \xe0 l\u2019outil ou au runtime."}),"\n",(0,t.jsx)(n.h2,{id:"ce-quun-niveau-plus-\xe9lev\xe9-abstrait",children:"Ce qu\u2019un niveau plus \xe9lev\xe9 abstrait"}),"\n",(0,t.jsx)(n.p,{children:"Selon le langage et son impl\xe9mentation, le programmeur peut d\xe9l\xe9guer :"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"la repr\xe9sentation et l\u2019allocation des valeurs ;"}),"\n",(0,t.jsx)(n.li,{children:"la gestion de la m\xe9moire ;"}),"\n",(0,t.jsx)(n.li,{children:"les conventions d\u2019appel ;"}),"\n",(0,t.jsx)(n.li,{children:"le choix exact des instructions processeur ;"}),"\n",(0,t.jsx)(n.li,{children:"une partie de la portabilit\xe9 entre syst\xe8mes et architectures."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Cette d\xe9l\xe9gation rend certaines intentions plus courtes \xe0 exprimer. Elle ne dit\
1npas \xe0 elle seule comment le programme sera ex\xe9cut\xe9 ni combien de ressources il\nconsommera."}),"\n",(0,t.jsx)(n.h2,{id:"langage-impl\xe9mentation-et-cha\xeene-doutils",children:"Langage, impl\xe9mentation et cha\xeene d\u2019outils"}),"\n",(0,t.jsx)(n.p,{children:"Un fichier source ne devient pas directement une action du processeur. Il passe\npar une cha\xeene concr\xe8te : analyse, transformations interm\xe9diaires, biblioth\xe8ques,\nruntime, syst\xe8me d\u2019exploitation et enfin instructions machine."}),"\n",(0,t.jsx)(n.p,{children:"Par exemple, un moteur JavaScript peut analyser le source, produire une\nrepr\xe9sentation interm\xe9diaire, interpr\xe9ter certaines parties et compiler \xe0 la\nvol\xe9e les portions souvent ex\xe9cut\xe9es. Un programme C est g\xe9n\xe9ralement compil\xe9\nen fichiers objets, li\xe9 avec des biblioth\xe8ques, puis charg\xe9 par le syst\xe8me. Les\nmots \xab compil\xe9 \xbb et \xab interpr\xe9t\xe9 \xbb d\xe9crivent donc des \xe9tapes d\u2019impl\xe9mentation,\npas une propri\xe9t\xe9 exclusive et immuable du langage."}),"\n",(0,t.jsx)(n.h2,{id:"performance--mesurer-la-cha\xeene-r\xe9elle",children:"Performance : mesurer la cha\xeene r\xe9elle"}),"\n",(0,t.jsx)(n.p,{children:"Un niveau d\u2019abstraction ne permet pas de conclure qu\u2019un programme sera \xab rapide \xbb\nou \xab lent \xbb. Le co\xfbt observ\xe9 d\xe9pend notamment de l\u2019algorithme, de l\u2019impl\xe9mentation\ndu langage, des optimisations, des entr\xe9es, des acc\xe8s m\xe9moire, des entr\xe9es-sorties\net du mat\xe9riel. Une comparaison utile fixe une charge de travail et mesure le\nm\xeame r\xe9sultat dans un environnement document\xe9."}),"\n",(0,t.jsx)(n.h2,{id:"v\xe9rification-observable",children:"V\xe9rification observable"}),"\n",(0,t.jsx)(n.p,{children:"Pour une application web que tu utilises, \xe9cris une cha\xeene sous cette forme :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"fichier source \u2192 outil ou moteur \u2192 repr\xe9sentation interm\xe9diaire \xe9ventuelle\n\u2192 runtime / syst\xe8me \u2192 processeur\n"})}),"\n",(0,t.jsx)(n.p,{children:"La v\xe9rification est r\xe9ussie si tu peux :"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"nommer au moins un fichier source r\xe9el ;"}),"\n",(0,t.jsx)(n.li,{children:"nommer l\u2019outil ou l\u2019environnement qui le traite ;"}),"\n",(0,t.jsx)(n.li,{children:"distinguer une transformation d\u2019une ex\xe9cution ;"}),"\n",(0,t.jsx)(n.li,{children:"expliquer pourquoi cette cha\xeene ne permet pas, seule, de pr\xe9dire la performance."}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453(e,n,i){i.d(n,{R:()=>a,x:()=>l});var r=i(6540);const t={},s=r.createContext(t);function a(e){const n=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.