Swiftをbuildした話

千里の道も一歩から(どこへ向かってるのか?)

Swift1を使う人は多いけど、日常的にSwift(as プログラミング言語)をbuildしている人はおそらく500人以下 (2017/1現在)。

ということなので、とりあえず、ビルドしてみれば何かがわかるかもしれないということでビルドしてみました。

用意

  • Mac OS X Sierra and Xcode 8
  • Python2.x(SystemのものでOK). Python3.xは動かないので注意

あと、

brew install cmake ninja

あとはREADMEに沿って、ビルドして行く。

作業

READMEに書いてあるんですが、まずはroot directoryを作りましょう。

$ mkdir swift-resources

みたいな感じです。この中に大量のリソースがcheckoutされます。

全部うまく行くとこんな感じになるはず

swift-resources
	├── build
	├── clang
	├── cmark
	├── compiler-rt
	├── llbuild
	├── lldb
	├── llvm
	├── swift
	├── swift-corelibs-foundation
	├── swift-corelibs-libdispatch
	├── swift-corelibs-xctest
	├── swift-integration-tests
	├── swift-xcode-playground-support
	└── swiftpm

最終的に自分が実行したコマンドは

$ cd swift
$ utils/build-script -r

です。-rはdebuginfo付きのリリースビルドという意味らしいです。

ビルドすると、上記のようにbuildというディレクトリがswift-resourcesの中に作られます。
もしも、ビルドに失敗した、buildディレクトリを削除してから再コンパイルしましょう。
buildの中にはキャッシュファイルなどがあるので、何回も同じエラーが出てしまうことがあります。

コマンド実行後はじっくり待ちましょう。Machineが貧弱な場合、最悪1時間くらいかかります。2

いよいよ、自前のswiftが完成します。場所はbuild/Ninja-RelWithDebInfoAssert/swift-macosx-x86_64/binというところにあります。

build/Ninja-RelWithDebInfoAssert/swift-macosx-x86_64/bin
	├── Benchmark_DTrace
	├── Benchmark_Driver
	├── Benchmark_GuardMalloc
	├── Benchmark_O
	├── Benchmark_Onone
	├── Benchmark_Ounchecked
	├── Benchmark_RuntimeLeaksRunner
	├── complete-test
	├── lldb-moduleimport-test
	├── sil-func-extractor
	├── sil-nm
	├── sil-opt
	├── sil-passpipeline-dumper
	├── sourcekitd-repl
	├── sourcekitd-test
	├── swift
	├── swift-api-digester
	├── swift-api-dump.py -> path-to/swift-resource/swift/utils/swift-api-dump.py
	├── swift-autolink-extract -> swift
	├── swift-demangle
	├── swift-format -> swift
	├── swift-ide-test
	├── swift-llvm-opt
	├── swift-reflection-dump
	├── swift-reflection-test-macosx-x86_64
	├── swift-remoteast-test
	└── swiftc -> swift

ここにswiftがあるというわけです。
作業的には、ビルドに時間がかかるという以外に特に難しいところはありません。

感想

ビルド時間が長すぎるので、開発するには何らかの自動ビルドは必須だと思われます。リモートでは、swift-ciというのが動いてるっぽい。
次はproject fileをxcodeで開いてみるかな。

[Feedback] Swift3.1 Release Process

My Feedback to Swift 3.1 Release Process.

Agile

Swift 3.1 release process looks agile.

Development team will release snapshots every small milestone.
All chages are merged into master branch and snapshots are dispatched from swift-3.1-branch, and GM will be on it. I prefer having release branch.

Apple adopted agile development in swift project. It’s cool!

Source Compatibility

Many people would have complained about compatibility between versions.
Upgrading 2 to 3 is painful, even though swfit 3 api design is beautiful.
In 3.1, source compatibility is featured in this blog post.

swift3 cod is going to be compilied swift3.1 compilier.
It is natural. This is just minor update.

Directed by managers

It looks like that Managers have strong authorities for release.
Pull requests are checked or evaluated by them.

[3行] Server APIs Work Group

My Feedback to Server APIs Work Group

Swift Blog まとめ

10月25日のブログより。

  • Server APIs work groupをサーバーアプリを作りたいコミュニティのために作った。
  • Swiftだけで簡単にlow levelのサーバー機能を実装するフレームワークを提供する。
  • 詳しくはこちら. https://swift.org/server-apis/

以上。

言及されているWeb Application Frameworkたち

最近の休日の過ごし方

気になってる人も多いと思う(棒)ので、コーディングしてみるとこうなります。

let 寝る =
[
Amazon prime videoを見る,
Youtubeを見る,
Amazon/楽天/ヨドバシでなんか買う,
Spotifyで音楽聴く
]

print(寝る) #=> $$$

寝るにもお金かかるね。

以上。