Ada 202x (7日目) - Ada.Streams.Storage ======================================= .. post:: Dec 07, 2019 :tags: ada, ada_2022 脈絡のない休憩寄り道回。 経緯 ---- Adaではストリームは何らかの形で ``Ada.Streams.Root_Stream_Type`` を実装した型です。 標準ライブラリでは ``Ada.Streams.Stream_IO.File_Type`` と ``Ada.Text_IO.File_Type`` の2つが該当します。 ……。 足りないですよね。 パイプは? ソケットは? そうしたOSの機能へのインターフェースも足りません、しかし、それ以前の問題として。 まず最初にメモリ上のバッファーへのストリームアクセスが欲しいじゃないですか。 ちょっとしたテストを書くにも一々テンポラリファイルに書き出すか、自前でストリームを実装しろってことですか。 C言語ですら、標準ライブラリでこそありませんがPOSIXの ``fmemopen`` や ``open_memstream`` が幅広い環境で実装されています。 今までどうしていたか -------------------- Adaの標準ライブラリにある全ての ``File_Type`` は ``Create`` に名前を渡さないとテンポラリファイルを使う仕様になってまして、ACATS等のテストでは便利に活用されていました。 Ada 202xでの改善 ---------------- 追加されました。 Ada.Streams.Storage +++++++++++++++++++ | http://www.ada-auth.org/standards/2xrm/html/RM-13-13-1.html#p12 Ada.Streams.Storage.Bounded +++++++++++++++++++++++++++ | http://www.ada-auth.org/standards/2xrm/html/RM-13-13-1.html#p26 Ada.Streams.Storage.Unbounded +++++++++++++++++++++++++++++ | http://www.ada-auth.org/standards/2xrm/html/RM-13-13-1.html#p18 使い方は自明ですので説明いらないですよね。 (休憩回。) 議論の過程 ---------- 元々は ``'Image`` をユーザー定義できるようにするAIの中で、文字列を書き出す先として追加されたものです。 ストリームは文字列ではなくバイナリを扱うものですので、結果としてメモリ上で文字列を組み立てるJavaやC#の ``StringBuffer`` 的なライブラリも追加されて ``'Image`` はそちらを使う形で決着しました。 それでも ``Ada.Streams.Storage`` 自体は残されました。 提案時は ``Ada.Streams.FIFO_Streams`` で後から ``Ada.Streams.Storage`` に変更されたため、現時点でのドラフト版RMでは ``FIFO_Streams`` の名前が残っている箇所があります。 関連AI ------ - `AI12-0293-1`_ **Add predefined FIFO_Streams packages** - `AI12-0329-1`_ **Naming of FIFO_Streams packages** 所感 ---- やっとかー、という感想です。 ユーザー定義 ``'Image`` と ``StringBuffer`` は後日の休憩回ネタということで。 .. _`AI12-0293-1`: http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0293-1.txt .. _`AI12-0329-1`: http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0329-1.txt