Partage
  • Partager sur Facebook
  • Partager sur Twitter

Qu'est-ce qu'un script ?

    10 septembre 2016 à 10:40:22

    Bonjour,
    Je me suis lancé dans l'apprentissage de la programmation il y a quelques temps. J'ai suivi et terminé le cours de C++ d'OCR (pas de commentaire sur à quel point ce cours est bon ou mauvais merci), et je dois maintenant utiliser le Python pour des exercices en ISN (terminale S).
    Je me pose une question depuis un moment, et je ne suis pas sûr qu'il existe une réponse vu les avis partagés sur internet, mais je la (les) pose quand même pour essayer de comprendre un peu mieux au moins. Si vous pouvez m'expliquer au mieux, je vous en remercie ^^
    -quelle est la différence entre un programme et un script ? 
    J'ai toujours pensé que des scripts étaient des morceaux de programmes. Mais quand je vois certains langages désignés comme langages de script (JS par exemple), d'autres comme des langages de programmation “normale” (C++...), et d'autres je ne sais pas trop où les placer (Python).
    Du coup un programme fait effectuer des taches à l'ordinateur, et le script fait effectuer des taches au programme ? C'est ça ? Qu'est-ce qui les définit ?
    -dans quelles situations vaut il mieux utiliser un script et non un bout de programme ? 
    -comment fonctionnent les script ? Comment les inclure dans des programmes ? 
    Merci de m'éclairer, le concept a l'air intéressant mais je n'arrive pas à le comprendre  :)
    • Partager sur Facebook
    • Partager sur Twitter
    ~Speed
      11 septembre 2016 à 3:06:26

      Salut.

      Le Dragon Book (Compilateurs, principes, techniques et outils) donne la définition suivante (l'emphase est mienne).

      Dragon Book, section 1.3.1:

      Les langages de script sont des langages interprétés comprenant des opérateurs de haut niveau permettant de « coller ensemble » des résultats de calcul pour composer un nouveau calcul.

      On va prendre les deux éléments importants de la définition séparément.

      Globalement, il y a deux définitions d'un langage interprété, la formelle et la moins formelle. En général on utilise la seconde, la « vraie » définition n'étant pas très adaptée aux applications pratiques (mais reste intéressante à connaître).

      Avant de poser ces deux définitions, il faut déjà définir autre chose, la compilation, qui est un processus de traduction d'un programme écrit dans un langage A (langage source) en un programme écrit dans un langage B (langage cible). Hors de la littérature dédiée à la compilation, un langage compilé désigne souvent un langage ayant pour cible du langage machine, mais le langage cible peut vraiment être n'importe quoi (par exemple, on peut tout à fait compiler du C vers du Python). Le programme d'entrée et le programme de sortie sont sémantiquement équivalent (si le compilateur est exempt de bugs, ce qui est un autre sujet).

      Bref, retour à l'interprétation. Dans le langage courant, on dit qu'un programme est interprété si on peut directement passer son code source à un autre programme (l'interprète) qui va exécuter le programme. En général, l'interprète réalise une étape de compilation à la volée vers du bytecode, pour des optimisations ou pour faciliter le processus. Les langages interprétés sont donc tous les langages où tu peux faire du plug&play avec ton code sans avoir à faire une compilation manuelle avant l'exécution. Par exemple, Python, Perl, Javascript, etc.

      D'un point de vue plus formel, un programme interprété est un programme directement exécuté par une machine (virtuelle ou non), sans étape de compilation (c'est à dire que le jeu d'instructions de la machine correspond exactement à celui du langage dans lequel est écrit le programme d'entrée). La différence avec l'autre définition, c'est que Python et consorts ne sont pas considérés comme des langages interprétés, mais leurs bytecodes respectifs le sont. D'autres exemples sont le Brainfuck, ou encore un langage machine (interprété par un processeur physique). L'avantage de cette définition, c'est qu'elle sépare compilation et exécution, qui sont des concepts très différents à la fois sur le principe et sur la mise en œuvre.

      Le deuxième morceau important de la définition, c'est la notion de niveau d'abstraction. Plus un langage possède d'abstractions (fonctions, types, structures de contrôle, etc.) par rapport à une machine de Turing (un modèle de l'exécution d'un ordinateur), plus celui-ci sera dit de haut niveau. Par exemple, un langage comme Python, où l'on dispose d'objets, où le typage est très permissif (ou peu rigoureux, ça dépend du point de vue) et où l'on ne dispose pas d'accès direct à la mémoire est considéré comme de haut niveau. À l'inverse, un langage d'assemblage (qui est simplement une représentation textuelle d'un langage machine), où les types n'existent pas et où la seule structure de contrôle est le saut à un autre endroit du programme, est dit de bas niveau. Puis on a une catégorie de langages ambigus comme le C, avec des abstractions mais pas trop et la possibilité de faire exploser la machine à chaque instruction.

      Il faut quand même garder à l'esprit que le niveau d'abstraction d'un langage a principalement du sens en comparaison avec un autre langage. Certaines personnes essaient de catégoriser les langages en bas niveau ou haut niveau, ce qui donne généralement lieu à des désaccord, la métrique étant totalement subjective et sans grand intérêt.

      Et donc, la réponse à la question, qu'est-ce qu'un script ? Un script est un programme écrit dans un langage de script, qui est un langage interprété et de haut niveau.

      Pour les autres questions :

      • Quelle est la différence entre un programme et un script ? Les scripts sont simplement des programmes particuliers, qui répondent à la description ci-dessus.
      • Dans quelles situations vaut il mieux utiliser un script ? En général tu utiliseras un langage de script pour prototyper rapidement et dans les cas où les performances intrinsèques d'un langage compilé vers un langage machine ne sont pas nécessaires (dans la grande majorité des cas, un langage compilé sera plus rapide qu'un langage interprété. Attention, ça ne veut pas dire que les langages compilés sont la panacée à tous les problèmes de performances. Un programme compilé mal conçu sera probablement très lent).
      • Comment fonctionnent les scripts ? C'est assez complexe. Tu peux regarder le principe d'une machine virtuelle, ça te donnera une idée.
      • Comment les inclure dans des programmes ? J'imagine que tu demande comment exécuter un programme interprété depuis un programme compilé. En général il suffit de lancer l'interprète depuis le programme compilé et de lui passer le code source du programme à interpréter. Ça peut passer soit par un appel direct à l'exécutable de l'interprète, ou alors par une bibliothèque.

      Une dernière chose, j'ai beaucoup utilisé dans mon explication les termes « langage compilé » et « langage interprété ». Il est important de garder à l'esprit que ce sont des abus de langage, un langage n'est ni compilé ni interprété en tant que tel. La distinction se fait au niveau des différentes implémentations, et il est tout à fait possible d'écrire un compilateur Python ou un interprète C++.

      • Partager sur Facebook
      • Partager sur Twitter
      Pony : Un langage à acteurs sûr et performant
        11 septembre 2016 à 10:21:57

        Merci beaucoup de ta réponse :) J'y vois déjà un peu plus clair, même si ça reste un concept compliqué ^^’

        J'irais jeter un oeil aux machines virtuelles.

        • Partager sur Facebook
        • Partager sur Twitter
        ~Speed

        Qu'est-ce qu'un script ?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown