4

Wikipidea說,Perl有一個佔優勢的實現,用作其規範的參考,而C語言由標準ANSI ISO指定。C語言語義規範

我學會了C語言而沒有閱讀標準的單行,是否正常......?

我想知道標準(即自然語言文檔)如何能夠描述編程語言而不用提及任何顯性實現。

+0

謝謝大家的回答! – user591931 2011-03-05 13:04:22

回答

7

找到從規範中學習編程語言的人是非常罕見的。該規範主要針對編譯器作者(爲了保證正確性,他們需要逐字遵守),並作爲語言中合法內容的最終仲裁者。大多數語言規格都非常密集且技術性強,並且不是學習用語言編程的好方法。通常,只有非常高級的語言用戶纔會閱讀該規範。

另外,根據參考實現定義的語言很少。大多數語言都是相對於某個抽象執行環境定義的。例如,C++規範說

本國際標準中的語義描述定義了一個參數化的非確定性抽象機器。本國際標準沒有要求符合實施的結構。特別是,他們不需要複製或模擬抽象機器的結構。相反,需要符合實現來模擬(僅)抽象機器的可觀察行爲,如下所述。

換句話說,C++規範描述了C++程序如何表現純粹理論意義上的行爲。這使得規範作者在定義語言方面有很大的餘地。例如,他們可以談論「對象」和「指針」,而不必說明他們實際上如何實施。他們甚至不需要說C++的物理機器是如何工作的,因爲他們可以定義機器的行爲,然後將其留給實際的編譯器編寫者來將該抽象機器轉換到物理機器上。

有些語言是針對虛擬機而定義的(一個很好的例子就是Java)。他們可以通過說明Java程序如何與虛擬機進行交互,然後將虛擬機實施的細節留給虛擬機實施者來討論Java程序相對於該虛擬機的行爲。

其他一些語言,如ML,具有純數學的定義。語言的語義被描述爲狀態之間的抽象數學轉換,這意味着如果語言是相對於參考編譯器定義的,則可以證明ML不易顯示的ML的屬性。

總結 - 語言規範是很少有程序員真正閱讀的複雜文檔。它們主要針對編譯器作者,並且通常以一些抽象術語來定義程序,而不考慮計算機。這樣,可以用便攜的方式定義語言,因爲只需將正式描述轉換爲機器操作即可在任何機器上進行一致性實施。

希望這會有所幫助!

5

大多數編程語言都是在沒有閱讀標準或語言參考/設計文檔(如果存在)的情況下學習的。

標準可以是specified formally - 以一種非常嚴格的方式,可以在數學上證明爲Turing complete

3

學習C(以及類似定義的語言,如C++)而不讀標準是完全正常的。

標準文檔的語言通常被描述爲故意迂腐,針對編譯器作者而不是程序員,並設計爲權威性而非可訪問性。

從一步刪除的源碼(例如面向程序員的書籍)學習語言要容易得多。當然,作者應該根據標準檢查他描述的是否正確。

一些人聲稱有這個標準可用於解決一些問題。我沒有嘗試過,除了一些通常沒有通過正式標準化系統的免費「語言報告」文檔(因此可能更容易訪問,也更少迂腐)。

大多數情況下,如果您有與標準相關的問題,最好在這裏搜索答案(如果失敗,請問)。

1

我想知道標準(即自然語言文檔)是如何能夠描述編程語言而不涉及任何顯性實現的。

這就是我學習SQL的方式。我學到了標準的一個。不好的一面是,每當我使用不同的DBMS時,我都必須瞭解它的SQL風格的差異。幸運的是,SQL中最常見的部分似乎在任何地方都是一樣的。

我想知道標準(即自然語言文檔)如何能夠描述編程語言而不用提及任何主要的實現。

一個好的標準並不是真正的另一個自然語言文檔 - 它是一個相當正式的文檔。你會認爲法律只是一個自然語言文件嗎?

我學會了C語言而沒有閱讀單行標準,那是正常的嗎?

是的。呃...是的,如果你真的想編碼任何東西。