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

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

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