• # Typage

    Posté par . En réponse au journal Qu'est-ce qu'un langage sécurisé ?. Évalué à 6.

    Bonsoir,

    Certains ont déjà parlé de la sécurité pour madame michu, j'y connais rien et ça ne m'intéresse pas des masses - j'ai une confiance naïve dans les quatre libertés o/

    Quoi qu'il en soit, dès qu'on touche à la sécurité de l'application ("es-ce que mon code fait ce pour quoi je l'ai codé et quoi qu'il arrive"), on se retrouve confronté à deux solutions complémentaires : le typage et les batteries de tests.

    Les langages fortement typés (Ada a déjà été cité, même si je préfère les langages fonctionnels, qui proposent de l'inférence de type et du polymorphisme, comme ocaml ou haskell [1]) garantissent lors de la compilation/parsage que l'ensemble du programme est cohérent. Vis à vis de php, python ou ruby (et même le c), c'est un énorme plus : pour débuger une application python, il est nécessaire de vérifier le code par la pratique (ie, de parcourir lors de l'éxecution l'ensemble des branches - ce qui n'est généralement pas possible sur de grosses applications).
    (Par exemple, HaskellDB [2] propose une solution intéressante au problème des injections sql en exploitant les capacités d'haskell comme l'explique brièvement ce slide : http://www.cs.chalmers.se/~bringert/publ/haskelldb/haskelldb(...) .)

    Tester son application consiste à vérifier qu'elle fait bien ce qu'elle doit faire d'une manière automatique (et en séparant les portions testées) : malheureusement, écrire les tests peut s'avérer long et chiant (tout en ne garantissant pas qu'ils mettent en évidence les bugs). À nouveau, le typage peut intervenir dans cette phase comme l'illustre QuickCheck [3] (et d'autres) en générant les tests à partir de rêgles simples. Couplé avec darcs [4], c'est une bonne solution pour garantir que le logiciel ne risque pas de se comporter bizarrement en cours de route.

    Bref, un typage fort est pour moi une feature extremement intéressante dans un langage de programmation :p (et pas seulement pour l'aspect sécuritaire, mais surtout pour l'expressivité qu'il apporte).

    http://fr.wikipedia.org/wiki/Typage_fort

    (En dehors d'ocaml et haskell, on citera également scala [5], qui en plus de proposer une syntaxe "à la java" (peut être plus accessible ?), utilise la jvm (d'où accès aux libs java (et vice versa) et surtout, le sandboxing pour la sécurité du coté utilisateur dont tu parlais au début))

    [1] http://fr.wikipedia.org/wiki/Objective_Caml & http://fr.wikipedia.org/wiki/Haskell
    [2] http://haskelldb.sourceforge.net/
    [3] http://en.wikipedia.org/wiki/QuickCheck
    [4] http://www.haskell.org/haskellwiki/How_to_write_a_Haskell_pr(...)
    [5] http://en.wikipedia.org/wiki/Scala_(programming_language)