Scheme to JavaScript compilation

par Florian Loitsch

Thèse de doctorat en Informatique

Sous la direction de Manuel Serrano.

  • Titre traduit

    Une compilation de Scheme vers JavaScript


  • Résumé

    This thesis presents a Scheme to JavaScript compiler. Scheme and JavaScript are similar in many respects but differ in some major points. In the context of a Scheme to JavaScript compilation JavaScript's lack of proper tail recursion and continuations is especially noticeable. In this work we first show that without these two features our compiler produces efficient code that rivals with handwritten JavaScript code. However, this reduced input language is not compliant to the Scheme specification but represents a pragmatical sub-language. In this configuration {\sc{Scm2Js}} has been successfully used on a daily basis within our team. Even though not enabled by default, provides proper tail recursion and continuations too. We present a trampoline based technique for proper tail recursion that has the distinct advantage of efficiently integrating with existing JavaScript code. Our continuations implementation is an improvement over existing exception based continuations. We have adapted previous techniques that were designed for one-shot continuations (designed for check-pointing and migration). In order to capture the essence of our continuation algorithm we have developed, a canonic version of our implementation. Without dependencies on non-standard Scheme features, like exceptions, we advertise as an alternative to CPS. We have proved the correctness of on a simplified version of Scheme.


  • Résumé

    Cette thèse présente un compilateur de Scheme vers JavaScript. Bien que très proches, ces deux langages diffèrent dans des points majeurs. En particulier, les continuations et la récursivité terminale, qui n'existent que dans Scheme, sont importantes dans le contexte d'une telle compilation. Dans ces travaux nous montrons que, sans ces deux fonctionnalités, produit du code aussi efficace que du code écrit à la main. Cependant, ce langage réduit n'est pas conforme à R5RS, la spécification de Scheme, mais représente un sous-langage pragmatique. Dans cette configuration est utilisé quotidiennement dans notre projet. Bien que désactivé par défaut, permet aussi la récursivité terminale et les continuations. Nous présentons dans cette thèse une implémentation de la récursivité terminale qui se base sur la technique des trampolines. Elle a la propriété intéressante de faciliter la coexistence d'un code généré et d'un code JavaScript existant. Notre implémentation des continuations est une amélioration des continuation à base d'exceptions. Nous avons adapté des techniques développées pour des continuations 'one-shot' (utilisées par exemple pour la migration). Pour capturer l'essence de notre algorithme de compilation des continuations nous avons développé, une version canonique de notre implémentation. Indépendant des fonctionnalités non-standard de Scheme, comme les exceptions, nous proposons comme alternative à CPS. Pour une version simplifiée de Scheme nous avons prouvé que est correct.

Consulter en bibliothèque

La version de soutenance existe sous forme papier

Informations

  • Détails : 1 vol. (171 p.)
  • Annexes : Bibliogr. 165-[170]

Où se trouve cette thèse ?

  • Bibliothèque : Université Nice Sophia Antipolis. Service commun de la documentation. Bibliothèque Sciences.
  • Non disponible pour le PEB
  • Cote : 09NICE4066
Voir dans le Sudoc, catalogue collectif des bibliothèques de l'enseignement supérieur et de la recherche.