Swift 三昧

晴。

昨日 Swift で作ったプログラムを見返す。結構直すところがある。よくわからないので、ぐぐってばかり。でも前から思っていたとおり、Swift はなかなかいい言語だ。僕はコードの見た目が気になるタイプだと思うのだけれど、Swift の見かけは結構いい。極ふつうな感じがするのが Ruby に似ている。小飼弾さんは Swift はイケメンで、イケメンは特徴がないと褒めておられたな。
 それから、インタプリタコンパイラの両方あるというのもいいですね。デバッグインタプリタの方が楽ですので。慣れればそうでもないのかな。REPL は大活躍。

Swift 4.0 を導入するのにかなりハマる。ようやく解決。Ruby は色んな言語のいいところ取りという側面もあったが、Swift も似たようなところがある。かなり複雑で奥が深い、マニアックな言語だと思えるが、ある程度勉強しただけでそこそこ書けるのも Ruby と似ているな(実際僕は Swift の本はもっていなくて、ネットの知識だけで何とか書けている)。実際、オブジェクト指向は標準的で、使いやすい。静的型付けの言語だが、型の記述は最小限度に留まるようよく練られていて低レヴェルプログラマの自分でも感心した。型はそんなに書かなくてもいいのである。それから、いまどきの言語らしく nil の扱いは厳密。Ruby に慣れているのではっきり言ってまだわずらわしいが、安全性を追求しているのがわかる。
 あとは Swift の名前空間クロージャのお勉強をしたい。Swift の関数はふつうにクロージャのようだ。第一級関数でもある。

var a = 1
func b() {print(a); a += 1}

b()    //=>1
b()    //=>2
a = 10
b()    //=>10
b()    //=>11
let c = b
c()    //=>12

クロージャですね。
 というように Swift は気に入っているのだが、Ruby と比べるといまのところ文字列処理が苦手すぎる(そのうち改善されるだろうが)。というか、Ruby は極限的に動的言語なのだよね。しかし Swift もいわゆる「モンキーパッチ」ができる。僕はこれができるのは RubyJavaScript くらいしか知らないし、「モンキーパッチ」(元々これは蔑称である)をふつうに多用する言語は Ruby くらいで、これはきらいな人も多いのだが、Swift でこれが使えるのは好きだなあ。あと、確か演算子の再定義もできた筈。いや、いいね、Swift。

Swift の名前空間はよくわからない。暗黙的に Xcode のプロジェクト名になっているらしい。では、自分みたいに Linux 上でテキストエディタでしこしこプログラミングしている人はどうなっちゃうのだろう。よく理解していないのですが…。Ruby の require とか load みたいなのってないの? それから、CPAN や RubyGem みたいなのは?
 所詮 Linux での Swift プログラミングはお遊びだということなら、Linux で使い続けるのはむずかしいかも知れないなあ。
→いや、Linux でもどうやらオレオレ import は可能らしい…

ブログ「本はねころんで」さんが森敦に言及しておられて(参照)ひさしぶりにその名を聞いた。もうとうに亡くなられた筈だが、永遠を呼吸しておられるような小説を書かれた人である。若くして注目されたが、その後(確か)ダムの建設工事などをしながら、一〇年働いて一〇年遊ぶ、というような生き方をされていたのではなかったか。いや、うろ覚えなのでまったくちがうかも知れない。とにかく、小説の数は少ない。それから「意味の変容」という理論的著作があって、大学生の時の自分は一読してまったく驚いたことだけは覚えている。自分にはじつに難解であり、浅田彰柄谷行人らは高く評価していた(同書は柄谷行人の強い推輓によって出版された)。『月山』も『われ逝くもののごとく』も好きだったのだが、いまとなってはその雰囲気しか覚えていない。ひさしぶりに思い出したから、あるいはそのうち読んでみようかな。

疑問。
  
が成り立つとき、
  
が成り立つことを証明せよという問題をみかけたのだが、これって
  
が単調増加関数だから、ほとんど自明なのではないの? いちいち証明するようなことか? 何かおかしいですかねえ。

いや、やはり自明ではないな。a, b, c は独立に動くわけではないからね。ちなみに第一式を変形して a = -b または b = -c または c = -a となるので、これら三つの式のどれを取っても第二式が成立することがわかる。