kubo39's blog

ただの雑記です。

2018-01-01から1年間の記事一覧

druntimeのcore.syncについて

いろいろいけてないよな。 Mutexの実装がデフォルトでre-entrant 不定な振る舞いよりはデッドロックが早期にわかるほうが100倍マシだから 条件変数およびセマフォのタイムアウトつきwaitがmonotonicなclockじゃなくシステムクロック なので、システムの時刻…

ErupteDを使ってDからVulkan触ろうと思ったけどできなかった話

最近しょうもない記事ばっかり書いてるけど、無職だとこうやってメリハリつけないとだめかなーと思っての行為なので許容して。 DでVulkanさわろうとおもうと https://github.com/ParticlePeter/ErupteD というライブラリが一番スターついてるっぽいのでこれ…

LDC向けのSIMDライブラリを作っているけど、いろいろつらい

x86intrin 勉強がてらにLDCでx86intrinsicっぽくSIMDを書けるライブラリを書いてみている。まだまだ全然途中なので使わないでください。 github.com _m128iとかじゃなくてそのままbyte16とかを直接 _mm_XXX の引数にとったりするようにしてるけど、将来的に…

perfを使ってD言語のプロファイリング結果をみる

まず手元の /proc/sys/kernel/perf_event_paranoid を確認する。Ubuntuとかだと最弱設定になってるので変えとく。 $ cat /proc/sys/kernel/perf_event_paranoid 3 $ sudo sh -c 'echo 1 > /proc/sys/kernel/perf_event_paranoid' 普通に perf record にかけ…

D言語で一ヶ月前を表すとき

日付の扱いは忘れそうなのでメモ。 一ヶ月前を表す場合、可能であれば前月の同日同時刻を表し、前月に同日が存在しない場合は差分を計算して付け足す。 import std.datetime; import std.stdio; void main() { auto currTime = Clock.currTime(UTC()); write…

D言語のprecise(正確な) GC

(追記: 編集あり) 実は結構前に保守的なGCから正確なGCになって いた いなかった。仕組みはマーク・アンド・スィープで変わらないが性能は大幅に向上が期待できそう。 github.com これによって、 メモリ確保時 allocatorの使い分けによる効率的なメモリ管理…

OpenSUSEを試してみてる

デスクトップ環境として最新のLeap使ってみてる。 感想としては、 IM(Mozx <-> US)の切り替えがめちゃくちゃ遅い。普通にタイピングに支障が出るレベル。 方向関係なく、「hankakuzenkaku」で切り替えると遅く、「hankakuzenkaku+Shift」だと気にならない程…

プロセス起動でposix_spawnとかvforkとかを使うはなし

posix_spawn/vfork/clone(CLONE_VFORK) はメモリを共有するので速い. 速いが、親子でメモリを共有するので危険である. それでも速いのでプロセス起動で気をつけて使っている言語があり、どういう実装をしているか調べた. 前提 fork-exec間はasync-singal-saf…

D言語の八進数リテラルの特殊扱い

D言語はかつて八進数リテラルを定義していたが、現在は仕様上Invalidとなっており std.conv.octal を使うようにエラーメッセージが出現する。 (dmd-2.081.1)$ cat octal.d void main() { auto _ = 010; } (dmd-2.081.1)$ dmd octal.d octal.d(3): Error: oct…

D言語の静的配列のちょっとかわった挙動

以下のコードの振る舞いはちょっと変わった感じをうけるかもしれない。 int[2] ARR = [5]; void main() { // int[2] arr = [5]; // Error: mismatched array lengths, 2 and 1 assert(ARR == [5, 0]); } この場合、D言語の静的配列はグローバルに宣言した場…

DMDにContributeした

D言語の数値まわりの字句解析のはなし - kubo39's blog これがほっといてもなおってなかったので、自分で報告して修正した。 github.com DMDのビルドははやくて快適だけど、フルテスト回すとそこそこ時間がかかる。 追記 今きづいたけどエラーメッセージにSu…

採用面接で聞きたい55の質問

自分ひとりで考えたわけではない(というかほとんどそうではない)が、採用面接で質問したいことを一覧でまとめてみた。 リスク管理はしていますか, 破滅的なリスクを無視してしまうことを避けるためになにかしていますか? どうやって成果の判断をするのです…

std.parallelismざっくり

D言語で並列処理を扱うためのライブラリとして、標準ライブラリにstd.parallelismがある。 これはstd.algorithmやstd.rangeを使うのとほとんど同じような感じで処理が書ける。 以下の処理はOSスレッドによって並列に実行される。 デフォルトのワーカースレッ…

「Is Parallel Programming Hard, And, If So, What Can You Do About It?」のSpinLockのPromelaのコードを書き直してみた

TLで「Is Parallel Programming Hard, And, If So, What Can You Do About It?」 https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html という本がおもしろそう、というのがまわってきた。 こういう本には珍しく形式検証を扱って…

SpinlockのExponential Backoff実装について

SpinLockのExponential Backoffアルゴルズムの実装を少し調べた. ParkingLot (WebKit,C++) https://webkit.org/blog/6161/locking-in-webkit/ という素晴らしいブログ記事で spinning という節で触れている. どうやら JikesRVM というJVM実装に由来するよう…