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

自作JSエンジンに推しプロポーザルを実装したい!

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for Saji Saji
September 06, 2025

 自作JSエンジンに推しプロポーザルを実装したい!

Avatar for Saji

Saji

September 06, 2025
Tweet

More Decks by Saji

Other Decks in Technology

Transcript

  1. ϨΪϡϨʔγϣϯ w 3VTUͰॻ͖·͢ w 3VTUࣗମ͸·ͩॳ৺ऀͳͷͰ੿͍ίʔυͰ΋ڐͯ͠  w લड़ͷ+4ίʔυʹ͋ΔߏจҎ֎͸ղऍɾ࣮ߦͰ͖ͳͯ͘΋ྑ͍ͱ͢Δ w Τϥʔॲཧܥͱ͔΋Ұ୴ແࢹʂ🙇

    w .FTTBHF'PSNBUWͷߏจ͸Ұ୴ϓϨʔεϗϧμ 7BSJBCMF ػೳ͚࣮ͩ૷ w ຊ౰͸ม਺એݴػೳͱ͔ؔ਺ݺͼग़͠ػೳͱ͔໘ന͍Μ͚ͩͲ
  2. .FTTBHF'PSNBUWΛ1BSTFSΛ࡞Δ ˣ͜Ε͕ɺ͜͏ Ұ෦ུ "Hello {$place}!" PatternMessage { declarations: [], pattern:

    [ String("Hello "), Expression(Variable(VariableExpression {...})), String("!") ] }
  3. +43VOUJNFͷ࣮૷d1BSTFSd 1BTFS͸Ұൠతʹ-FYFSʹΑͬͯ࡞ΒΕͨ5PLFOྻΛ໦ߏ଄ "45 ʹม׵͢Δ const / name / = /

    input / . / get / ( / "name" / ) / ; ↓ { "body": [{ "type": "VariableDeclaration", "declarations": [{"type": "VariableDeclarator", "id": {...},"init": {...}}] }] }
  4. +43VOUJNFͷ࣮૷d1BSTFSd جຊతʹҎԼͷ܁Γฦ͠ w -FYFSͷOFYU Λݺͼग़࣍͠ͷUPLFOΛಘΔ w UPLFOʹΑͬͯߏจΛߟ͑Δ w ྫ,FZXPSE DPOTU

    ˠม਺એݴΆ͍ͧʂ w ͦͷߏจΛQBSTF͢Δઐ༻ϝιουΛݺͼग़͢ w ˢͰؼ͖ͬͯͨ/PEFΛ͏·͍͜ͱ਌/PEFʹ഑ஔ͢Δ w ҎԼݺͼग़ͨ͠ઌͷQBSTFϝιουͰ࠶ؼతͷ͜ͷ࡞ۀ͕ى͖Δ
  5. +43VOUJNFͷ࣮૷d3VOUJNFd ࣮ࡍͷTXJUDIͱ෼ذ match node { Node::ExpressionStatement { expression } =>

    self.eval(Some(*expression), env.clone()), Node::VariableDeclaration { id, init } => { let var_name = match &*id { Node::Identifier(name) => name.clone(), _ => panic!("Identifier Expected"), }; // ... } }
  6. *OUM.FTTBHF'PSNBUͷGPSNBUݺͼग़͠ػೳ GPSNBUϝιουͷҾ਺ΦϒδΣΫτσʔλΛQSJOUFSʹ౉͢ // Ҿ਺ObjectΛevalͯ͠औಘ let variables = match self.eval(Some(args), env.clone())

    { Some(RuntimeValue::Object(map)) => map, _ => HashMap::new(), }; // printerʹ౉͢ MF2Printer::print(&message, &variables),
  7. *OUM.FTTBHF'PSNBUͷGPSNBUݺͼग़͠ػೳ QSJOUFS͸΋ΒͬͨPCKFDUσʔλΛ7BSJBCMFʹೖΕͯॻࣜԽ for item in pattern_msg.pattern.iter() { match item {

    PatternItem::Expression(Expression::Variable(var)) => { let var_name = var.get_variable_name(); if let Some(value) = variables.get(&var_name) { result.push_str(&value.to_string()); } // ... }
  8. ·ͱΊ w ΋ͷ੍͘͢͝ݶΛ͚ͭΕ͹ҙ֎ͱ+4Τϯδϯॻ͚ͦ͏ ͡Όͳ͍ʁ  w ΋ͷ͘͢͝ݶΒΕͨߏจ/P࠷దԽFUD w ࢓༷ʹؔͯ͠΋੍ݶΛ͚ͭΕ͹ҙ֎ͱ࣮૷Ͱ͖ͳ͘΋ͳ͍ w

    GPSNBUϝιου͚ͩ.'ͰରԠ͢Δߏจ΋ͭͷΈΤϥʔܥແࢹ w +4ΤϯδϯΛ࡞ͬͯΈΔͱ͘͢͝+4ͷߏจͱ1SPQPTBMͷษڧʹͳΔ ˠࣗ෼ྲྀͷ+4ΤϯδϯΛ࡞ͬͯΈͯ༡ΜͰΈΑ͏ʂ
  9. ࢀߟ w &$."4DSJQU-BHVBHF4QFDJ fi DBUJPO w  &$."4DSJQU-BOHVBHF&YQSFTTJPO w ౔Ҫຑະ

     ʰʦ࡞ֶͬͯͿʧϒϥ΢βͷ͘͠Έʱٕज़ධ࿦ࣾ w 5$1SPQPTBMGPS*OUM.FTTBHF'PSNBU w NFTTBHFGPSNBUNFTTBHFGPSNBU(JU)VC