2015-09-01から1ヶ月間の記事一覧
分かったこと。 1. swiftでC言語の構造体を別変数へ代入すると全ての要素が代入される。つまりC言語と同じ動作をする。 2. C言語の構造体内のポインタにはC言語側で入れたアドレス値が入っていてswift側でそのまま、UnsafeMutablePointerとして扱える。 3. C…
Xcodeに付属するInstrumentsで遅い処理を特定する手順です。 Instrumentsの中のTimeProfilerを使います。 Profileを実行します。 TimeProfilerを選択します。 赤いボタンを押すと実行が始まります。 スレッド毎にかかった時間(milliseconds)と比率(%)が表示…
smartgrepを高速化してみました。 https://github.com/pebble8888/smartgrep 結果、5倍近く高速化することができました。 - 試したことその1 mmapの利用 ファイルサイズ分のメモリを確保しファイル内容をすべて読み込む手法ですが試したところ、全く高速化さ…
4096 * 10,000 個のfloatに特定の演算をしたときの時間。 C index指定 115791 us C ポインタ指定 116161 us swift 5469 us swift vDSP 9235 us AccelarateフレームワークがなぜかPure Swiftに負けてる。
構造体も構造体ポインタもどちらも渡せるが、構造体ポインタのときはmemoryとたくさん書くことになる。ソース可読性を優先すると構造体の方がよさそう。速度については構造体ポインタの方が若干速いようだ。 swift1.2 Optimization Level : Fasttest [-O] 1,…
stackoverflow.com あるクラスをobjcからswiftへ移行するなら、継承関係にあるクラスはすべて、いちどきにswiftに書き換えないといけない。
Objective-CでNS_ENUM定義がswiftでどのように見えるか実験した。 enum.h typedef NS_ENUM(NSUInteger, Element){ ElementFire, ElementWater, }; typedef NS_ENUM(NSUInteger, FRUIT){ FRUIT_APPLE_1, FRUIT_ORANGE_2, }; typedef NS_ENUM(NSUInteger, ANIM…
勘違いしていたが、ObjC側からswiftソース上で呼び出せるのは、クラス(のメソッド)、プロトコル、整数型のenumのみだった。 swift上で書いたグローバル関数やグローバル変数は呼び出せないのだった。逆は可能。 つまり、ObjCのクラスはswiftへ移行できるが整…
struct Array<T> : MutableCollectionType, Sliceable, _DestructorSafeContainer { } extension Array { func withUnsafeBufferPointer<R>(body: @noescape (UnsafeBufferPointer<T>) -> R) -> R mutating func withUnsafeMutableBufferPointer<R>(body: @noescape (ino</r></t></r></t>…
Reflectableプロトコルとは、型情報を扱うためのものと考えて良い。 protocol Reflectable { func getMirror() -> MirrorType } protocol MirrorType { var value: Any { get } var valueType: Any.Type { get } var objectIdentifier: ObjectIdentifier? { …
swiftの標準ライブラリはすんなり理解できないところが多いため、一つづつ調べていきたい。 struct Array<T> : MutableCollectionType, Sliceable, _DestructorSafeContainer { } extension Array : _ArrayType { init<S : SequenceType where T == T>(_ s: S) } このイニシャライザのwhere T =</s></t>…
Swiftで変数にatomicにアクセスしたい場合、幾つか方法があるが、OSSpinLockを使う方法をここでは紹介する。 他の方法との時間の比較も時間があればやりたい。 まずは、排他処理なしの場合に動作がダメなことを確認する import Foundation let sz = 1000 var…
iOS8.3(2015年7月)リリースタイミングで追加されたらしい。 やっとswiftでまともにAudioBufferListが扱えるようになった。 UnsafeMutableAudioBufferListPointer developer.apple.com stackoverflow.com
swiftとobjective-Cのメソッド呼び出し時間はどのくらい違うのか、試してみた。 空っぽのメソッドを1回呼び出すのにかかる時間 デバッグビルド(OSX10.10、Xcode7GM) objc 0.119μsec swift 0.043μsec リリースビルド(OSX10.10、Xcode7GM) objc 0.007μsec swif…
swiftでIntをBoolに変換するときの注意 これはコンパイルOK let a:Int = 1 let b:Bool = (a != 0) これはコンパイルエラー aの後ろにスペースを空けないと、a!だとみなされてしまう。 let a:Int = 1 let b:Bool = (a!=0) // Operand of postfix '!' should h…
[2017-02-12 update] swift3からunsafeBitCastではなくUnmanagedを使う方法が推奨となっていますのでそちらをお使いください。 unsafeBitCastを使ってswiftのクラスをポインタとして扱い、コールバック後のクラスに戻して動作するかやってみた。 結論から言…
swift2でC言語の関数ポインタが利用できるようになった。 例えば、以下のように書けるようになった。 cfile.h typedef int (*OPERATION)(int, int); int execute(OPERATION operation, int a, int b); cfile.c #include "cfile.h" int execute(OPERATION ope…