$30 off During Our Annual Pro Sale. View Details »

Swift Macro に備えて構文木を 10min で学ぶ / Learn Syntax Tree for Swift Macro in 10 minutes

Swift Macro に備えて構文木を 10min で学ぶ / Learn Syntax Tree for Swift Macro in 10 minutes

来るべき Swift Macro に備えて Swift の構文木について学びましょう。この発表の前半では Swift Macro を定義する際に理解が必要な「構文木」とは何かを初心者向けに説明します。
https://dena.connpass.com/event/291447/

Kuniwak
PRO

August 24, 2023
Tweet

More Decks by Kuniwak

Other Decks in Programming

Transcript

  1. 4XJGU.BDSPʹඋ͑ͯ

    ߏจ໦ΛNJOͰֶͿ
    Kuniwak - DeNA Co.,Ltd. 2023.08.24 SwiftWednesday

    View Slide

  2. "CPVUNF

    View Slide

  3. ,VOJXBL
    w ॴଐˠ
    w 4XJGU4ZOTUBYʹ

    DPOUSJCVUFͨ͜͠ͱ͋Δ
    w ࠷ۙJ04ΞϓϦॻ͍ͯͳ͍
    w "QQ$PEF͸͍͍ͧʢྦʣ
    3

    View Slide

  4. ෼ؒͰ఻͍͑ͨ͜ͱ

    View Slide

  5. ߏจ໦ͱ͸ίʔυΛѻ͍΍͍͢

    σʔλ΁ม׵ͨ͠΋ͷͰ͋Δ
    ߏจ໦͸ා͘ͳ͍ՄѪ͍Α
    5

    View Slide

  6. 4XJGU.BDSPͱ͸

    View Slide

  7. 4XJGUʹ.BDSP͕΍͖ͬͯͨ
    4XJGU͔Β࢖͑Δ
    7

    View Slide

  8. 8
    ࢖͑Δ.BDSP͸࣍ͷͭɿ
    w 'SFFTUBOEJOH.BDSP
    w "UUBDIFE.BDSP

    View Slide

  9. 9
    @OptionSet


    struct Permissions {


    private enum Perm: Int {


    case read


    case write


    case execute

    }


    }
    struct Permissions {


    private enum Perm: Int {


    case read


    case write


    case execute

    }


    static let read: Self =

    Self(rawValue: 1 << Perm.rea

    static let write: Self =

    Self(rawValue: 1 << Perm.wri

    static let execute: Self =

    Self(rawValue: 1 << Perm.exe


    }
    "UUBDIFE.BDSPͷྫ
    Attached macro
    ల։

    View Slide

  10. ͍ͣΕʹ΋ڞ௨͢Δͷ͸ߏจ໦͔Β

    ߏจ໦΁ͷม׵Ͱ͋Δͱ͍͏͜ͱ
    10
    ʁ ʁ
    ߏจ໦ ߏจ໦
    ϚΫϩల։

    View Slide

  11. ߏจ໦͕Կ͔Λ஌Βͳ͍ͱ࡞Εͳ͍
    11
    ʁ ʁ
    ߏจ໦ ߏจ໦
    ϚΫϩల։

    View Slide

  12. ߏจ໦ͱ͸Կ͔

    View Slide

  13. if let self = self {}
    13
    આ໌ʹ࢖͏αϯϓϧίʔυ

    View Slide

  14. if let self = self {}
    JGจ
    14
    ͜Ε͸ʮJGจʯͱݺ͹ΕΔ

    View Slide

  15. if let self = self {}
    if let self = self {}
    JGจ
    ෳจ
    ৚݅
    15
    JGจ͸ʮ৚݅ʯͱʮෳจʯͰ

    ߏ੒͞Ε͍ͯΔ

    View Slide

  16. if let self = self {}
    if let self = self {}
    JGจ
    ෳจ
    0QUJPOଋറ৚݅
    16
    ࠓճͷ৚݅෦෼ʹ͸ɺ

    ʮ0QUJPOଋറ৚݅ʯͱ

    ݺ͹Ε͍ͯΔ΋ͷ͕ೖΔ

    View Slide

  17. if let self = self {}
    if let self = self {}
    JGจ
    ෳจ
    0QUJPOଋറ৚݅
    ม਺ࣜ
    ม਺ύλʔϯ
    if let self = self {}
    17
    0QUJPOଋറ৚݅͸ɺ୅ೖઌͷ

    ʮม਺ύλʔϯʯͱ୅ೖ͢Δ஋ͷ

    ʮม਺ࣜʯͰߏ੒͞Ε͍ͯΔ

    View Slide

  18. if let self = self {}
    if let self = self {}
    if let self = self {}
    18
    ͜ͷΑ͏ʹɺίʔυΛ෼ղͯ͠

    ߏ੒ཁૉΛḷ͍ͬͯ͘ͱɺ

    ίʔυΛʮ໦ߏ଄ʯͱͯ͠

    ѻ͍ͬͯΔ͜ͱʹؾͮ͘

    View Slide

  19. 19
    ෳจ
    JGจ
    ෳจ
    ม਺ύλʔϯ ม਺ࣜ
    0QUJPOଋറ৚݅
    if let self = self {}
    if let self = self {}
    if let self = self {}

    View Slide

  20. 20
    ෳจ
    JGจ
    ෳจ
    ม਺ύλʔϯ ม਺ࣜ
    0QUJPOଋറ৚݅
    ͜ΕΛʮߏจ໦ʯͱΑͿ
    if let self = self {}
    if let self = self {}
    if let self = self {}

    View Slide

  21. 4XJGU.BDSPͷதͰ
    ߏจ໦͕Ͳ͏ಇ͔͘

    View Slide

  22. 22
    TUSVDUએݴ
    1FSNJTTJPOT
    FOVNએݴ
    1FSN
    $BTFએݴ $BTFએݴ $BTFએݴ
    SFBE XSJUF FYFDVUF
    ղੳ
    @OptionSet


    struct Permissions {


    private enum Perm: Int {


    case read


    case write


    case execute

    }


    }

    View Slide

  23. 23
    TUSVDUએݴ
    1FSNJTTJPOT
    FOVNએݴ
    1FSN
    $BTFએݴ $BTFએݴ $BTFએݴ
    SFBE XSJUF FYFDVUF
    TUSVDUએݴ
    1FSNJTTJPOT
    FOVNએݴ
    1FSN
    $BTFએݴ $BTFએݴ $BTFએݴ
    SFBE XSJUF FYFDVUF
    ม਺એݴ
    ॳظԽઅ
    SFBE

    ม਺એݴ
    ॳظԽઅ
    XSJU

    ม਺એݴ
    ॳظԽઅ
    FYFD

    ௥Ճ
    มܗ

    View Slide

  24. struct Permissions {


    private enum Perm: Int {


    case read


    case write


    case execute

    }


    static let read: Self =

    Self(rawValue: 1 << Perm.rea

    static let write: Self =

    Self(rawValue: 1 << Perm.wri

    static let execute: Self =

    Self(rawValue: 1 << Perm.exe


    }
    24
    TUSVDUએݴ
    1FSNJTTJPOT
    FOVNએݴ
    1FSN
    $BTFએݴ $BTFએݴ $BTFએݴ
    SFBE XSJUF FYFDVUF
    ม਺એݴ
    ॳظԽઅ
    SFBE

    ม਺એݴ
    ॳظԽઅ
    XSJU

    ม਺એݴ
    ॳظԽઅ
    FYFD

    ௥Ճ
    ௥Ճ
    ίʔυ
    ͱͯ͠

    ݟΔͱ
    มܗ

    View Slide

  25. ߏจ໦ΛͲ͏΍ͬͯ

    ֬ೝͰ͖Δ͔

    View Slide

  26. 4XJGU"45&YQMPSFSΛ࢖͏ͷָ͕
    26

    View Slide

  27. 27
    https://swift-ast-explorer.com/

    View Slide

  28. ߏจ໦͸Կʹ࢖͑Δͷ͔

    View Slide

  29. ߏจ໦͸.BDSPҎ֎ʹ΋

    ͞·͟·ͳ͜ͱʹར༻Ͱ͖Δ
    29

    View Slide

  30. w ੩తղੳʢ-JOUʣ
    w ϑΥʔϚολ
    w ίʔυੜ੒
    w FUD
    30

    View Slide

  31. ͜ͷઈ޷ͷػձʹߏจ໦Λ

    ֮͑ͯ͠·͍·͠ΐ͏
    31

    View Slide

  32. 4XJGUͷߏจ໦Λ஌ͬͯ

    .BDSP͚ͩͰͳ͘

    ৭ʑͳ͜ͱʹ׆༻͠Α͏
    ·ͱΊ
    32

    View Slide