最終更新日時:
が更新

履歴 編集

Boost 1.54.0リリースノート

本家リリースノート:

https://svn.boost.org/svn/boost/website/public_html/live/feed/history/boost_1_54_0.qbk

新ライブラリ

  • Log
    • Andrey Semashevによる、ロギングライブラリ
  • TTI
    • Edward Dienerによる、型特性の内省ライブラリ(Type Traits Introspection)
  • Type Erasure
    • Steven Watanabeによる、コンセプトに基づいた実行時多相性のライブラリ

更新ライブラリ

ニュース

Boostはこのバージョンから、80386ターゲットCPUをサポートしない。x86 32ビットの最小サポートはi486となる。

80386ターゲットは、このリリース以前からBoost.SmartPtrとBoost.Atomicで適切なサポートがされていなかった。

いくつかのBoostライブラリ(たとえばBoost.Log)は、CPUに求める要件を定めているので、詳細は各ライブラリのドキュメントを参照すること。

x86 32ビットターゲットのデフォルトでは、i686(Pentium Pro)とそれ以降でビルドされる。これはb2とbjamのコマンドラインオプションで変更指定できる。例:

b2 variant=release architecture=x86 instruction-set=i486 stage

選択可能な命令セットは以下である:

  • ホストCPUのターゲット: native
  • 汎用x86 CPU: i486, i586, i686
  • Intel CPU: pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium3m, pentium-m, pentium4, pentium4m, prescott, nocona, core2, corei7, corei7-avx, core-avx-i, conroe, conroe-xe, conroe-l, allendale, merom, merom-xe, kentsfield, kentsfield-xe, penryn, wolfdale, yorksfield, nehalem, sandy-bridge, ivy-bridge, haswell, atom
  • AMD CPU: k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, k8, opteron, athlon64, athlon-fx, k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, barcelona, bdver1, bdver2, bdver3, btver1, btver2
  • VIA CPU: c3, c3-2
  • IDT CPU: winchip-c6, winchip2

非推奨ライブラリ

Boost 1.54.0から、Boost.Signalsが非推奨となる。まだ削除はされない。

Boost.Signals2に移行すること。

Accumulators

  • コメントのtypoを修正(#7917)
  • 未使用変数の警告を黙らせた(#6926)

Algorithm

  • copy_whilecopy_untilの戻り型を変更した。これはインターフェースの変更である。もしこれらの関数の戻り値を利用しているなら、コードを変更しなければならない。単に更新済みのOutputIteratorを返すのではなく、これらの関数はstd::pair<InputIterator, OutputIterator>を返す。もしこの変更が運用中のコードに影響を与えるならば、呼び出しの最後に.secondを加えるのが以前と同じ挙動になる最も簡単な変更になるだろう。
  • C++14版のis_permutation()equal()mismatch()を追加。

Any

  • C++11の機能サポートを追加(#6999)
    • ムーブコンストラクタとムーブ代入演算子
    • noexceptを追加

Asio

  • 新たなトレイトクラス、handler_typeasync_resultを追加。これらを使用することで、開始関数(async_read()とか)の戻り値型をカスタマイズできる。
  • asio::spawn()関数を追加。これはBoost.Coroutineベースのスタックフルコルーチンによる高レベルなラッパーである。spawn()関数を使用することで、同期ロジックのように非同期ロジックを書けるようになる。
    • 例:size_t n = my_socket.async_read(my_buffer, yield);
  • 特殊な値、asio::use_futureを追加。これを開始関数に指定することで、C++11環境で非同期の開始関数がstd::futureを返すようにできる。
    • 例: future<size_t> = my_socket.async_read(my_buffer, asio::use_future);
  • HTTPサーバー4の例で使用していた、スタックレスコルーチンのクラスとマクロを、正式にドキュメントに記載し、推進するようにした。
  • 新たなハンドラーフックであるasio_handler_is_continuation()関数を追加。非同期操作が、現在実行中のハンドラに関連付けられた非同期制御フローの継続を表現する場合がある。asio_handler_is_continuation()trueを返すようカスタマイズすれば、Asioの実装はその知識を使ってハンドラのスケジューリングを最適化することができる。一般的なケースとしては、strandspawn、非同期操作の組み合わせなどがある。
  • 4つの汎用的なプロトコルクラスを追加。generic::datagram_protocolgeneric::raw_protocolgeneric::seq_packet_protocolgeneric::stream_protocol。これらはProtocol要件に基いて実装しているが、アドレスファミリ(たとえばAF_INET)とプロトコル種類(たとえばIPPROTO_TCP)は、実行時にユーザーが指定できる。
  • C++11のムーブコンストラクタを追加。これによって、socket(やacceptor)からジェネリックな型への変換が可能になる。たとえば、ip::tcp::socketからgeneric::stream_protocol::socketへのムーブ構築が可能である。
  • basic_socket_acceptor<>クラスのaccept()async_accept()を拡張。新たなコネクションとして、socketをよりジェネリックな型に直接accept可能になる。たとえば、ip::tcp::acceptorgeneric::stream_protocol::socketオブジェクトにaccept可能である。
  • 既存のサンプルをC++03用ディレクトリに移動し、C++11用のディレクトリを新たに作った。C++03の限定的なサブセットとして、C++11に等価に変換可能である。
  • SSLの機能を多々強化した。Nick Jonesに感謝する。
    • すでにワイヤーから読み取られたデータを再利用することによって、SSLのハンドシェイクをサポートした。ssl::stream<>クラスのhandshake()async_handshake()に新たなオーバーロードを追加した。これらは、SSLエンジンのハンドシェイクプローシージャに入力を渡すために、ConstBufferSequenceを受け付けるようにした。
    • TLSv1.1とTLSv1.2のssl::contextオブジェクトを作成できるようにした。
    • ssl::contextクラスとssl::stream<>クラスに、set_verify_depth()メンバ関数を追加。
    • SSLの証明書とキーのデータを、メモリバッファから読み込む機能を追加。ssl::contextクラスに、以下の新たな関数を追加。
      • add_certificate_authority()
      • use_certificate()
      • use_certificate_chain()
      • use_private_key()
      • use_rsa_private_key()
      • use_tmp_dh()
    • ssl::contextを、デフォルトでは自動的にSSL圧縮を無効化するよう変更。新たな関数ssl::context::clear_options()を使用して、内部的にmy_context.clear_options(ssl::context::no_compression)が行われる。
  • signal_setでデッドロックの可能性があった実装を修正
  • acceptorのサンプルにあった間違いを修正(#8421)
  • waitable timerのドキュメントにあったコピペミスを修正(#8602)
  • コード解析ツールの要件を満たすために、いくつかのassertを追加(#7739)
  • 不正な#warningディレクティブを修正(#7939)
  • Linuxでデータ競合の可能性があったepoll()の実装を修正
  • Windows限定のバグで、限定された操作によって、NULLerror_categoryへのポインタを持つerror_codeを生成してしまう可能性があったので修正(#8613)
  • basic_waitable_timerの内部実装で使用しているtime_pointの計算で、中間結果のdurationオブジェクトがオーバーフローしてしまう問題を修正
  • 同じio_serviceオブジェクトに対して平行にrun()poll()を呼び出すと、スレッドの起床がロストしてしまう問題を修正(#8354)
  • 非同期の接続操作が、reactorからの見かけ上の準備完了通知(spurious readiness notifications)に対処できるよう修正(#7961)

Chrono

  • 入出力でのメモリリークを修正(#8079)
  • time_pointdurationのコンストラクタに、BOOST_FORCEINLINEを付けた(#8318)
  • Xcode 4.5.2のClangで、標準ライブラリとしてlibc++を使用しているとdurationのコンパイルが通らない問題を修正(#8367)
  • リファレンスのtypoを修正(#8370)
  • HP-UXでChronoのコンパイルが通らない問題を修正。ワークアラウンドの判定条件が逆だった(#8435)

Circular Buffer

Container

  • Andrew HundtとAdam Wulkiewiczのハイパフォーマンスなvararrayの実装をベースにしたstatic_vectorクラスを、実験的に追加。
  • vectorのコンストラクタ/コピー/ムーブ/スワップの速度を改善。memcpyが可能な場合には、それをディスパッチするようにした。
  • BOOST_NO_EXCEPTIONSをサポートした(#7227)
  • バグ修正
    • boost::container::slistクラス内部で、intrusive::pointer_traits::to_pointerが呼び出せないというコンパイルエラーが発生していた問題を修正(#7921)。
    • BOOST_MOVABLE_BUT_NOT_COPYABLEがGCCで使用できない問題を修正(#7969)
    • stable_vector::back()が不正な値を返す問題を修正(#8118)
    • deque::insert(const_iterator, Itr, Itr)の計算オーダーが間違っていたので修正(#8294)
    • scoped_allocator_adaptorswapを追加(#8553)

Context

  • SPARCアーキテクチャをサポート

Coroutine

  • 分割スタック(要求に対して成長するスタック)のサポートを追加
  • 以下のチケットを修正
    • ドキュメントのtypoを修正(#7805)
    • ドキュメントが不正なURLリンクを指していた問題を修正(#7899)
    • GCCでの警告を修正(#7972)
    • coroutineiteratorを取得しようとしてコンパイルエラーが出る問題を修正。iterator_traitsを使っていなかった。(#8023)
    • foreach文で、coroutineconst_iteratorが使用できない問題を修正。boost::const_begin()をオーバーロードしていなかった。(#8024)
    • coroutineのイテレータが後置インクリメント演算子を持っていなかったのを修正(#8101)

Geometry

新機能

  • Spartial Index(空間インデックス)を追加。これはAdam WulkiewiczによってBoost.Geometry向けに開発された。オリジナルの実装は、Hartmut Kaiserがメンターを勤めたGoogle Summer of Code 2008のプロジェクトで、Federico J. Fernandezが始めた。
  • SVG出力を追加。これは拡張機能として数年前からある。

ドキュメント

  • いくつか説明不足だったところを修正

バグ修正

  • 共線の反対セグメント(collinear opposite segments)が(主に円:circleで)持っていた、堅牢性の問題を修正
  • insertion()が、交点の挿入に失敗する問題を修正
  • Vladimir Petrovicのパッチによる、横断のデバッグ機能を適用

解決したチケット

  • floatの縮退union()の結果を修正(#7462)
  • scale_transformerクラスのコンストラクタがprivateになっていたので、publicに修正(#7465)
  • cart_intersect.hppの、未使用パラメータ警告を修正(#7802)
  • intersection()が誤った交点を検出する問題を修正(レアケース)。(#8254)
  • polygon modelが、ドキュメントに記載されたPolygonコンセプトを厳守していなかった。ドキュメントを更新(#8393)
  • 「条件式は定数式でなければならない」というコンパイラの警告をを黙らせた(#8403)
  • 未使用変数警告を黙らせた(#8405)

内部的な変更

  • いくつかのアルゴリズムのバリエーションを作った(append, area, clear, convert, equals, length, num_points)

Graph

  • Jakob Lykke AndersenとFlavio De Lorenziによる、VF2 subgraph isomorphishmへの更新を追加(#8166)
  • Fernando Vilasによる、maximum adjacency search(最大隣接探索)アルゴリズムを追加(#6780)
  • Brammert Ottensによる、resource-constrained shortest paths (r_c_shortest_paths, リソース制限最短経路)アルゴリズムへのタイムアウトサポートを追加。
  • ドキュメントとサンプルコードへの様々な修正。古いコンパイラ向けのワークアラウンドを除去。
  • 以下のバグを修正:
    • graphmlの値に"for"属性を設定すると例外が投げられてしまう問題を修正(#7016, #7155)
    • isomorphism()に異なる2つのグラフ型を与えると、コンパイルエラーになる問題を修正(#7845)
    • 削除した名前付き頂点を再度追加すると、不正なグラフになる問題を修正(#7863)
    • graph/example/dijkstra-example.cppのコンパイルが通らない問題を修正(#7877)
    • reverse_graphの構築が、コンパイルエラーになる問題を修正(#8192)
    • dijkstra_shortest_paths()において、距離の比較がドキュメントとは異なる実装になっていた問題を修正(#8398)
    • PBGLのビルドが、C++11モードで失敗する問題を修正(#8411)
    • Johnson APSPのドキュメントで、DistanceMapの値型にaddable(a + bが可能なこと)を要求していたが、これは不要なので要求を削除(#8427)
    • Johnson APSPのドキュメントで、DistanceMapWeightMapの値型に、実装にある「2項減算が可能なこと(a - b)」が記載されていなかったので修正(#8428)
    • Sloan orderingの実装が、特定の値型を使用していたので、テンプレートの型を使用するよう修正(#8434)
    • astar_search()DistanceTypeに、numeric_limitsの特殊化を必要としないよう修正(#8490)

Interprocess

  • mapped_regionに、プラットフォーム規定のフラグサポートを追加(#8030)
  • バグ修正
    • shared_memory_objectm_modeメンバ変数が、デフォルトコンストラクタで初期化されない問題を修正(#7484)
    • interprocess::unique_ptrが代入できない問題を修正(#7598)
    • named_mutex/named_conditionの組み合わせが壊れる問題を修正(#7682)
    • named_mutex::remove()を連続で呼び出すと、成功してもfalseが返ってきてしまう問題を修正(#7923)
    • BSD向けのワークアラウンドを修正(#7924)
    • interprocess::shared_memory_objectの生成が無限ループに陥ってしまう問題を修正(#7928)
    • OSの起動時間が、時計で変更できてしまう問題を修正(#7936)
    • interprocess/mem_algo/rbtree_best_fit.hppのアサートに副作用がある問題を修正(#8521)
    • mapped_region::flush()で、asyncパラメータの比較条件が逆だったので修正(#8595)
  • ABI変更:Windowsにおいて、OSの起動時間をイベントログから取得してくるように修正した。以前使用していたLastBootupTime()は、WMIから使用すると、不正な時刻同期を行ってしまう。1.54.0より前のOS起動時間が本当に必要であれば、BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIMEを定義すること。

Intrusive

  • BOOST_NO_EXCEPTIONS サポートを追加(#7849)

Iostreams

  • tee()std::streamsで正しく動作するようにした(#8315)
  • ドキュメント修正
    • リンクの間違いを修正(#8385)
    • typo修正(#8460)
  • Clangの-Wimplicit-fallthroughオプションで発生する警告を回避(#8482)

Lexical Cast

  • 文字ポインタへの変換が実行時ではなくコンパイル時アサートになるようにした(#8334)
  • boost::int128_typeboost::uint128_typeの変換に対応した(#7909)
  • 内部ストリームバッファの扱いを変えて、libc++で動作するようになった(#8267, #7704)
  • 1.53.0でlexical_cast()のアドレス取得ができなくなっていたのを修正(#7421)
  • 警告、内部実装、テストの修正(#2558, #7949, 8162, #8369, #8547)

Math

  • 他のBoost.Math用の整数ユーティリティ(最大公約数と最小公倍数)、四元数や八元数を組み込むために大きな再構成を行った。これについて新しく章見出しを作った。
  • Boost.Multiprecisionのリファレンスを追加し、cpp_dec_float_50をユーザー定義型(UDT:User-defined Type)の例として追加した
  • Clangをサポートコンパイラに加えた
  • 任意の精度で計算結果のスレッドセーフなキャッシュを使うための定数を修正した。
  • Christopher Kormanyos氏により、cyl_bessel_j_zerocyl_neumann_zeroairy_ai_zerosairy_bi_zerosというベッセル関数の零点を求める関数が追加された。
  • Rocco Romeo氏に協力いただき、第一種ベッセル関数と、第二種ベッセル関数の精度が向上した
  • ヘッダがコンパイルされないひどい循環依存バグを解消した(#7999)
  • tgammaが142.5から143の実引数を与えると奇妙なオーヴァーフローを起こすバグを修正した。
  • 例外がキャッチされたときに正しくない結果を返すraise_rounding_errorのバグを修正した(#7905)
  • __float128のサポートを最小限追加した
  • ポワソン分位数が境界値ぎりぎりの場合に発生するバグを修正(#8308).
  • 導関数が平坦になっている領域で、不完全ベータ逆関数に対処するためのHalley iterationで利用しているヒューリスティックを調整した。例えば計算機イプシロンよりも確率が小さい場合におけるフィッシャーF分布の四元数を算出する場合などである。#8314 を参照のこと。

Move

  • BOOST_MOVABLE_BUT_NOT_COPYABLEを使うとC++11でGCCコンテナ型が利用できなくなる問題を修正(#7969)
  • BOOST_NO_CXX11_RVALUE_REFERENCESが未定義だと、has_move_emulation_enabledboost名前空間に定義されないバグを修正(#8231)

Multiprecision

  • 破壊的変更rational_adapterrational_adaptorに名前変更
  • MPFIのサポートを追加
  • logged_adaptorを追加
  • 128ビット浮動小数点数型として、GCCの__float128とIntelの_Quadのサポートを追加
  • cpp_intにユーザー定義リテラルのサポートを追加。constexprサポートを改善。
  • cpp_intによる符号あり整数の除算が、正しくない結果になる問題を修正(#8126)
  • single limbのcpp_intで、減算が正しくない結果になる問題を修正(#8133)
  • cpp_intで0を何かで割っても、結果が0にならない問題を修正(#8160)
  • 変数を再利用するケース(たとえばa = pow(a, b))で、超越関数が不正な結果になる問題を修正(#8326)

Polygon

  • Voronoiドキュメントの修正と更新
  • Pointコンセプトのドキュメントで、typedefが抜けていたのを修正(#8026)
  • range/algorithmと名前衝突する問題を修正(#8197)
  • #pragma warningする際に、defaultではなくpushpopを使用するよう修正(#8257)

Property Map

  • Guillaume Pinotによる、compose_property_mapを追加

Range

バグ修正

  • いくつかのRangeコンセプトが、正しくないイテレータコンセプトを使用していた問題を修正(#6944)
  • istream_rangewcinを渡すとコンパイルエラーになる問題を修正(#7407)
  • istream_rangeの内部で<istream>をインクルードしていたが、<iosfwd>で十分なため、インクルードするヘッダを変更(#7408)
  • irangeに渡すステップサイズが3以上だと、最終要素がステップサイズの倍数の場合に、rangeの要素に含まれない問題を修正(#7731)
  • Rangeアルゴリズムにr | indexedを渡すとコンパイルエラーになる問題を修正(#7827)
  • iterator_rangeに、配列へのポインタを入れられない問題を修正(#8338)
  • BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATIONマクロを使用した設定が正しくない問題を修正(#8453)

Thread

新機能

  • C++11準拠: call_once()の引数をムーブで渡すことを可能にした(#7285)
  • 非同期: futurethen()メンバ関数を追加(#7445)
  • 同期: synchronized_valueクラスを追加(#7449)

バグ修正

  • MinGW 4.5.0での、interruptible_wait()関数のリンクエラーを修正(#4878)
  • win32でshared_mutexのタイムアウトが正しく動作していなかった問題を修正(#4882)
  • pthread環境のcall_once()実装が、いくつかの環境でうまく動作しない可能性がある問題を修正。エポックの値としてuintmax_tを使用していたが、アトミックであることが保証される型を使用するようにした。(#5752)
  • shared_mutexの警告を修正(#6652)
  • Intel C++ Compilerで、#include <atomic>しているところがコンパイルエラーになっていた問題を修正 #6843)
  • boost::future_categoryのDLLリンケージを修正(#6966)
  • shared_mutexのロック/アンロックで、lock_error例外が送出される問題を修正(#7720)
  • Windows上のshared_mutexで、デッドロックが発生する問題を修正(#7755)
  • MSVC 11.0でBOOST_THREAD_DONT_USE_DATETIMEを使用するとコンパイルエラーになる問題を修正(#7980)
  • AIX上でpthread_delay_np()呼び出しがコンパイルエラーになる問題を修正(#7982)
  • Visual Studio 2003でThreadライブラリのコンパイルが通らない問題を修正(#8027)
  • Windowsの64ビット環境で、GetTickCount()の代わりにGetTickCount64()を使用するよう修正(#8070)
  • Windows上でboost::this_thread::sleep_for()のスリープ時間が長い問題を修正(#8136)
  • Solaris 10上でfutureのコンパイルが通らない問題を修正(#8212)
  • ドキュメントで、thread_groupのインクルードヘッダが間違っていたので修正(#8237)
  • barrier::wait()に割り込みポイントが設定されていることを、ドキュメントに明記(#8239)
  • try_join_for()に時間0を渡すと、無限ループしてしまう問題を修正(#8323)
  • future_error::what()が、死んだオブジェクトの文字列を返していた問題を修正(#8337)
  • constexprが使用できない環境で、完全なC++11実装のcall_once()が有効になっていたので、条件一致しない場合はC++03実装を選択するようにした(#8371)
  • mutex.hpprecursive_mutex.hppの両方でpthreadのタイムアウト付きロックが使用可能かをチェックしていたが、片方のチェック条件が緩かったために、利用可能でないタイムアウト付きロックが選択できてしまっていた問題を修正(#8443)
  • boost::scoped_thread::joinable()のドキュメントが抜けていたので修正(#8451)
  • 未使用変数の警告を修正(#8530)
  • C++11が有効な場合に、packaged_taskに関数オブジェクトのコピーではなく参照を保持するようにした(#8596)

Type Traits

  • 新たなType Traitsを実装した(#8189)
    • is_nothrow_move_constructible
    • is_nothrow_move_assignable
    • has_trivial_move_assign
    • has_trivial_move_constructor

uBLAS

ベータ後の変更

  • スカラ型による除算にenable_ifを使用するようにした(#6511)
  • フリー関数num_columns()num_rows()を追加(#7297)
  • assignment.hppの、リンケージ問題を修正(#6010)

Unordered

  • すごく基本的なnoexceptをサポートした

Utility

  • basic_string_ref::find()が、発見したかどうかを判定するために==ではなく=を使っていた問題を修正(#8067)
  • noncopyableのC++11版を作成(#6578)
  • noncopyableのDLLインタフェースを使用したときに発生する警告を修正(#6935)
  • SolarisStudioコンパイラで発生するboost::functionに対するboost::addressof()でのコンパイルエラーを修正(#7079)

Variant

  • Boost.TypeTraitsの、noexceptなコンストラクタと代入演算子を判定する新たなトレイトを使用するようにした。これによって、C++11のboost::variantは、多くの型に対してパフォーマンス向上する。(#8296)
  • multiple visitationを実装した(#8459)
  • C++11機能サポートに関するドキュメントの更新

Wave

  • Boost.waveをClangの -Wimplicit-fallthrough 診断に対応させた(#8478)

Xpressive

  • 未使用変数を削除(#8039)
  • glx.hのマクロNoneと名前が衝突していた問題を修正(#8204)
  • GCCの警告を黙らせた(#8138)

テスト済みコンパイラ

主要なテストコンパイラ:

  • Linux:
    • GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.3
    • GCC, C++98 mode: 4.7.3
    • GCC, C++11 mode: 4.7.2, 4.7.3, 4.8.0
    • Clang: 3.0, 3.1, 3.2
    • Clang, C++11 mode: 3.2
  • OS X:
    • GCC: 4.2
    • Apple Clang: 4.2.1
    • Apple Clang, C++11 mode: 4.2.1
  • Windows:
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
    • Visual C++: 8.0, 9.0, 10.0, 11.0
  • FreeBSD:
    • GCC: 4.2.1

追加して含まれるテストコンパイラ:

  • Linux:
    • Clang: 3.0, 3.1, 3.2, from Subversion
    • Clang, with libc++: 3.2
    • GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.2, 4.7.3
    • GCC, C++98 mode: 4.7.3
    • GCC, C++11 mode: 4.7.3, 4.8.0
  • OS X:
    • Apple Clang: 4.2.1
    • Apple Clang, C++11 mode: 4.2.1
    • Clang: from Subversion
    • Clang, C++11 mode: from Subversion
    • GCC: 4.2
  • Windows:
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
    • Visual C++: 9.0, 10.0, 11.0
    • Visual C++, Windows Mobile 5, with STLport: 9.0
  • AIX:
    • IBM XL C/C++ Enterprise Edition: 12.1.0.1
  • FreeBSD:
    • GCC: 4.2.1

翻訳

Akira Takahashi, zak