. .. Contrôle-d'exécution-javascript-asynchrone, , p.70

, Chapitre 7

, Environnement de développement

.. .. Sommaire-;-intérêt,

.. .. Fonctionnement-interne,

. .. Conclusion,

. .. Extensions-du-langage,

, Annexe C Architecture globale de l'implémentation du compilateur Hiphop.js

, ? docker/ : fichiers permettant la création d'une image Docker comprenant un système minimal GNU/Linux avec Hop.js et Hiphop.js pré-installés

, ? examples/ : exemples de programmes Hiphop.js

, ? lib/ : compilation vers les circuits Esterel et environnement d'exécution de programmes Hiphop.js

, ? node_modules/ : bibliothèques tierces, actuellement seule source-map 1 est utilisée par le préprocesseur Hiphop.js

?. Package, json : méta-informations sur la distribution Hiphop.js. Il contient une information nécessaire pour que Hop.js puisse exporter l'environnement Hiphop.js sur le client

, ? preprocessor/ : implémentation du préprocesseur de Hiphop.js

, La commande ./TEST lance l'ensemble des tests, ./TEST abro lance le test implémenté par les fichiers abro.js et abro.out. Enfin, l'option-g lance Hop.js en mode de développement pour l, ? tests/ : tests de non régression de Hiphop.js

, ? ulib/ : bibliothèques utilisateur de Hiphop.js expérimentales

, Détails de lib/ Le dossier lib/ contient les fichiers suivants : ? ast.js : définit les différentes classes de l'AST de Hiphop.js. Cet AST est construit par Hop.js lors de l'évaluation des instructions Hiphop.js

?. Batch, js : définit un environnement permettant de lancer une invite de commandes d'une machine réactive. La fonction batch exportée par la distribution Hiphop.js prend une machine réactive en paramètre et démarre une invite de commandes. La syntaxe est similaire à l'invite de commandes Esterel, 2000.

?. Compiler, js : définit la transformation de chaque instruction Hiphop.js (représentée par un noeud d'AST) en circuit Esterel

, ? debugger-common.js : constantes et fonctions communes aux différentes parties du débogueur

?. Debugger, js : définit la partie du débogueur qui est attaché à une machine réactive

?. , js : définit la partie serveur du débogueur, c'est-à-dire la gestion des différentes instances de débogueurs et gestion de la partie cliente du débogueur

?. Error, js : définit les différentes erreurs pouvant être levées lors de la compilation ou l'exécution de programmes Hiphop

?. Hiphop, js : fichier d'entrée de la distribution Hiphop.js. Il exporte l'ensemble des fonctionnalités de Hiphop.js

?. Inheritance, js : définitions de fonctions facilitant le chaînage de prototypes JavaScript afin de simuler du sous-typage simple. Ce fichier est utilisé pour construire les différentes classes d'AST

?. Lang, js : définition de la syntaxe abstraite de Hiphop.js

?. Machine, js : permet de construire une machine réactive à partir de l'AST d'un programme Hiphop.js passé en paramètre. La gestion de la réaction, la gestion de EXEC, la liaison des signaux avec l'environnement, les proxies réactifs, l'activation du débogueur et l'accès aux métriques sont définis dans ce fichier

?. Net, js : constructeurs génériques permettant la génération des différents types de portes logiques Esterel. Ce fichier est utilisé par compiler.js pour construire les circuits correspondant à chaque instruction

D. Abramov, js : constructeurs génériques permettant la création des signaux ainsi que leur gestion lors de l'exécution d'une machine réactive, 2015.

B. and G. , Programming a digital watch in Esterel v3, 1989.

, The Esterel v5 Language Primer Version v5_91

B. and G. , The Foundations of Esterel, Proof, Language, and Interaction, pp.425-454, 2000.

B. and G. , The Constructive Semantics of Pure Esterel, 2002.

B. and G. , SCADE : Synchronous design and validation of embedded control software, Next Generation Design and Verification Methodologies for Distributed Embedded Control Systems, pp.19-33, 2007.

B. , G. Berry, and G. , Esterel de A à Z : 1. Principes, idées et styles pour la programmation réactive, vol.1, 2008.

B. and G. , Esterel de A à Z : Réincarnation statique des boucles en Esterel pour les compilations matérielles et logicielles efficaces, 2018.

. Esterel-de-a-À-z, Traduction des programmes Esterel en circuits digitaux pour la conception des circuits électroniques

B. , G. Et, B. , and G. , The chemical abstract machine, Theoretical computer science, vol.96, issue.1, pp.217-248, 1992.

B. , G. Et, G. , and G. , The ESTEREL Synchronous Programming Language : Design, Semantics, Implementation. Sci. Comput. Program, vol.19, issue.2, pp.87-152, 1992.

[. Berry, Hiphop : a synchronous reactive extension for Hop, Proceedings of the 1st ACM SIGPLAN international workshop on Programming Language and Systems Technologies for Internet Clients (PLASTIC), pp.49-56, 2011.

. Bjornson, , 2010.

, Composing Reactive GUIs in F# Using WebSharper, Proceedings of Symposium on Implementation and Application of Functional Languages (IFL), pp.203-216, 2016.

B. and F. , Reactive C : An extension of C to program reactive systems, Software : Practice and Experience, vol.21, issue.4, pp.401-428, 1991.

B. , F. Et, L. , and C. , Two Semantics for a Language of Reactive Objects, 1995.

C. , P. Et, G. , and A. , Execution of distributed reactive systems, Proceedings of European Conference on Parallel Processing, pp.13-26, 1995.

[. Caspi, LUSTRE : A declarative language for programming synchronous systems, Proceedings of the 14th Annual ACM Symposium on Principles of Programming Languages (POPL), vol.178, 1987.
DOI : 10.1145/41625.41641

C. and A. , Ur/Web : A simple model for programming the web, Proceedings of the 42nd Annual ACM Symposium on Principles of Programming Languages (POPL), vol.50, pp.153-165, 2015.

C. , A. Naumann, and D. A. , Inlined Information Flow Monitoring for JavaScript, Proceedings of the 22Nd ACM SIGSAC Conference on Computer and Communications Security (CCS), pp.629-643, 2015.

[. Colaço, A conservative extension of synchronous data-flow with state machines, Proceedings of the 5th ACM international conference on Embedded Software (EMSOFT), pp.173-182, 2005.

[. Cooper, The essence of form abstraction, Proceedings of Asian Symposium on Programming Languages and Systems (APLAS), pp.205-220, 2008.

C. Krishnamurthi, G. H. Cooper, K. Et, and S. , FrTime : Functional reactive programming in PLT Scheme, 2004.

C. ;. Czaplicki, E. Czaplicki, C. Et, and S. , Asynchronous functional reactive programming for GUIs, Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), pp.411-422, 2013.
DOI : 10.1145/2499370.2462161

URL : https://dash.harvard.edu/bitstream/1/12872183/1/74651384.pdf

;. Dahl and R. Dahl, , 2009.

D. and S. , Scala.js : Type-directed interoperability with dynamically typed languages, 2013.

, ECMAScript language specification, 2015.

E. and S. A. , Compiling Esterel into Sequential Code, Proceedings of the Seventh International Workshop on Hardware/Software Codesign (CODES), pp.147-151, 1999.

[. El-sibaïe, ;. Chailloux, R. El-sibaïe, C. Et, and E. , Synchronousreactive web programming, Proceedings of Workshop on Reactive and EventBased Languages and Systems (REBELS), pp.9-16, 2016.

R. El-sibaïe, Programmation Web Réactive dans un cadre typé statiquement pour l'orchestration de contenus multimédia riches, 2018.

. Elliott, . Hudak, C. Elliott, and P. Hudak, Functional Reactive Animation, Proceedings of International Conference on Functional Programming (ICFP), pp.263-273, 1997.
DOI : 10.1145/258948.258973

, React Native, 2015.

. Friedman, . Wise, D. P. Friedman, and D. S. Wise, Aspects of applicative programming for file systems (preliminary version), SIGSOFT Softw. Eng. Notes, vol.2, issue.2, pp.41-55, 1977.

[. Ha, , 2009.

, A Concurrent Trace-based Just-In-Time Compiler for Single-threaded JavaScript, Proceedings of the Workshop on Parallel Execution of Sequential Programs on Multicore Architectures (PESPMA), pp.47-54

[. Hanxleden, Sequentially Constructive Concurrency-A conservative extension of the synchronous model of computation, ACM Transactions on Embedded Computing Systems (TECS), vol.13, issue.4s, p.144, 2014.

;. Harel and D. Harel, Statecharts : A visual formalism for complex systems, Science of computer programming, vol.8, issue.3, pp.231-274, 1987.

H. , D. Et, P. , and A. , On the Development of Reactive Systems, Logics and Models of Concurrent Systems, pp.477-498, 1985.

[. Hewitt, A Universal Modular ACTOR Formalism for Artificial Intelligence, Proceedings of the 3rd International Joint Conference on Artificial Intelligence (IJCAI), pp.235-245, 1973.

[. Jeffrey, ;. Van-cutsem, A. Jeffrey, and T. Van-cutsem, Functional Reactive Programming with nothing but Promises (Implementing Push/Pull FRP using JavaScript Promises), Proceedings of Workshop on Reactive and Eventbased Languages & Systems (REBELS), 2015.

[. Kambona, An evaluation of reactive programming and promises for structuring collaborative web applications, Proceedings of the 7th Workshop on Dynamic Languages and Applications (Dyla), p.3, 2013.

R. ;. Kernighan, B. W. Kernighan, R. , and D. M. , The C Programming Language, 1978.

. Kiczales, Aspect-Oriented Programming, Proceedings of European Conference on Object-Oriented Programming (ECOOP), pp.220-242, 1997.

[. Kitchin, Programming real-time applications with SIGNAL, Proceedings of Formal Techniques for Distributed Systems, Joint 11th IFIP WG 6.1 International Conference FMOODS 2009 and 29th IFIP WG 6.1 International Conference FORTE 2009 on Formal Techniques for Distributed Systems, vol.79, pp.1321-1336, 1991.

F. ;. Lenz, J. Lenz, F. Et, and N. , Source Map, 2011.

. Mandel, . Pouzet, L. Mandel, P. Et, and M. , ReactiveML : un langage fonctionnel pour la programmation réactive, Technique et Science Informatiques (TSI), 2008.

[. Melnikov, ;. Fette, A. Melnikov, F. Et, and I. , The WebSocket Protocol, 2011.

[. Meyerovich, Flapjax : a programming language for Ajax applications, Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications (OOPSLA), vol.44, pp.1-20, 2009.

, C# Asynchronous Programming, 2012.

. Mikkonen, . Taivalsaari, T. Mikkonen, T. Et, and A. , Web applications : Spaghetti code for the 21st century, Proceedings of the 6th International Conference on Software Engineering-Research, Management & Applications (SERA), 2008.

[. Milicevic, Model-based, event-driven programming paradigm for interactive web applications, Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software (Onward !), pp.17-36, 2011.

. Mozilla, Webassembly, 2015.

[. Myter, Many spiders make a better web : A unified web-based actor framework, Proceedings of the 6th International Workshop on Programming Based on Actors, Agents, and Decentralized Control, pp.51-60, 2016.

O. and T. , , 2003.

. Paris, Projet SYNCHRONE : les formats communs des langages synchrones, Proceedings of the 2016 ACM SIGPLAN International Conference on Generative Programming : Concepts and Experiences (GPCE), pp.59-69, 1993.
URL : https://hal.archives-ouvertes.fr/inria-00071316

P. and A. , Applications of temporal logic to the specification and verification of reactive systems : a survey of current trends, Current trends in Concurrency, pp.510-584, 1986.

[. Podwysocki, , 2013.

. Potop-butucaru, Compiling Esterel, 2007.

P. and V. , , 2006.

[. Rastogi, Safe & Efficient Gradual Typing for TypeScript, Proceedings of the 42nd Annual ACM Symposium on Principles of Programming Languages (POPL), pp.167-180, 2015.

[. Rathlev, SCEst : Sequentially Constructive Esterel, Proceedings of Formal Methods and Models for Codesign (MEMOCODE), pp.10-19, 2006.

. Reynders, A GALS Approach for Programming Distributed Interactive Multimedia Applications, Proceedings of the 2014 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software (Onward !), pp.55-68, 2014.

[. Sentovich, SIS : A System for Sequential Circuit Synthesis. Rapport technique UCB/ERL M92/41, Berkeley, Proceedings of the First Dynamic Languages Symposium (DLS), 1992.

M. Serrano, P. Et, and V. , A glimpse of Hopjs, Proceedings of International Conference on Functional Programming (ICFP), pp.180-192, 2016.
URL : https://hal.archives-ouvertes.fr/hal-01350936

[. Syme, The F# Asynchronous Programming Model, International Symposium on Practical Aspects of Declarative Languages (PADL), pp.175-189, 2011.

T. and O. , De la sémantique opérationnelle à la spécification formelle de compilateurs : l'exemple des boucles en Esterel, École nationale supérieure des mines, 2004.

. Tilkov, . Vinoski, S. Tilkov, and S. Vinoski, Node.js : Using javascript to build high-performance network programs, IEEE Internet Computing, vol.14, issue.6, pp.80-83, 2010.

[. Van-cutsem, ;. Miller, T. Van-cutsem, and M. S. Miller, Proxies : design principles for robust object-oriented intercession APIs, Proceedings of the 6th Symposium on Dynamic Languages (DLS), pp.59-72, 2010.

. Vonder, Enriching the Internet By Acting and Reacting, Proceedings of Companion to the first International Conference on the Art, 2017.

J. Vouillon, B. Et, and V. , From bytecode to JavaScript : the Js_of_ocaml compiler. Software : Practice and Experience, vol.44, pp.951-972, 2014.
URL : https://hal.archives-ouvertes.fr/hal-00826786

, Document Object Model (DOM) Level 3 Core Specification, p.3, 2004.

, Usage of JavaScript for websites, p.3, 2009.

[. Weil, Efficient compilation of Esterel for real-time embedded systems, Proceedings of International Conference on Compilers, Architecture, and Synthesis for Embedded Systems (CASES), pp.2-8, 2000.

[. Welc, Generic Workers : Towards Unified Distributed and Parallel JavaScript Programming Model, Proceedings of Programming Support Innovations for Emerging Distributed Applications, 2010.

Z. and A. , Emscripten : An LLVM-to-JavaScript Compiler, Proceedings of the ACM International Conference Companion on Object Oriented Programming Systems Languages and Applications (OOPSLA), pp.301-312, 2011.