ジェネリクス勉強会
ジェネリクス勉強会(https://connpass.com/event/56773/)に参加してきた。 会のテーマはジェネリクスで、その話を含めればおおよそ何でもよい感じの話。 テーマがテーマなので Java に言及することが多かった。一方で関数型言語の話は控えめ (最後のセッションが Scala だったが、その前に時間切れで途中で帰ってしまった…これはかなり残念)
ジェネリクス ディスパッチ 表裏 by κeen さん
Java と Rust、ときどき Scala で見るジェネリクス実装方法の違いの話。 実装面まで踏み込んで調べたことはないので興味深かった。Rust も楽しいそう。
また存在型についての話もあった。 存在型については一度調べたことがあるはずなのに、全然覚えていなかった。TaPL を読もう。 ただ存在型があった方がいい場面というのがいまいちイメージできず理解できてない。
ジェネリクスの概論とか by なぎせさん
ジェネリックスとはなんぞやという話。 Java8 で型推論が強化されたらしいが、最近も最近の Java を使えてないのでどうも恩恵を受けれてない。 あとこの発表を聞いて、リスコフ置換原則は若干間違えて覚えていたことがわかった。あぶない。
拡張可能レコードの恩恵 by fumieval さん
Haskell.Generic に関連していると思われる話。正直ついていけてなかった。
Generics on Xamarin products by atsushieno さん
https://speakerdeck.com/atsushieno/generics-on-xamarin-products
Xamarin でのジェネリクスの話。Xamarin、というか Mono は C で書かれていて、 その上でジェネリクスを実装するのはかなり大変だったらしい。 プリミティブがジェネリクスの引数に来てしまうとアドレスがずれてしまうとのこと。 解決策としては昔は多めに引数の領域をとるようにしていたが、現在はスタック上に 引数を置いて、後で CPU 側のトランポリンでメモリアドレスを構成しなおしている。
Xamarin についてはくわしくないが、低レイヤの話もあったので、かえって自分にはわかりやすかった。
Fluent Design のすすめ by haochenxie さん
Java で Fluent Design を構築するために、ジェネリクスをうまく使いましょうという話。 特に入れ子構造になる Fluent Design を実現するにはジェネリクスを使う必要があって、 かつその使い方がかなり工夫されていた。
どうせ Java でしょ?と思っていたが思いのほか楽しかった。 とくに Java のジェネリクスの文脈で継続が出てくるとはまったく思っていなかった。
2017 年 6 月の文化活動
- 行ってきた美術館・博物館展
- 大英自然史博物館
- マーベル展
- 観た映画
- ローガン
- メッセージ
- 読んだ本
- バッタを倒しにアフリカに
ううむ。それほど文化的な感じがしない。映画見逃したのがある気がするし、読書に時間を使えていないのもよろしくない
システムプログラミング会
システムプログラミング会に参加してきました
7/2のシステムプログラミング会に参加してきました。
募集期間が非常に短かったのですが、たまたま TL を覗いた時に見つけたのでなんとか参加申込することができてラッキーでした。
時間切れのため途中で帰ってしまったのですが、懇親会を含めると結構長い時間やっていたようです。
以下メモ。
New LLD Linker for ELF by Rui Ueyama (@rui314)
- windows 上でもリンクできるようにしたい
- もともとのモチベーション
- コンパイラとかデバッガとか移植しないといけない
- 現在 GNU でないといけないのはリンカぐらいしかない
- MIPSに対応
- icf オプション
- identify content folding
- ふつうは名前でまとめるが、このオプションをつけるとコンテンツをま とめてフォールディングする
- 基本的にはグループ分けして内容が違ったら分割、リロケーションがさしている先が同じだったらまとめる
- 平衡に達したらマージ可能なグループになる
- identify content folding
- LLD の設計としては、余計なことをしないことを主眼においている
- GNU LD のシンボル解決
- 引数の順序によってリンクのされ方が異なるという問題があった
- LLDではかなり変えていて、ファイル渡す順序によらずシンボルを解決している
- ファイルサイズはかなり小さくできている。
- C++ で10,000行ぐらい。
- リンク時の名前解決
- LLVM
- 今後の目標。 FreeBSDで普通に使う。カーネルのビルド。
- ハッシュ関数
現状の GNU LD のことを考えると、案外あっさり置き換えられたりするのかも。
Kati @shinh
- http://shinh.skr.jp/slide/kati_sp/031.html
- ビルドシステム
- Android Platform
- アプリ開発者というよりデバイス開発者向け
- 結構でかい
- 普通にmakeをつかっている
- Android.mk
- Kati で GNU Make より高速ビルド
- 最初は Go で書いていたが GC が遅いため C++ で書き直した
LLVM と C++ でコンパイラフロントエンドつくった @Lind_pp
- https://speakerdeck.com/rhysd/make-a-compiler-frontend-using-c-plus-plus-and-llvm
- プログラミング言語 Dachs
- Ruby like な緩い構文
- 強い型づけ+型チェック成
- パーサジェネレータの Boost.Spirit
- 意味解析と LLVM IR の生成は vistor パターンを使用
感想
LLVM 使うとやっぱりこういう風になりそうな気はする。
質問タイムであったように最適化とかをやりたいというような用途には向いていないっぽい。
なんかトレースする話 @nalsh
- https://speakerdeck.com/naruse/nankatoresusuruhanasi
- ps -elF
- perf top
- 楽しい
- 特権が必要
- procfs
/proc/<pid>/stat
- 実行中のアドレスがわかる
- バイナリと合わせて実行中の関数が推測できる
Programming TCP for responsiveness by Kazuho Oku (@kazuho)
- http://www.slideshare.net/kazuho/programming-tcp-for-responsiveness
- H2O HTTPサーバ
- レスポンスのために、データが CWND を超えてTCPパケットを送信できるようになったらすぐ送信できるようにしたい
- データは TCP send buffer と BIO buffer にためられる
- BIO buffer は TCP send buffer からあふれた分
- ただし send buffer が小さくなったことでの弊害もあり
感想
実をいうと、最初聞いたときはあんまりよくわからなかった。
あと HTTP2 もよくわかっていない。つらい。
Fron IA-32 to AVX-512
- http://www.slideshare.net/herumi/from-ia32-to-avx512
- i386
- 32bit汎用レジスタ eax,ebx,... 8つ
- eax 下位 16bit が ax, ax の下位 8bit が al
- modR/M
- パーシャルレジスタストール
- ax を操作した後に eax を操作するとペナルティ。遅くなる
- x64
- レジスタは 16 個に
- modR/M のために re プレフィクス
- 32bit 操作をすると上位 32 bitはクリアされる
- NOP命令が追加
- AVX
- コンパイラのバグでパーシャルレジスタストールが起きた事例
感想
のちのセッションでもあったが、Intel の Software Developer's Manual は目を通しておいたほうがよさそう。 この勉強会に来るまで存在も知らなかったので、またも不勉強が露呈した。Unix Domain Socket by 田中哲
- http://www.a-k-r.org/d/2016-07/2016-07-02-unix-socket-api-problem.pdf
- UnixDomainSocket ふるまいは多様()
- APIが腐っている
- sun_len
- ソケットアドレスの終端
- NULL終端で判断する
- 引数で渡されたサイズを使用する
- etc
- 表現方法が複数あるので混乱が起きる
- APIデザインは重要
コンパイラをつくった話 by 七誌 (@7shi)
- https://onedrive.live.com/view.aspx?resid=FB45E1F8CE8B532E!82121&ithint=file%2cpptx&app=PowerPoint
感想
ここら辺はトイレに行っていて半分くらい聞けてなかった。
ASTをXMLで表現する、というのは仕事でやったことがあるが、あんまりやらないほうがいいのかも。
L1キャッシュ @kumagi
- Radix Sort
- SoftWare Write Combining
- https://docs.google.com/presentation/d/1Y62OO574mcnaKItgAFIO49jCkZ4lOnUY0sMyUgAwQMs/edit#slide=id.p
- StackExchange は面白い
- 実行中にシステムコールを全く行わないUNIXコマンドはあるか?
- システムコールなしでシグナルをどれだけ呼び出せるか?
感想
ここも案外知っているつもりで知らないことが多かった。 普通のコマンドではかならず
exit()
が呼ばれる、というのも、言われてみればそうだがあんまり意識したことはなかったし、結構盲点を突かれた感じ。
俺々OS用スケジューラの設計と実装 by @yitabashi
- オレオレOSスケジューラをつくったという話
REMarks by @mkasahara
H1
H2
H3
int main () { return 0; }