型推論ハンズオン

3781f49ea2c76d6ecf0c6cda46096d49?s=47 omochimetaru
September 28, 2019

 型推論ハンズオン

3781f49ea2c76d6ecf0c6cda46096d49?s=128

omochimetaru

September 28, 2019
Tweet

Transcript

  1. ܕਪ࿦ϋϯζΦϯ @omochimetaru swiftc߹॓ 2019/09/28 1

  2. ՝୊ • ஬৯͍ঢ়ଶͷܕਪ࿦ثΛ׬੒ͤ͞·͠ΐ͏ɻ • ϦϙδτϦ: https://github.com/omochi/ SwiftTypeInferenceHandsOn • ϒϥϯνquizɻmaster͸ݟͳ͍Ͱʂ 2

  3. ஬৯͍Օॴ • ίϝϯτͰ<QXX hint="..." />ͱͳ͍ͬͯΔ ͱ͜ΖʹίʔυΛॻ͘ɻXX͸൪߸ɻ • <QͰݕࡧ͍ͯͩ͘͠͞ɻ • ൪߸ॱʹऔΓ૊Ή͜ͱΛ૝ఆ͍ͯ͠·͢ɻ

    • ௥ه͚ͩͰࡁΉΑ͏ʹͳͬͯ·͢ɻطଘ෦෼ͷ ࡟আ͸ෆཁͰ͢ɻ 3
  4. ςετίʔυ • ׬੒͢Δͱςετ͕શ෦௨ΔΑ͏ʹͳΓ·͢ɻ • ͨͩ͠ɺղ͍ͯ΋ςετ௨ա͕૿͑ͳ͍໰୊΋ ͋Γ·͢ɻ • ඞཁʹԠͯࣗ͡෼ͰςετΛ௥Ճ͠Α͏ɻ 4

  5. ܕਪ࿦ثͷ׬੒౓ • ܕ͸ద౰ɻ • ҉໧ม׵ͷਪ࿦ʹରԠɻ • ܕڧ੍(type coerce)Λ࣮૷ɻ • ղൺֱ,

    ղબ୒Λະ࣮૷ɻ 5
  6. ઃܭ 6

  7. ํ਑ • ίʔυͷσβΠϯΛ͋Δఔ౓ຊՈswiftίϯύΠ ϥʹدͤͯ͋Δɻ • ࣮૷࣌΋ಡղͱநग़Λ͠ͳ͕Β࡞ͬͨɻ • ϑΝΠϧ໊ɺܕ໊ɺؔ਺໊͕͋Δఔ౓ಉ͡ɻ 7

  8. ύοέʔδ - SwiftcBasic: ϢʔςΟϦςΟ - SwiftcType: ܕ - SwiftcAST: ύʔαʔͱAST

    - SwiftcSema: ܕਪ࿦ɺ஬৯͍͸͚ͩ͜͜ɻ - SwiftcTest: ςετ༻ͷϢʔςΟϦςΟ 8
  9. Semaৄࡉ - Constraint: ੍໿ - Conversion: ม׵ - ConstraintSystem: ੍໿Λղ͘Ϟδϡʔϧ

    - CSApply: ܕਪ࿦݁ՌʹΑΔASTͷม׵ - CSBinding: ܕม਺ͷׂ౰Ծઆͷੜ੒ - CSGen: ੍໿ͷੜ੒ - CSMatch: ܕͷϚον - CSSimplify: ੍໿ͷ؆໿ - CSSolve: ୳ࡧ - CSStep: ୳ࡧͷεςοϓ - TypeChecker: ιʔεશମΛܕνΣοΫ͢Δɻ 9
  10. TypeCheckerͱConstraintSystem • ConstraintSystem(CS)͸1ͭͷࣜΛղ͘Ϟ δϡʔϧ • TypeChecker͕ߏจʹԠͯ͡CSΛىಈ͢Δ 10

  11. ྫ: ୅ೖจ • ୅ೖจͷӈล͸ࣜͳͷͰCSͰղ͚Δɻ • ୅ೖͷ֓೦΍ࠨล͸จͷྖҬͳͷͰCSͷର৅ ֎ɻ • CSʹσϦήʔτ͕͋ΓɺTypeChecker͕୅ೖ จͷѻ͍Λ஫ೖ͢Δɻ

    (typeCheckVariableDecl) 11
  12. ศརͳϝιου - ASTNode.dump() - ConstraintSystem.dump() - (͍Ζ͍Ζͳܕ).description 12

  13. ՝୊ͷऔΓ૊Έํͷྫ • ஬৯͍෦෼ͰͲΜͳॲཧΛ͍ͯ͠Δͷ͔ղੳ͢ Δɻ • ϒϨʔΫϙΠϯτΛష͔ͬͯΒςετΛൃՐ͠ ͯɺಥೖաఔΛௐ΂Δɻ • ͦ͜ͰԿΛ͢΂͖͔ߟ͑Δɻ •

    ຊՈίϯύΠϥͷ֘౰ՕॴΛݟֶͯͿɻ 13
  14. ຊՈίϯύΠϥͷղੳ 14

  15. Ϗϧυ $ utils/update-checkout --scheme master $ utils/build-script --xcode --debug --skip-build-benchmarks

    15
  16. Xcode • build/Xcode-DebugAssert/swift-macosx- x86_64/Swift.xcodeproj • swift࣮ߦϑΝΠϧͷschemeΛ࡞Δ 16

  17. σόοΨΛ࢖͏ • schemeͷઃఆ: Debug Process As: root, Launch: Wait for

    executable to be launched • Ϗϧυͨ͠swiftʹύεΛ௨͢ • XcodeΛRun͔ͯ͠ΒλʔϛφϧͰ࣮ߦ 17
  18. swiftcͷ࣮ߦ • $ swiftc -dump-ast -Xfrontend -debug- constraints 01.swift 18

  19. Ԡ༻՝୊ • ରԠ͢ΔswiftcͷίʔυΛಡΜͰΈ·͠ΐ͏ɻ • ܕਪ࿦ثʹػೳΛ௥Ճ͠Α͏ɻ • ੒ՌΛൃද͠Α͏ɻ 19