. Ocaml, https://sympa-roc.inria.fr/wws/ arc/caml-list/2011-07/msg00135.html 1 La sérialisation consiste à encoder les données d'un graphe mémoire de sorte à pouvoir l, 2011.

.. Zamcov:-couverture-structurelle-non-intrusive, 137 VII.4.1 Génération des informations de couverture, p.138

L. Augustsson, Compiling pattern matching, Functional Programming Languages and Computer Architecture, pp.368-381, 1985.
DOI : 10.1007/3-540-15975-4_48

J. Barnes, High Integrity Software : The SPARK Approach to Safety and Security, 2003.

D. Bartholomew, QEMU : a multihost, multitarget emulator, Linux J, issue.145, p.3, 2006.

M. Beine and M. Jungmann, Code generation for safety-critical systems, Embedded Real Time Software, 2004.

B. Beizer, Software testing techniques, 1990.

F. Bellard, QEMU, a fast and portable dynamic translator, Proceedings of the annual conference on USENIX Annual Technical Conference, ATEC '05, pp.41-41, 2005.

D. Bjørner, Software Engineering 3 : Domains, Requirements, and Software Design. Texts in theoretical computer science, 2006.

D. Bjørner, Software Engineering : Abstraction and modelling. Texts in theoretical computer science, 2006.

M. Bordin, C. Comar, T. Gingold, J. Guitton, O. Hainque et al., Object and Source Coverage for Critical Applications with the COUVERTURE Open Analysis Framework, Embedded Real Time Software and Systems, 2010.

B. Canou, V. Balat, E. O. Chailloux, and . Browser, Objective Caml on browsers, ML '08 : Proceedings of the, pp.69-78, 2008.
URL : https://hal.archives-ouvertes.fr/hal-00327504

P. Caspi, A. Curic, A. Maignan, C. Sofronis, S. Tripakis et al., From simulink to SCADE/lustre to TTA, ACM SIGPLAN Notices, vol.38, issue.7, pp.153-162, 2003.
DOI : 10.1145/780731.780754

D. Clément, T. Despeyroux, G. Kahn, and J. Despeyroux, A simple applicative language: mini-ML, Proceedings of the 1986 ACM conference on LISP and functional programming , LFP '86, pp.13-27, 1986.
DOI : 10.1145/319838.319847

X. Clerc, Caml Virtual Machine ? Instruction set Document version : 1.4, 2010.

R. D. , C. , Z. Li, S. Pelagatti, and P. Weis, Skeletal Parallel Programming with OCamlP3l 2.0. Parallel Processing Letters, pp.149-164, 2008.
URL : https://hal.archives-ouvertes.fr/hal-00265664

G. Cousineau, P. Curien, and M. Mauny, The Categorical Abstract Machine, Proceedings of the ACM Conference on Functional Programming Languages and Computer Architecture , number 201 in Lecture Notes in Computer Science, pp.50-64, 1985.

G. Cousineau, P. Curien, and M. Mauny, The categorical abstract machine, Science of Computer Programming, vol.8, issue.2, pp.173-202, 1987.
DOI : 10.1016/0167-6423(87)90020-7

G. Cousineau and G. Huet, The CAML primer, 1990.
URL : https://hal.archives-ouvertes.fr/inria-00070045

P. Cousot, R. Cousot, J. Feret, L. Mauborgne, A. Miné et al., The ASTRE?? Analyzer, Proceedings of the European Symposium on Programming, pp.21-30, 2005.
DOI : 10.1007/978-3-540-31987-0_3

P. Cuoq, J. Signoles, P. Baudin, R. Bonichon, G. Canet et al., Experience report : OCaml for an industrial-strength static analysis framework, ICFP '09 : Proceedings of the 14th ACM SIGPLAN international conference on Functional programming, pp.281-286, 2009.

R. David, K. Nour, P. Curien, and C. Raali, Introduction à la logique : théorie de la démonstration : cours et exercices corrigés. Licence 3e année ; Master ; CAPES, 2004.

M. Dowson, The Ariane 5 software failure, ACM SIGSOFT Software Engineering Notes, vol.22, issue.2, p.84, 1997.
DOI : 10.1145/251880.251992

G. Durrieu, H. Waeselynck, and V. Wiels, LETO - A Lustre-Based Test Oracle for Airbus Critical Systems, Lecture Notes in Computer Science, vol.79, issue.9, pp.7-22, 2009.
DOI : 10.1109/5.97300

H. Cejtin, MLton documentation, 2012.

C. Foisy and E. Chailloux, Caml Flight : a Portable SPMD Extension of ML for Distributed Memory Multiprocessors, 1995.

F. Fornari, Certication of a Scade 6 compiler, 2008.

J. Garrigue, Relaxing the Value Restriction, International Symposium on Functional and Logic Programming, pp.196-213, 2004.
DOI : 10.1007/978-3-540-24754-8_15

J. Gosling and H. Mcgilton, The Java Language Environment White Paper, 1996.

A. Wolfgang, J. Halang, and . Zalewski, Programming languages for use in safety-related applications, Annual Reviews in Control, vol.27, pp.39-45, 2003.

N. Halbwachs, A Synchronous Language at Work: The Story of Lustre, Proceedings of the 2nd ACM/IEEE International Conference on Formal Methods and Models for Co-Design, ME- MOCODE '05, pp.3-11, 2005.
DOI : 10.1002/9781118459898.ch2

URL : https://hal.archives-ouvertes.fr/hal-00190883

N. Halbwachs, P. Caspi, P. Raymond, and D. Pilaud, The synchronous dataow programming language Lustre, Proceedings of the IEEE, pp.1305-1320, 1991.

T. Hardin, F. Pessaux, P. Weis, and D. Doligez, Focalize reference manual 0.6.0, dec, 2009.

K. J. Hayhurst, D. S. Veerhusen, J. J. Chilenski, and L. K. Rierson, A Practical Tutorial on Modied Condition/Decision Coverage, 2001.

G. Henry, M. Mauny, E. Chailloux, and P. Manoury, Typing unmarshalling without marshalling types, pp.287-298, 2012.
URL : https://hal.archives-ouvertes.fr/hal-01282253

G. Henry, Typer la sérialisation sans typer la désérialisation, 2011.

. Intel, . Fdiv-replacement, and . Program, Statistical Analysis of Floating Point Flaw : Intel White Paper Section 3 : Description of the Flaw, 2009.

M. Jones, What really happened on Mars ?, 1997.

D. Koncaliev, Pentium FDIV bug, 1998.

A. J. Kornecki, Software Development Tools for Safety-Critical, Real-Time Systems Handbook . Final Report DOT, National Technical Information Service (NTIS), vol.35, 2007.

A. J. Kornecki, N. Brixius, J. Zalewski-herman-lau, J. Linardon, J. Labbe et al., Assessment of Software Development Tools for Safety-Critical, Real-Time Systems, National Technical Information Service (NTIS), vol.36, 2007.

J. Andrew, J. Kornecki, and . Zalewski, Software certication for safety-critical systems : A status report, Computer Science and Information Technology, pp.665-672, 2008.

J. Andrew, J. Kornecki, and . Zalewski, Certication of software for real-time safety-critical systems : state of the art, Innovations in Systems and Software Engineering, vol.5, issue.2, pp.149-161, 2009.

G. Ladier and D. Le, Logique, historique, contenu, application, mar 2003. RIS Atelier « Justication de sûreté de fonctionnement, p.3

F. L. , F. , and L. Maranget, Optimizing pattern matching, ICFP '01 : Proceedings of the sixth ACM SIGPLAN international conference on Functional programming, pp.26-37, 2001.

X. Leroy, The ZINC experiment : an economical implementation of the ML language, 1990.
URL : https://hal.archives-ouvertes.fr/inria-00070049

X. Leroy, A Formally Verified Compiler Back-end, Journal of Automated Reasoning, vol.27, issue.1, pp.363-446, 2009.
DOI : 10.1007/s10817-009-9155-4

URL : https://hal.archives-ouvertes.fr/inria-00360768

X. Leroy, D. Doligez, J. Garrigue, D. Rémy, and J. Vouillon, The Objective Caml system (release 3.11) : Documentation and user's manual, Institut National de Recherche en Informatique et en Automatique, 2008.

N. Leveson, Medical Devices : The Therac-25, 1993.

T. Lindholm and F. Yellin, The Java T M Virtual Machine Specication, Une version plus récente pour Java SE 7 Edition est disponible en PDF : http, 1999.

M. International, Understanding safety integrity level, 2011.

L. Mandel and M. Pouzet, ReactiveML, un langage fonctionnel pour la programmation r??active, Techniques et sciences informatiques, vol.27, issue.8, pp.9-101097, 2008.
DOI : 10.3166/tsi.27.1097-1128

L. Maranget, Compiling pattern matching to good decision trees, Proceedings of the 2008 ACM SIGPLAN workshop on ML, ML '08, pp.35-46, 2008.
DOI : 10.1145/1411304.1411311

R. Milner, Logic for computable functions : description of a machine implementation, 1972.

R. Milner, A theory of type polymorphism in programming, Journal of Computer and System Sciences, vol.17, issue.3, pp.348-375, 1978.
DOI : 10.1016/0022-0000(78)90014-4

R. Milner, M. Tofte, and R. Harper, The denition of Standard ML, 1990.

R. Milner, M. Tofte, R. Harper, and D. Macqueen, The Denition of Standard ML - Revised, 1997.

J. Glenford and . Myers, The Art of Software Testing, 1979.

J. Glenford, T. Myers, C. Badgett, and . Sandler, The Art of Software Testing, 2011.

J. Glenford, T. Myers, T. M. Badgett, C. Thomas, and . Sandler, The Art of Software Testing, 2004.

B. Pagano, O. Andrieu, B. Canou, E. Chailloux, J. Colaço et al., Certified Development Tools Implementation in Objective Caml, Practical Aspects of Declarative Languages, pp.2-17, 2008.
DOI : 10.1007/978-3-540-77442-6_2

URL : https://hal.archives-ouvertes.fr/hal-00319700

B. Pagano, O. Andrieu, T. Moniot, B. Canou, E. Chailloux et al., Experience Report : Using Objective Caml to Develop Safety-Critical Embedded Tools in a Certication Framework, ICFP '09 : Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming, pp.215-220, 2009.

B. Pagano, B. Canou, E. Chailloux, J. Colaço, and P. Wang, Couverture de code Caml pour la réalisation d'outils de développement certiés, Actes des Journées Francophones des Langages Applicatifs, pp.61-75, 2007.

R. Pickering, Foundations of F#, 2007.

C. Benjamin and . Pierce, Types and Programming Languages Massachusetts Institute of Technology, 2002.

F. Pottier and D. Rémy, Advanced Topics in Types and Programming Languages, chapter The Essence of ML Type Inference, 2005.

D. Rémy and J. Vouillon, Objective ML, Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '97, pp.40-53, 1997.
DOI : 10.1145/263699.263707

D. Rémy and J. Vouillon, Objective ML, Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '97, pp.27-50, 1998.
DOI : 10.1145/263699.263707

J. Souyris and D. Favre-félix, Proof of Properties in Avionics, Building the Information Society IFIP International Federation for Information Processing, pp.527-535, 2004.
DOI : 10.1007/978-1-4020-8157-6_48

J. Souyris, V. Wiels, D. Delmas, and H. Delseny, Formal Verification of Avionics Software Products, Lecture Notes in Computer Science, vol.5850, pp.532-546978, 2009.
DOI : 10.1007/978-3-642-05089-3_34

B. Vaugon, P. Wang, and E. Chailloux, Les microcontrôleurs PIC programmés en Objective Caml, Actes des vingt-deuxièmes Journées Francophones des Langages Applicatifs, pp.177-207, 2011.

A. Sergiy, J. P. Vilkomir, and . Bowen, From MC/DC to RC/DC : formalization and analysis of control-ow testing criteria, Formal Aspects of Computing, vol.18, issue.10, pp.42-62, 1007.

P. Wang, A. Jonquet, and E. Chailloux, Non-Intrusive Structural Coverage for Objective Caml Electronic Notes in Theoretical Computer Science, Proceedings of the Fifth Workshop on Bytecode Semantics, Verication, pp.59-73, 2010.

P. Weis and X. Leroy, Nouvelle version (libre) téléchargeable : http, Le langage Caml. InterEditions, 1993.

K. Andrew and . Wright, Simple imperative polymorphism, Lisp Symb. Comput, vol.8, issue.4, pp.343-355, 1995.

Y. Tak, Y. , and M. F. Lau, A comparison of MC/DC, MUMCUT and several other coverage criteria for logical decisions, J. Syst. Softw, vol.79, pp.577-590, 2006.

?. Soit-un-type, non quantié) : t. Un type est ? soit un nom (type simple), noté t (tout comme les types en général)

T. Accès-en-lecture-aux-champs and C. , Si e est de type t et t(f ) est valide (ce qui veut dire que t est un type qui contient le champ f ), alors e.f est de type t(f ) (c'est-à-dire le type associé à f dans t). L'accès à un champ inexistant ou mal typé ne doit pas arriver

. La-représentation-des-valeurs-est-uniforme, Chaque valeur est soit un entier, soit un pointeur vers un bloc de données. Les entiers sont distingués par le bit de poids le plus faible : s'il est à 1, c'est que ce n'est pas une adresse mémoire puisque tous les mots font un nombre pair d'octets. Un bloc de données possède un entête permettant de savoir sa taille et ce qu'il contient (fermeture, constructeur de type somme, etc.) La machine possède une instruction (isint) dédiée à la distinction « entier versus pointeur

Z. Diverses-implantations-de-la and Z. Il-existe-un-certain-nombre-d-'implantations-de-la, en voici quelques exemples par ordre chronologique croissant de naissance : ? en C, ocamlrun : L'originale fournie dans la distribution standard d'OCaml [52], par l'INRIA, est certainement la plus diusée et utilisée. Il s'agit donc de la machine de référence. À ce jour, elle est maintenue et la distribution OCaml continue d'évoluer

?. En-ocaml, Développé à la n des années 1990, un module de chargement dynamique de code (pour permettre de charger et exécuter du bytecode OCaml au sein d'un programme compilé vers du code natif) contient une machine virtuelle OCaml développée en OCaml

?. En and J. , Cadmium : Developpé et distribué par Clerc [16], Cadmium est un projet qui permet de faire interagir OCaml et Java. La distribution comprend

?. En-javascript and O. Browser, Developpé par Canou [11] au sein du projet Ocsigen visant à programmer le web en OCaml, O'Browser fournit une ZAM implantée en JavaScript an de pouvoir programmer les manipulation sur le DOM en OCaml

?. and P. Ocapic, Développé par Vaugon [82] dans le but de pouvoir programmer les micro-contrôleurs PIC18 en OCaml, le projet OCAPIC fournit un ensemble d'outils pour réduire la taille du bytecode ainsi qu'une ZAM en assembleur PIC18

. Enn, Par exemple, dans le code suivant, la fonction appelée en position terminale est inconnue au niveau du site d'appel. let f = fun t x -> let g = t. contents in g x B.2.2 Appels récursifs terminaux Un appel est terminal et récursif lorsqu'il se trouve en position terminale et qu'il est un appel à la fonction courante. Plus généralement, un appel est terminal et récursif lorsqu'il se trouve en position terminale et qu'il est un appel à une fonction G faisant appel à la fonction courante F

. Lorsqu-'on and . Reviendra, on se contentera de rendre le résultat qu'on viendra de récupérer, donc l'espace utilisé par la fonction courante sur la pile sera inutilisé

. Lorsqu-'un-appel-est-récursif, en particulier si c'est une implantation d'un algorithme récursif, on aura une potentielle grande consommation de la pile