Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Conception de langage: communiquer avec la machine

Conception de langage: communiquer avec la machine

parser, tranformer, transpiler, compiler ou encore analyser sont les fers de lance pour construire un compilateur. Mais qu'est-ce qu'un compilateur ? Grosso modo ce n'est rien d'autre qu'un traducteur.

Longtemps laissé pour compte dans le paysage front le compilateur fait son retour dans l'écosystème des frameworks modernes. Par exemple, la stack de l'excellent framework Svelte est basée sur un compilateur. L'idée de ce talk est de voir ensemble les différents modules qui composent la stack d'un compilateur. Pour ensuite pouvoir être capable de créer le notre en Rust from scratch avec zéro dépendances (pas de Bison, pas de Flex). En soi, le langage d'implémentation n'est pas important. Ce qui nous importe, c'est la sémantique et être capable de traduire un langage donné vers un langage cible. Pour notre cas, nous traduirons un langage A vers l'assemblage web (WebAssembly).

Ainsi, notre compilateur produira un programme sûr et optimisé pour le web. Si tu es intéressé par le turfu, ou plutôt curieux de comprendre le fonctionnement des frameworks modernes à l'instar de Svelte. Ce talk éclairera tes zones d'ombres et te donnera le bagage technique pour te permettre de créer ton propre compilateur avec le langage de ton choix.

Avatar for monsieurbadia

monsieurbadia

September 12, 2021

More Decks by monsieurbadia

Other Decks in Programming

Transcript

  1. Grammar Notation BNF (Backus-Naur form) EBNF (Ext. Backus-Naur form) <if>

    ::= if <condition> “{“ <instructions> “}”
  2. Grammar Notation BNF (Backus-Naur form) EBNF (Ext. Backus-Naur form) if

    = if condition { instructions } <if> ::= if <condition> “{“ <instructions> “}”
  3. Grammar Notation BNF (Backus-Naur form) EBNF (Ext. Backus-Naur form) if

    true { return 0; } <if> ::= if <condition> “{“ <instructions> “}” if : if condition “{“ instructions “}”
  4. Grammar Notation BNF (Backus-Naur form) EBNF (Ext. Backus-Naur form) <if>

    ::= if <condition> “{“ <instructions> “}” if : if condition “{“ instructions “}” if true { return 0; }
  5. <script> fun main := () { 
 $print(“hello, world!”) 


    } < / script> <style> h1 { 
 color: red; } 
 < / style> <h1>hello, world! </ h1>
  6. <script> fun main := () { 
 $print(“hello, world!”) 


    } < / script> <style> h1 { 
 color: red; } 
 < / style> <h1>hello, world! </ h1>
  7. <script> fun main := () { 
 $print(“hello, world!”) 


    } < / script> <style> h1 { 
 color: red; } 
 < / style> <h1>hello, world! </ h1>
  8. Tokenizer [ 
 Token { kind: TokenKind, span: Span {

    lo: u32, hi: u32, }, }, … 
 ] Source Code
  9. Parser [ 
 Token { kind: TokenKind, span: Span {

    lo: u32, hi: u32, }, }, … 
 ] Pkg { module: Mod { Items: [ Item {…} … ] }
  10. Parser [ 
 Token { kind: TokenKind, span: Span {

    lo: u32, hi: u32, }, }, … 
 ] Pkg { module: Mod { Items: [ Item {…} … ] }
  11. Analyzer Pkg { module: Mod { Items: [ Item {…}

    … ] } Pkg { module: Mod { Items: [ Item {…} … ] }
  12. <script> fun main := () { 
 $print(“hello, world!”) 


    } < / script> <style> h1 { 
 color: red; } 
 < / style> <h1>hello, world! </ h1> Hello world!
  13. AST https://astexplorer.net Cryptology https://fr.wikipedia.org/wiki/Manuscrit_de_Voynich https://fr.wikipedia.org/wiki/Kryptos_(sculpture) Compiler https://github.com/DoctorWkt/acwj https://github.com/jamiebuilds/the-super-tiny-compiler http://www.craftinginterpreters.com Framework

    https://svelte.dev https://github.com/malinajs/malinajs Grammar https://bnfplayground.pauliankline.com https://fr.wikipedia.org/wiki/Extended_Backus-Naur_Form https://fr.wikipedia.org/wiki/Forme_de_Backus-Naur Programming Languages https://fr.wikipedia.org/wiki/Liste_de_langages_de_programmation https://www.rust-lang.org/fr https://webassembly.org Side Project https://qhantoom.dev https://github.com/qhantoom/qhantoom https://github.com/qhantoom/qheops Streamers https://www.twitch.tv/j_blow https://www.twitch.tv/gamozo