2010-04-03 154 views
6

我想知道是否存在任何用於任意描述數據結構的格式和語義的聲明性語言,可以將這些語言編譯爲任何一組目標語言的特定實現。也就是說,類似於通用的data definition language,但適用於描述任意數據結構,如向量,列表,樹等,以及這些結構上操作的語義。我問,因爲我有一個可行的實施這個概念的想法,我只是想知道它是否值得,因此,之前是否做過。通用數據結構描述語言

另一個稍微抽象的問題是:數據結構的標準規範(它所做的)和它的實現(它是如何實現的)之間是否有真正的區別?更具體地說,應該分開執行的相同要求被認爲是不同的結構

回答

2

如果您覺得這樣,XML和XSLT的組合可以描述數據結構,並根據您的選擇提供基本上任何語言的匹配定義。我從來沒有嘗試過正式地證明它,但我的第一個猜測是S表達式是XML的超集(模的語法差異)。

至少在理論上,對於數據結構的描述以及它是如何進行的描述之間存在(或至少是)差異。舉一個明顯的例子,你可以描述一個從鍵到值的通用映射,它可以使用基於哈希表,跳過列表,二叉查找樹等的實現。它主要是一個描述它的抽象級別足夠高的問題,以允許實施中的差異。如果您包含太多需求(複雜性,排序等),您可以很快排除許多實現。

+0

XSLT確實是一種有趣的方法。我會研究一下。我不是故意問是否可以針對相同的需求有不同的實現方式;我的意思是詢問是否應將相同需求的兩種不同實現視爲不同的數據結構。這影響了w.r.t.這個元語言可以而且應該如何聲明。 – 2010-04-03 04:34:40

2

在動態邏輯中有這種類型的方法,它試圖捕獲程序的語義。然而,就動態邏輯而言,其意義在於前提條件和後置條件,並且對於列表的實際實施是不可知的。

這些數據結構與實現有着內在的聯繫,因爲鏈表和數組之間的唯一區別在於它如何在內存中進行佈局。爲此,有一個通用數據定義語言 - 任何高級編程語言 - C,C++,Java - 指定這一點。它們中的任何一個都與另一個一樣通用,因爲在這種情況下,它們中的任何一個都可以編譯到另一個。

+0

感謝您的幫助。我不同意你的觀點是,任何高級語言都構成一種真正通用的數據定義語言,因爲即使邏輯細節相同,語言實現細節也必然會有所不同。 – 2010-04-03 03:29:46

+1

鏈接列表和數組公開了不同的操作/接口。具體而言,一個數組公開了一種隨機訪問的手段,但是一個鏈表不會。 – 2010-04-03 03:33:09

3

您可能對郵件規範/數據序列化語言感興趣,例如Google的協議緩衝區以及ASN.1。這是一個稍微不同於你尋找的傾斜,但同樣的脈絡。

這兩種都是聲明通信通用消息的方式。協議緩衝消息規範「編譯」爲不同的語言,但中央協議是一致的。 ASN.1具有多種不同的編譯實用程序以及不同的協議表示,它們在邏輯上與不同的文字實現保持一致。以XER,PER和BER爲例。

我很喜歡一種規範語言,只關注簡單的打包二進制佈局與邏輯內存結構。它可能是普通的C語言結構是表達這種最簡單的常見方式。我希望ASN.1有​​一些辦法可以達到這個目的,但在看了一下之後,ASN.1 PER很接近,但並不完全。

編輯:Apache ThriftCapn' Proto也可能是有趣的。