遅ればせながらSwiftに触れてみました。

触れただけですが。


まず、誰もがそうであるようにHello Worldを書いてみた。(targetはiOSではなくてOS Xです)


なぜかXcode6.0.1ではSwift for OS Xが一時省かれていた為、ADCよりXcode6.1を入手した。


意気揚々と新規プロジェクトをOS X、Command Line Toolで作成し、main.swiftファイルを開き私は打ちひしがれた。


そこにはすでにこういうコードが存在した。

import Foundation

println("Hello, World!")

私のHello World for Swiftは終了した。



暇をもてあました私は、Xcodeの中身を探り始めた。最近のXcodeは内部に「OS Xがブートできるんじゃね?」ってぐらいのファイルを詰め込んでいるため中身を見るだけで時間が過ぎていく。


そして私は見つけてしまった。 swift を。


色々はしょると

1, swiftはlldb的なswift実行環境である。
2. swiftはswiftcと名前を変えることでswiftコンパイラとして機能する。(シンボリックリンクが張ってある)


深く調べてないがswift
a, Objective-Cで書かれてる気がする
b, llvm、lldbのswift用フロントエンドのような気がしないでもない


そして、本当の宝物
3, swiftcには emit-assembly という隠しオプションがある(追記:swiftcの通常オプションでした)

深くは語らない。分かる人だけ使えばいい。



で、このオプションを使って疑問に思っていた部分を少し見てみた

let str1 = "World"
println("Hello, \(str1)!")


これがどのように実行されているのかである。
結論だけ書けば

let str1 = "World"
var str0 = "Hello, "
var str2 = "!"
var str3 = str0 + str1 + str2
println(str3)

これがコンパイラに展開された擬似コードである。(実際は少し?違う。 )


コンパイル時にprintf書式のような書式に置換されて実行時に展開されるのかと思っていたのだが少し違ったようだ。