Skip to content

Instantly share code, notes, and snippets.

@tikidunpon
Last active April 20, 2019 01:30
Show Gist options
  • Save tikidunpon/1d5331ea9f64ccc50b0614ae6baec75c to your computer and use it in GitHub Desktop.
Save tikidunpon/1d5331ea9f64ccc50b0614ae6baec75c to your computer and use it in GitHub Desktop.
わいわいswiftc10メモ

https://iosdiscord.connpass.com/event/123573/

LT1:「StringLiteralExprSyntax vs StringInterpolationExprSyntax」 @kitasuke

LT2:「direct parser or google/swift-format」 @inamiy

  • 発表資料
  • 5.1でないとつかえないDirect Parser
  • Swift 4.2-5.0: SwiftcRunner
  • SyntaxTreeParserがある
  • swiftcを叩いている無駄がある
  • 出力がjsonでパースが無駄
  • c++ ast -> json -> swift astが無駄
  • Swift 5.0-dev: SwiftLang
    • SourceKit(XPC)+ByteTree
    • import SwiftLang
    • static func parseをSourceKitを呼んでいる
    • jsonからbytetreeで高速化
    • 3倍早くなった
    • お蔵入りになると予想
  • Speeding up SwiftSyntax by using the parser directly
    • swiftに直接cのポインタを渡してブリッジ可能にする
  • Swift 5.1 ?:libSwiftSyntaxParser
    • import _InternalSwiftSyntaxParser
    • SyntaxParse.parseRaw -> RawSyntax
    • stringでできる
    • 中ではcの関数を使っている
    • パーサーを作ってdisposeしている
    • 21368のプルリク
    • astのノードを作ってパースする
    • 普通一気にやるが、どの言語でもいけるように
    • SyntaxParseActionsはバーチャル
    • CLibParseActionsが実際のブリッジ部分を実装
    • はやくなるのでASTExprolerも早くなるのでは?
    • ASTExprolerはjsのツリーを作っていくのに時間がかかっている

LT3:「SwiftSyntax のビルドの流れと仕組みをわいわい紐解く」@orga_chem

  • 発表資料はなしのスタイル、Swift wednesdayと同じ空気感でやる
  • SwiftSyntaxにコントリビュートしたいよね
  • まずどうやってビルドするんだからはじまった
  • Cメイクなどみてハマっていた
  • windowsサポートがはいったときにサポートを忘れた人がいる
  • build-scriptを使わないといけないよね
  • rintaroさんの記事を読んだらできた
  • IDEでひらけないのは辛い
  • vimで編集とビルドしていて不毛だった
  • ビルドするためのマジック
  • SwiftSyntaxのパーサーがCのライブラリに変わった
  • swift package gene
  • swift package generate-xcodeproj
  • ヘッダーサーチパスに値を投げるためにxcconfig-overrideを使う
  • appCodeでやれるようになった
  • gybはSwiftを自動生成するためのファイル
  • https://gist.github.com/Kuniwak/9d461d8e0c7c055e488f574ecbda7ba0
  • dumpはmirror apiで引いた情報を出している
  • CustomReflectableのcustomMirrorを実装すればdumpを騙せる
  • XXSyntaxは構文木
  • CodeBlockSyntaxは行がいっぱい入る
  • SYNTAX_NODEはどこから来たのか、gyb_syntax_supportの__init__.pyに入ってる
  • nodeの性質をみたいときはpythonファイルを見に行く必要がある
  • triviaは空白やコメントなどの些細なもの
  • garbageTextはUTF8BOMやNULL文字が入る
  • SwiftSyntaxはASTを作るまで。SILは作れない。似たようなパーサを使ってはいる
  • SwiftSyntaxはコンパイラでは使われていない
  • libSyntaxはコンパイラの一部
  • SwiftでSwiftのフォーマッタを作る場合のバインディング
  • SwiftSyntaxPlayground
  • build/checkout配下にシンボリックリンクを貼ってしまうと楽
  • dumpの結果が見づらかったので綺麗にするコントリビュートした
  • libParseをいじるとビルドの時間がかかる、ヘッダをいじらなければ大丈夫
  • cmakeがどうしても必要だが非常にややこしい
  • スペースの情報がなくなるのは抽象構文木
  • SwiftSyntaxは具象構文木なので抽象ではない

LT4: 「Road to Ragnarok」 @bannzai

  • 発表資料
  • apple/swiftにPRがマージされた
  • SwiftSyntaxが昨年公開された
  • Swiftで書かれている
  • libSyntaxはSwift Syntax and Structured Editing Libraryを読むとわかる
  • Swift formatのインフラとして提供予定らしい
  • READMEを見てわからなかったこと
    • 構文解析と意味解析がlibASTに含まれていることが問題視されている
    • 普遍性のある構造体で再現する?
  • 改行している人生
    • 横幅あるんだから1行でいこう kishikawasan
  • すべてを破壊するコミットはragnarok
  • makeElipsisTokenというのが存在しなかった
    • チケットを切った
  • SyntaxRewriter
    • syntaxを書き換える時はSyntaxRewriterを継承します
    • たくさんのvisit関数がteigiされている 200個超え
    • nodeの内容を書き換えて新しいnodeを返す
    • visitの実装
    • SyntaxFactory
  • rintaroさん
    • もういっこやって
  • FunctionParameterSyntax.ellipsis
  • isEllipsisがfalseの時の不具合を直したかったのにこの変更で治る理由がわからない
  • https://github.com/apple/swift/blob/master/lib/Parse/ParsePattern.cpp#L379
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment