10

データ構造の形式とセマンティクスを任意に記述するための宣言型言語が存在するかどうか疑問に思っています。これは、ターゲット言語のセットのいずれかでその構造の特定の実装にコンパイルできます。つまり、一般的なデータ定義言語のようなものですが、ベクトル、リスト、ツリーなどの任意のデータ構造と、それらの構造に対する操作のセマンティクスを記述することを目的としています。私はこの概念の実行可能な実装のアイデアを持っていたので、それが価値があるかどうか、したがって以前にそれが行われたかどうか疑問に思っている.

別のもう少し抽象的な質問: データ構造の規範的な仕様 (それが何をするか) とその実装 (どのようにそれを行うか) の間に実際の違いはありますか? より具体的には、同じ要件の個別の実装を異なる構造と見なす必要がありますか?

4

4 に答える 4

3

気になったら、XMLとXSLTの組み合わせでデータ構造を記述し、必要に応じて基本的に任意の言語で一致する定義を提供できます。私はそれを正式に証明しようとしたことはありませんが、最初の推測では、S式はXMLのスーパーセットです(モジュロ構文の違い)。

少なくとも理論的には、そうです、データ構造が行うことの説明とそれがどのように行うかについての説明には違いがあります(または少なくともそうなる可能性があります)。明らかな例として、キーから値への一般的なマッピングを記述できます。これには、ハッシュテーブル、スキップリスト、バイナリ検索ツリーなどに基づく実装を使用できます。これは、ほとんどの場合、十分に高いレベルの抽象化で記述できるかどうかの問題です。実装の違いを許可します。あまりにも多くの要件(複雑さ、順序など)を含めると、多くの実装をすぐに除外できます。

于 2010-04-03T03:40:03.550 に答える
3

Google のプロトコル バッファや ASN.1 などのメッセージング仕様/データ シリアル化言語に関心があるかもしれません。探しているものとは少し異なる傾斜ですが、同じ流れです。

どちらも、通信用の汎用メッセージを宣言する方法です。プロトコル バッファ メッセージ仕様はさまざまな言語に「コンパイル」されますが、中央のプロトコルは一貫しています。ASN.1 には、複数の異なるコンパイル ユーティリティと、さまざまなリテラル実装との論理的な一貫性を保つさまざまなプロトコル表現があります。たとえば、XER、PER 対 BER を見てください。

論理メモリ構造に対する単純なパック バイナリ レイアウトだけに焦点を当てた仕様言語があればいいのにと思います。単純な C 構造体は、これを表現する最も単純な一般的な方法かもしれません。私は ASN.1 がそれ​​に到達する何らかの方法を持っていることを望んでいましたが、少し見てみると、ASN.1 PER は近いですが、完全ではありません。

編集: Apache ThriftCapn' Protoも興味深いかもしれません。

于 2010-05-26T04:10:30.907 に答える
2

プログラムのセマンティクスを捉えようとする動的ロジックには、そのようなアプローチがあります。ただし、動的ロジックに関する意味は、事前条件と事後条件に関するものであり、リストの実際の実装に関しては不可知論的です。

これらのデータ構造は本質的に実装に関連付けられています。リンクされたリストと配列の唯一の違いは、具体的にはメモリ内でのレイアウト方法です。

このために、これを指定する一般的なデータ定義言語 (C、C++、Java) などの高水準プログラミング言語があります。このコンテキスト内では、それらのいずれかが他のものにコンパイルされる可能性があるため、それらのいずれも他のものと同じくらい一般的です。

于 2010-04-03T03:26:43.187 に答える