1. 程式人生 > >如何創建編程語言,以及設計決策中的內容?

如何創建編程語言,以及設計決策中的內容?

data follow .org 規範 什麽是 努力 說明 lin 硬件

回答這個問題時要考慮的第一件事是:什麽是編程語言?如果你問維基百科這個問題,你會發現一種編程語言

是一種形式語言,它包含一組產生各種輸出的指令

這當然是正確的,但在真正的百科全書形式中也幾乎沒有幫助。它確實給出了正確的想法。只需寫下一些說明和一些規則來表達他們的所作所為,並且你已經創建了一種編程語言。如果你使用稍微有點花哨的語言寫下這些規則,你會稱之為你的語言規範,並且聲稱已經創建了一種編程語言。

當然,在大多數情況下,編程語言不是從規範編寫中的練習開始的。相反,一個程序開始於一個實際上用編程語言做某事的程序。一般來說,這將是一個程序,它讀入一些用編程語言編寫的代碼,然後執行代碼所說的內容(一個“解釋器” - 思考一步一步的配方)或一個翻譯實際硬件理解的位序列的源代碼(盡管這個1和0的字符串也可以被認為是硬件然後解釋的編程語言)。有一些更奇特的程序可以編寫實現編程語言(例如類型檢查器,只檢查源代碼是否格式正確,即語言規則允許,但是不要執行它)和編譯器和解釋器的各種變化(混合系統,編譯器到“虛擬硬件”,即設計為易於映射到實際硬件的低級語言,編譯器從一種高級編程語言到另一個,也就是“發布者”),但關鍵是這些程序以某種方式“理解”語言。如果有的話,規範通常會在以後出現。

現在,假設您已經開始使用自己的編程語言,那麽如何確定語言應該是什麽 - 可用的指令是什麽,語言的規則和語法是什麽,各種事物的語義是什麽,等等。做出這些決定時需要考慮很多事項:它如何與系統的其他部分一起工作?它是自洽的嗎?對用戶有意義嗎?通過查看代碼,用戶是否能夠猜出發生了什麽?我們是否能夠有效地讓硬件完成語言應該做的事情?在某些地方是否有先例,例如在數學或其他編程語言中設定用戶對事物應如何工作的期望?如果是這樣,我們偏離了這種期望,是否有充分的理由[1]?如果我們做了不同或意外的事情,我們應該提供兩者還是應該至少添加一些內容以確保用戶期望遺留行為能夠輕松找出遺留行為等等?

最後,在你做出的每一個決定中,你需要考慮兩件事:

1)必須運行它的計算機和

2)必須閱讀它的人。

兩者都非常重要,但當然它們之間需要進行權衡,語言在這個範圍內有所不同。在朱莉婭,我們非常努力地使兩者都能很好地理解一個程序(這實際上是朱莉婭的原始動機之一)。這並不容易,並且有時需要進行硬交換(例如,檢查所有算術運算的溢出會很好,但默認情況下在當前一代機器上執行此操作太慢),但我們會盡力確保a)我們默認做出合理的選擇b)每當我們在任何一個方向進行權衡時,都有辦法讓用戶做出相反的選擇,同時能夠毫無困難地使用系統的其余部分。Julia的多重調度系統對於完成這項工作至關重要(盡管其細節是一個完全獨立的主題)。

例如,我們有一個通常拼寫出名稱而不是使用簡短縮寫的政策,所以你可能會認為“正弦”和“余弦”的名字比“罪”和“cos”更一致,但是你要對抗100多年的數學符號。另一方面,很多語言都喜歡使用“+”來連接字符串。但是,我們認為這是一個嚴重的錯誤,因為+是面向交換的,字符串連接不是,這就是我們使用“*”作為字符串連接運算符的原因。

如何創建編程語言,以及設計決策中的內容?