kateinoigakukunのブログ

思考垂れ流しObserver

RubyKaigiとiOSDCでWasmの話をしてきた

09/08-10に三重で開催されたRubyKaigi、09/10-12に東京で開催されたiOSDCにどちらもスピーカーとして参加してきました。 カンファレンスはしごされた方はお疲れ様でした。 RubyKaigi Keynote 初めてのRubyKaigiでの発表で、さらにキーノートで、さらにトップ…

GoodNotesでSwiftWasmの仕事を始めた

近況アップデート 5月の初旬からGoodNotes社で働いている。 GoodNotes社はiPad向けノートアプリGoodNotesを開発しているところ。 実は、去年の10月くらいからGoodNotesの人々がSwiftWasmプロジェクトにコントリビュートしてくれていた。 詳細は控えるが、Goo…

muslでビルドするにはmusl.ccが便利

Binaryenのビルド済みwasm-optを使うとセグフォする現象に遭遇した時、ビルドを手元で再現するためにmuslを使う必要があったのでメモ。1 musl libc muslはlibcなので、コンパイラはgccのままsysrootを差し替えることで大体うまいことコンパイルできる。 この…

Rubyのコミッタになりました

実は先日 ko1さんとmameさんから推薦をいただき、Rubyのコミッタになりました。 ここ数ヶ月間、Rubyアソシエーションの開発助成プロジェクトとしてCRubyのWASIサポートを進めており、WASIのプラットフォームメンテナが必要ということで。 WASI対応の話はPubl…

TypeProf for IDEの開発をお手伝いしました at クックパッド

TL;DR 8月週3クックパッドインターン フルタイムRubyコミッタのチームでTypeProf for IDEの開発 インパクトの大きい貢献チャンスはその辺に転がってるかもしれない インターンの内容 TypeProfはクックパッドでフルタイムRubyコミッタをされている@mametterさ…

SwiftコンパイラのAuto-linkingとそれを直した話

前回のエントリでAuto-linkingについて解説しました。今回はSwiftコンパイラにおけるAuto-linkingの使われ方と、最近それを直した話をします。 kateinoigakukun.hatenablog.com 用語定義 モジュール: Swiftのimportできる単位。 .swiftmodule、.swiftinterfa…

Auto-linkingまとめ

Auto-linkingとは Auto-linkingとは、コンパイラが出力したオブジェクトファイルからリンク対象のライブラリを自動的に決定する仕組みです。 通常、ユーザはリンカのコマンドライン引数に -lm のようにリンクするライブラリを指定しますが、Auto-linkingをサ…

ISUCON11予選でSwift移植チャレンジした

TR;DR ISUCON11予選にSwiftで参加した SwiftのConcurrency機能(async/await等 )の体験最高 素振りが足りず地区予選敗退 チーム情報 メンバー @freddi @giginet @kateinoigakukun 全員iOSアプリ開発人材 共通してそれなりに書ける言語がSwift 移植の覚悟 IS…

2020年のオープンソース活動

2020年はOSS開発に多く時間を使ってきたなぁと思ったのと、GitHub Sponsorsからの振り込みがあったので、報告を兼ねて軽く今年何をしてきたか振り返ってみようと思います。 SwiftWasm 年間を通してずっと開発していたプロジェクトの一つです。このプロジェク…

Swiftに搭載予定のC++相互運用機能

Swift Advent Calendar 2020 の1日目の記事です。 今年の頭頃からGoogleのSwift for Tensorflowチームが主体となって、SwiftとC++の相互運用機能の議論と実装が進んでいます。 まだ未実装な部分も多く今すぐに試せるわけではありませんが、マニフェストの内…

iOSDC 2020に参加/登壇 しました

kateinoigakukunです。4回目のiOSDCに参加しました。3年連続スピーカーとして参加です。 発表内容 プロポーザル fortee.jp スライド デモ Our co-maintainer @kateinoigakukun developed an amazing demo that allows you to experiment with SwiftWasm and …

IndexStoreを使ってSwiftコードを静的解析する

Swiftで静的解析ツールを作るとなると、基本的にSwiftSyntaxを使うことが多いと思います。 ただ、SwiftSyntaxで得られる情報はコンパイラ内部のパイプラインの序盤で生成されるため、「ある変数がどこから参照されているか」といった意味解析後に解る情報は…

WebAssembly向けのデバッガを開発しました

こんにちは。私はSwift言語のWebAssembly向けコンパイルをサポートするプロジェクトを進めている一人です。 その開発を効率的に進めていくためにWebAssembly向けのデバッガwasminspectを開発しました。 Swift for WebAssemblyの進捗 この間フォーラムに詳し…

XcodeGenとCocoaPodsをいい感じに使う

背景 XcodeGenはXcodeのプロジェクトファイルをYAMLから生成するためのツールです。生のプロジェクトファイルは記述が冗長であったり、とても人間が手で管理できるものではないため、YAMLで管理しようというのがモチベーションです。 github.com iOS/macOSア…

Effective Techniques in Swift Runtime Library

en Swift言語のランタイムライブラリで使われているテクニックについて解説します。 ランタイムライブラリと実行可能ファイル Swiftを実行するためにはswiftCoreというランタイムライブラリが必要です。意識することはあまりありませんが、静的もしくは動的…

19になりました。

こんにちは。 例年のごとく今年もやってきた誕生日ですが、今年は気がつくと謎のアドベントカレンダーにjoinしてました。 誕生日を迎えました(9/16追記)|noppe*|note 誕生日アドベントカレンダー、次回は家庭の医学くんです。(ノンアポ) ということで…

Inside SwiftUI (About @State)

SwiftUI was announced at this WWDC and we've tried it for a few days. This WWDC was the moment everything changed for me. But SwiftUI is still a private source software as well as UIKit and we need to develop applications while speculating…

Inside SwiftUI @State編

WWDCでSwiftUIが発表されてから数日が経ちました。一気に世界が変わった気がしますね。 ただ、UIKitと同様にSwiftUIはオープンソースでは無いため、我々開発者は依然挙動をエスパーしながら開発する必要があります。 その中でも、SwiftUIのチュートリアルを…

try! Swift 2019

毎年期末試験の時期と重なって参加を断念していたので初参加でした。 参加できるだけでも嬉しかったのですが、光栄なことにスピーカーとして登壇することもできました。 大きなカンファレンスでの登壇は昨年のiOSDCが最初で今回はそれ以来です。ただ、今回は…

Swift Type Metadata (en)

www.youtube.com try! Swift 2019 I'm kateinoigakukun, working at Mercari as an intern. Today, I'll talk about Metadata which is one of the most important things to understand how Swift works. Swift is well-known for being a statically-typed…

Swift Type Metadata (ja)

www.youtube.com try! Swift 2019 kateinoigakukunです。メルカリでインターンをしています。 今日はSwiftを理解するために重要なメタデータについて話します。Swiftは静的型付けな言語として知られていますが、 実はランタイムにおいては動的な部分が多々あ…

18になった

18歳になりました。1年間の振り返りと気持ちを書いておきます。 17歳 やったこととしてはこんな感じ。 iOSエンジニアのバイト 勉強会参加 カンファレンス登壇 コンパイラいじり 卒論 OSS開発 アニメ鑑賞 自分としては結構充実していたと思ってます。が、行き…

iOSDCで登壇したよ

今年はスピーカーとして参加しました。 発表内容 とりあえずスライドを貼ります。コンパイラのコード部分は口頭で喋った部分が多いので動画が公開されるのを待ってください。 スライドも貼ったのでこの記事の役割は終わりました。ここからは思ったことをつら…

iOSDC Japan 2018でコンパイラの話をします

お前は誰 Twitter @kateinoigakukun GIthub @kateinoigakukun 今はStart Today TechnologiesでiOSエンジニアの学生バイト 話します こんにちは。今週の8/31にiOSDC Japan 2018でコンパイラの話をします。 コンパイラから紐解くSwift method dispatch by 家庭…

Swift LLVM IRを読む - classの初期化

swiftc -emit-ir foo.swift で出力したLLVM IRを読んだ際のメモ class A {} let a = A() このコードからLLVM IRを出力してmain関数のみを取り出したのが以下である。 define i32 @main(i32, i8**) #0 { entry: %2 = bitcast i8** %1 to i8* %3 = call swiftc…

Enumの生成を制限する

Discordで話題に上がってたやつ。遊んでたら見つけた。 tarunon - 2018/04/26 午後4時2分 Enumを生成勝手に出来ないようにする方法って無いですよね structはinitをpublicにしなければ勝手に生成出来ないけど protocol extensionで同名のstatic funcを生やす…

├の読み方

「├ 読み方 数学」とかいうアホっぽいクエリを投げてしまった。 シークエント - Wikipedia 一番悲しくなったのは、この記号が出現した数行下にキチンと解説してあったこと。さすが型システム入門、素晴らしい入門書だ。

コンパイルが通ってほしいSwiftコード

見つけたら随時更新。バグレポ出してないやつもある Protocol extension周り protocol extensionの中でtypealiasを貼ると何かが壊れる 'T' does not have a member type named 'A'; did you mean 'A'? func foo<T: P>(a: T) -> T.A { fatalError() } struct B {} p</t:>…