Ada 202x (7日目) - Ada.Streams.Storage¶
脈絡のない休憩寄り道回。
経緯¶
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¶
Ada.Streams.Storage.Bounded¶
Ada.Streams.Storage.Unbounded¶
使い方は自明ですので説明いらないですよね。 (休憩回。)
議論の過程¶
元々は '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
は後日の休憩回ネタということで。