yohhoyの日記

技術的メモをしていきたい日記

2016-09-01から1ヶ月間の記事一覧

型推論と無限型(infinite type)

Java言語のジェネリクス(generics)では、型推論過程において無限型(infinite type)が推論されうる。ただしJava言語では無限型を表現できないため、非境界ワイルドカード(unbounded wildcard) を用いた再帰型(recursive type)で代替される。下記コードの条件…

複数例外catchの型推論

Java7で導入された複数例外 catch における型推論についてメモ。*1下記コードでの multi-catch 節における変数eの静的型は、Javaコンパイラの型推論によりException & CustomException型となる。つまりExceptionクラスとCustomExceptionインタフェースの両者…

Option型とNull Pointer Optimization

Rust標準ライブラリが提供するヌル許容型 std::option::Option<T> の空間オーバーヘッドについてメモ。[本記事はRust 1.11/Stable準拠]まとめ: T型がポインタ的に振る舞う(有効値が非ゼロと保障できる)場合、ヌルポインタ最適化(null pointer optimization</t>…

forループとイテレータ

Rust言語のfor構文と IntoIteratorトレイト に関するメモ。[本記事はRust 1.11/Stable準拠] for x in expression { // ループ本体 } Rust公式ドキュメントによれば、forループでは下記コードと等価な処理が行われる。式 expression に対して IntoIterator:…

多値返却×型推論 in C++ (2)

C++1z(C++17)で導入予定の Structured Bindings と クラステンプレートの型推論 を組み合わせて、多値返却関数からの戻り値を型推論された個別変数にて受け取る方法。こちらは多値返却関数fooの戻り値を型推論する前提。 // C++1z(C++17) #include <cassert> #include <string></string></cassert>…

多値返却×型推論 in C++ (1)

C++1z(C++17)で導入予定の Structured Bindings*1 とstd::tupleコンストラクタの改善(→id:yohhoy:20150416)を組み合わせて、多値返却関数からの戻り値を型推論された個別変数にて受け取る方法。 // C++1z(C++17) #include <cassert> #include <string> #include <tuple> #include <type_traits> </type_traits></tuple></string></cassert>…

readdir/readdir_r関数のあれこれ

POSIX環境にて提供されるreaddir, readdir_r関数に関するメモ。まとめ: 事実上スレッドセーフが保証されるreaddir関数を使うこと。将来のPOSIX規格でスレッドセーフ保証が追加予定。 readdir_r関数を利用してはならない。POSIXからも廃止予定であり、GLIBC …