Ada 202x (7日目) - Ada.Streams.Storage

脈絡のない休憩寄り道回。

経緯

Adaではストリームは何らかの形で Ada.Streams.Root_Stream_Type を実装した型です。 標準ライブラリでは Ada.Streams.Stream_IO.File_TypeAda.Text_IO.File_Type の2つが該当します。

……。

足りないですよね。

パイプは? ソケットは? そうしたOSの機能へのインターフェースも足りません、しかし、それ以前の問題として。

まず最初にメモリ上のバッファーへのストリームアクセスが欲しいじゃないですか。 ちょっとしたテストを書くにも一々テンポラリファイルに書き出すか、自前でストリームを実装しろってことですか。

C言語ですら、標準ライブラリでこそありませんがPOSIXの fmemopenopen_memstream が幅広い環境で実装されています。

今までどうしていたか

Adaの標準ライブラリにある全ての File_TypeCreate に名前を渡さないとテンポラリファイルを使う仕様になってまして、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

所感

やっとかー、という感想です。

ユーザー定義 'ImageStringBuffer は後日の休憩回ネタということで。