タグ

C++1yに関するUSAGI-WRPのブックマーク (14)

  • 新しい並列for構文のご提案

    CuPy は Python 上での GPU 計算を支援するライブラリです。Python で標準的に使われている配列計算ライブラリ NumPy 互換の API を提供することで、ユーザーが簡単に GPU (CUDA) を使えることを目指して開発しています。 今回は、CuPy の使い方とその実例、高速化のポイントに加えて、CuPy の仕組み、開発の方向性など、より深く CuPy を知って頂ける内容をお伝えします。

    新しい並列for構文のご提案
  • libc++ C++14 Status

    If you are not redirected automatically, follow this link to new documentation.

  • C++1y 多倍長整数 - Faith and Brave - C++で遊ぼう

    N3542 Proposal for Unbounded-Precision Integer Types C++1yに向けて提案されている多倍長整数クラス。 この提案では、固定精度整数クラスは含まれておらず、無限精度のintegerクラスのみが考えられています。 integer a = 123; // int型整数からの初期化 integer b{std::string("12345678901234567890")}; // 文字列からの初期化 // 出力 cout << a << endl; // 文字列への変換 string s = a.to_string(); 現状の提案の問題としては、アロケータが指定できないことや、ユーザー定義リテラルがないことなどが挙げられています。 提案してる人が違うこともあってか、Boost.Multiprecisionとはだいぶ設計が異なっています。

    C++1y 多倍長整数 - Faith and Brave - C++で遊ぼう
  • C++1y 通常の関数の戻り値型を推論 - Faith and Brave - C++で遊ぼう

    N3638 Return type deduction for normal functions ラムダ式では、return文から戻り値の型を自動的に推論してくれますが、通常の関数は推論してくれません。この提案は、ラムダ式と同じく、通常の関数でも戻り値型を推論できるようにしよう、というものです。 通常の関数で戻り値を推論してほしい場合は、関数宣言の戻り値型を「auto」にします。 auto f(); // 関数f()の宣言。戻り値の型は「不明」。 auto f() { return 1; } // 関数f()の戻り値型はint int x = f(); // x == 1 参照型を返したい場合は、戻り値の型をauto&にします。 int x = 3; auto& f() { return x; } int& r = f(); ここまでの機能は、GCC 4.8で-std=c++1yオプション

    C++1y 通常の関数の戻り値型を推論 - Faith and Brave - C++で遊ぼう
  • C++1y SIMDライブラリの提案 - Faith and Brave - C++で遊ぼう

    N3571 A Proposal to add Single Instruction Multiple Data Computation to the Standard Library ひとつのCPU命令で複数のデータを操作する、SIMD(Single Instruction Multiple Data)を抽象化したライブラリの提案。これは、スレッドを使用するタスク並列性に対して、データ並列性と呼ばれている分野の技術です。 この提案は、Boost.SIMDとしてBoostに提案される予定のライブラリが元になっています。Boost.SIMDについては、私が翻訳したスライド資料もあるので、合わせて参照してください(Boost.SIMDによる実用的なSIMDアクセラレーション)。 このライブラリは、SIMDを抽象化したpack型と、それに対して操作を行うaccumulate()やtransfor

    C++1y SIMDライブラリの提案 - Faith and Brave - C++で遊ぼう
  • OpenMPのC++言語統合提案 - yohhoyの日記

    C++1y(C++14)に向けた並列プログラミングモデルについてメモ。(PDF)N3530 Leveraging OpenMP infrastructure for language level parallelisationにて、OpenMP実装インフラをC++言語機能として統合する提案がなされている。初期提案のため骨子のみ。 OpenMPは主要な処理系にてサポート済みの機能であり、既にあるこの実装インフラを利用することで、新しい言語機能への対応が容易になる点を推している。従来の#pragma ompを利用したOpenMP指示文の代替として、新しいC++キーワード/関数を幾つか導入する。 OpenMP N3530 parallel for指示文 parallelforキーワード parallel task指示文 paralleltaskキーワード taskwait指示文 taskwait

    OpenMPのC++言語統合提案 - yohhoyの日記
  • C++1y 文字列のjoin - Faith and Brave - C++で遊ぼう

    N3594 std::join(): An algorithm for joining a range of elements コンテナを、指定した区切り文字を付けれ文字列化するjoin()関数が提案されています。 // カンマ区切りの文字列にする vector<string> v = {"a", "b", "c"}; string s = join(v, ","); assert(s == "a,b,c"); // 要素はintでもdoubleでも、文字列化できるならOK vector<int> v = {1, 2, 3}; string s = join(v, ","); assert(s = "1,2,3"); ちなみにBoostには、Boost.StringAlgoライブラリにjoin()関数があります。こちらが扱えるのは、stringのRangeだけですね。ただし、戻り値の文字列

    C++1y 文字列のjoin - Faith and Brave - C++で遊ぼう
  • C++1y 動的配列クラスの提案 - Faith and Brave - C++で遊ぼう

    N3522 C++ Dynamic Arrays C99にある可変長配列がC++でもほしい、という動機から、std::vectorとは少し違う動的配列クラスが提案されています。 int n = 3; dynarray<int> ar(n); // 動的に要素数を決定する(その後追加、削除はできない) size_t size = ar.size(); // コンストラクタで設定した要素数を取得(3が返る) // イテレータによる操作 for_each(ar.begin(), ar.end(), [](int&) {}); コンストラクタで動的な要素数を決定し、その後、要素の追加・削除を行わないのが特徴です。 アロケータを設定できないインタフェースになっていますが、これは領域をヒープにとるかスタックとるかを、ユーザーに決定させない(隠蔽する)という目的があるようです。 現状、ムーブできない等、

    C++1y 動的配列クラスの提案 - Faith and Brave - C++で遊ぼう
  • An implementation of generic lambdas (request for feedback) -- Faisal Vali : Standard C++

  • C++1y - optionalの提案 - Faith and Brave - C++で遊ぼう

    C++1yでは、boost::optionalをベースとしたクラスが提案されています(元々TR2で導入しようと考えられていた)。提案者は、Boost.Optional作者のFernando Cacciolaさん。 このクラスは、intだったら-1を無効値とし、ポインタだったらNULLを…といったプロジェクトの決め事による無効値ではなく、型で無効値を表現するのに使用します。 optional<int> x = 3; // 有効値を代入 x = nullopt; // 無効値にする この提案でのboost::optionalとの相違点は、大きなところでは以下になります: 無効値はnullopt。Boostはnone。 constexpr対応 入出力ストリームの演算子を提供しない emplaceによる構築。Boostではin_place()関数。 入出力ストリームを提供しないのは、現状その振る舞

    C++1y - optionalの提案 - Faith and Brave - C++で遊ぼう
    USAGI-WRP
    USAGI-WRP 2012/11/18
    [boost::optional][2012][Faith and Brave]
  • C++1y static if - Faith and Brave - C++で遊ぼう

    C++1yでは、D言語にもあるstatic ifが提案されています。 宣言と文が現れるあらゆるところで使えるようにしよう、ということで考えられいて、ユースケースもいろいろ考えられています。 まず、コンパイル時条件によって処理を呼び分ける基的な用途。 以下の、コンパイル時条件で分岐するような処理は、これまで関数オーバーロードでやっていました。 static if (sizeof(size_t) == 8) { // 64ビット版のコンパイルではこっち void fun(); } else { void gun(); } 次に、クラスの定数/型定義。 以下の階乗のような例は、これまで特殊化でやっていました。 template <unsigned long n> struct factorial { static if (n <= 1) { enum : unsigned long { val

    C++1y static if - Faith and Brave - C++で遊ぼう
  • 2012-10-25

    C++1yでは、boost::optionalをベースとしたクラスが提案されています(元々TR2で導入しようと考えられていた)。提案者は、Boost.Optional作者のFernando Cacciolaさん。 このクラスは、intだったら-1を無効値とし、ポインタだったらNULLを…といったプロジェクトの決め事による無効値ではなく、型で無効値を表現するのに使用します。 optional<int> x = 3; // 有効値を代入 x = nullopt; // 無効値にする この提案でのboost::optionalとの相違点は、大きなところでは以下になります: 無効値はnullopt。Boostはnone。 constexpr対応 入出力ストリームの演算子を提供しない emplaceによる構築。Boostではin_place()関数。 入出力ストリームを提供しないのは、現状その振る舞

    2012-10-25
    USAGI-WRP
    USAGI-WRP 2012/10/25
    [boost::optional][maybe monad][Faith and Brave]
  • 2012-10-15

    C++11では、ユーザー定義リテラルという、リテラル値に対して型付けするための機能が導入されました。C++11時点では、標準ライブラリでユーザーリテラルは使われてはいません。 C++1yでは、標準でいくつかのユーザー定義リテラルを提供する提案が出ています。 代表的なところでは、時間ライブラリのChronoがあります。このライブラリは、時間の間隔を表すseconds, millisecondsといった型が用意されているので、以下のようにして値を型付けできます: template <class Duration> void f(Duration d) {} seconds s(3); // 3秒 // 関数に渡す f(seconds(2)); // 2秒 f(milliseconds(3)); // 3ミリ秒 この提案では、std::suffixes::chrono名前空間に、Chronoライ

    2012-10-15
  • 2012-09 pre-Portland mailingのあまり簡易ではないレビュー

    2012-09 pre-Portland mailingが公開された。久しぶりなのですっかり忘れていた。今回はやたらと多い。もちろん、もはや正式規格発行後なので、差し迫った変更はない。細部の疑わしい文面の変更とか、大雑把な提案とか、将来C++への追加の可能性のある機能が、現状ではどのように独自な拡張やライブラリで実装されているのかなどの紹介といったところだ。今回は、紹介も非常に多く、規格への提案というよりも、C++11でライブラリはどのようになるかといった紹介が多いように思う。 とにかく今回は数が多い。疲れた。非常に疲れた。無償でやるのも不毛だ。 C++11は、2000年中に制定されることが期待されていたので、だいぶ最近までC++0xと呼ばれていた。C++0xという呼称を最初に使ったのは他ならぬBjarne Stroustrupだが、次の規格の呼称もすでに生まれている。C++1yという。現

    2012-09 pre-Portland mailingのあまり簡易ではないレビュー
  • 1