Twitterでふぁぼったものをひたすら試します

Swift雑記 in 2016 winter

qiita.com

iOSから解き放たれてpureなSwiftを書きたい、しかも誰も書いたことがない題材で!
→その頃たまたま触っていたipythonの存在に気づく、当然誰もSwift kernelは書いてない(それplaygroundでよくね?)
→やはり難易度が高かったので適当にごまかすカレンダー

ipython

IPython kernels for other languages · ipython/ipython Wiki · GitHubに各言語のkernelが書いてある

この辺が参考になりそう
Making kernels for IPython — IPython 3.2.1 documentation
Making kernels for Jupyter — jupyter_client 5.0.0.dev documentation
Creating Language Kernels for IPython - Andrew Gibiansky

シンプルで参考になりそうなやつ:
GitHub - dsblank/simple_kernel: A small, simple kernel example for IPython
これを読んでいた。C#でいけるならSwiftにもチャンスあるでしょ!(?)

SwiftはCLionで書ける

CLionにのみSwiftプラグインが存在する。IntelliJ IDEAにはない。AppCodeは確かに書けるけどあれはiOS

Swift plugin for CLion | CLion Blog
ちょうど去年の今頃の記事だ。
でも別にSPMで持ってきた定義とリンクさせてくれるわけじゃないので微妙。

ZeroMQ for SPM

存在していることにびっくり。
GitHub - Zewo/ZeroMQ: ZeroMQ for Swift

SPMって相変わらずブランチ最新が取れないので、ライブラリによっては「最新は対応してるけどまだバージョンタグきってない」の状態でそのままじゃ取れない時がある。(だよね?)

Cのヘッダファイル

SPMでとってくるテクニックがあったのだが、今は使えない気がする。
Ship C code with swift packages using swift package manager – ankit.imにも書いてある公式ドキュメントは消されてしまった。

つらすぎ。

Range実装

Pythonrangeの実装(Objects/rangeobject.c)を読んだ - Qiitaので、Swiftの方も目を通してみた。

swift/Range.swift.gyb at master · apple/swift · GitHub
PythonがCでゴリゴリやっているのに対し、SwiftはSwiftで実装している。向こうはCという関係上 PyLonglong をさまよっていた。こっちはそういう話ではなく、Swift 3のRange徹底解説 - Qiitaにもあるような開区間だの Int 刻みだのの次元の話をしている。

ぬる安全問題、そして型

議論を読んでいて、なくても平気という人がそこそこいた。みんなぬるぽとか型の間違いをしないのだなあ、いつも間違える私とは違うと驚いた。

型といえば、
Pythonなんか書いた日には生産性がわるい。pandas.DataFrame — pandas 0.19.1 documentationのいう array-like が、ビルトインのlist以外にNumPyのarrayを含むかどうかがぱっと見でわからないのはしんどい。どこまでがarray-likeでそうじゃないんだ。ListProtocol(仮名)準拠のものならなんでも、とかそういう書き方をしてほしい。
PHPも同様。PHP: date_parse - Manualとか、 array を返すと言っておきながら失敗時に FALSE を返すとも言っている。
とかいう文句を私はずっと言っているので、こういうらくちんな言語を書くのに向いてない。

その点Swift Standard Library | Apple Developer Documentationは引数も戻り値も明確で軟弱な私にはありがたい。軟弱すぎる?ダメ?

懺悔

ここだけの話(じゃない)んですけど、
株式会社コンセプトっていうと通じないんですけど、ぬる安全の話の発端の集団って説明すると通じるの便利すぎてやめられない。ごめんなさい。

次回予告

Swift Tweets

LTで抽選に登録してます!どきどき。もし通ったら型とかFPの話になると思う。
来年も勉強頑張るぞ。