導航:首頁 > 編程語言 > 如何創造編程語言

如何創造編程語言

發布時間:2023-08-25 21:32:37

『壹』 怎麼研發一款編程語言

編程語言,作為人與計算機溝通的橋梁,有著重要和深遠的意義。有過計算機編程經驗的人,多少學習或掌握過一到多種編程語言。計算機專業領域的編程語言成百上千種,主流的編程語言也有數十種之多。每種編程語言面向的領域和特性都不盡相同,不過歸根結底是為了解決人與計算機之間溝通的效率問題,提高計算機的生產力。想必有不少人對那些主流編程語言的創造者十分傾佩,也相信有不少人會好奇一門編程語言是如何誕生的。那麼如何創造一門編程語言呢?
總的來看,創造一門編程語言需要有以下幾個過程:
(1)設計語言的特性。
(2)定義語言的單詞、語法和語義。
(3)實現編譯器或者解釋器將程序翻譯為計算機底層表示。
(4)生成計算機程序的二進制存儲格式。
(5)完善語言的運行時環境和標准庫。

一、語言特性設計
所謂語言特性,就是編程語言為開發者提供了什麼樣的原子性功能特徵。比如是否支持數學表達式計算、字元串處理,是否支持變數、函數和遞歸,是否支持分支、循環復合語句等。語言的變數類型是強類型、弱類型,還是動態類型,程序是過程式、函數式,還是面向對象的。是否支持模板、泛型和反射機制,是否支持多線程和並發特性,是否支持錯誤和異常處理機制等等。
語言特性設計是一門編程語言最關鍵的環節,直接決定了語言的基本特徵和雛形。當然,這也是最難的一個環節,因為語言設計是面向具體問題領域的,是語言設計者從大量的編程實踐中的獲得的總結和升華。比如C語言設計者希望面向計算機底層,擁有對操作系統和硬體的直接操縱能力。而Python的設計者則希望盡可能地減少操作計算機資源的繁瑣過程,以獲得語言的簡潔性、高度的靈活性和擴展性。SQL的設計者面向具體的數據查詢和分析領域,希望幫助開發者獲得快速檢索和操縱數據的能力。而Go語言的設計者則希望在保留C語言優秀功能的基礎上,擴展編程語言對高並發環境的支持,並擁有垃圾回收和快速編譯的能力。
凡此種種,編程語言特性的設計都是面向具體的問題領域的,是語言設計者構建於開發者和計算機之間的中間層,是對開發過程中重復功能邏輯的原子性「封裝」,最終的目的是為了提升具體問題領域內的軟體開發效率。

二、單詞、語法和語義
和人類使用的自然語言類似,編程語言也有自身的單詞、語法和語義,專業上稱為詞法記號、語言文法和語義。
常見的詞法記號可以分為數字、字元、字元串、標識符、關鍵字,以及用於連接表達式的運算符、分割語句或者程序段落的界符等符號。這些是編程語言程序的基本單位,通過它們的有序組合,構建出了一門編程語言形形色色的代碼片段。
編程語言的文法是用來描述語言的語法規則的,具體來說是規定詞法記號之間的排列組合的順序與規則。它描述了編程語言程序的基本模式,不符合該模式的詞法記號的排列被擋在了合法語言程序的大門之外。同時,它也是各種編程語言對於開發者最明顯的差異化特徵。一個有經驗的開發者可以很容易地通過掃視一段代碼,就能分辨出這是哪種編程語言編寫的計算機程序。
編程語言的語義描述了一段符合語言語法的程序,對於計算機而言的真正含義,是開發者最終要傳達給計算機的意願和指令。語言的語義必須是准確的、無二義性的,編譯器也正是通過語義的指導,將計算機程序翻譯為計算機可識別的表達形式。

三、程序的翻譯
計算機程序是用來供人閱讀和修改的,計算機硬體並不能理解程序內的思想和含義。因此,必須有一個翻譯轉換的過程,將人所表達的意願准確無誤地傳遞給計算機,讓計算機明確並執行人下發的指令。實現這種翻譯工作的工具就是編譯器或解釋器。
對於編譯器來說,它的輸入是人類書寫的計算機語言程序,輸出則是計算機可識別的底層表示。首先,它需要識別出程序中的單詞,即詞法分析。然後,根據單詞的組合模式識別出程序的語法結構,即語法分析。最後,根據不同的語法結構對應的語義,將程序按照每個語法模塊的形式轉換為計算機可識別的指令序列,即語義分析和目標代碼生成。
眾所周知編譯器的實現具有一定的復雜度,其根本原因來自於語言語法的結構靈活性和計算機底層表達形式的多樣性,這也是創造一門編程語言最核心的環節。

四、二進制存儲
編譯器將語言程序翻譯轉換後,需要將轉換後的結果存儲起來,以便計算機在需要的時候將其載入、執行。這里不可避免的涉及到兩個問題:
(1)轉換後的結果是什麼樣的形式?
(2)轉換後的結果保存在哪裡?
第一個問題描述的是計算機程序被轉換為怎樣的形式,才是計算機可以識別的。由於計算機中實際運行程序的硬體模塊是CPU,因此計算機程序只有被轉換為CPU的二進制指令格式才能被正確識別、執行。比如常見的Intel體系的CISC指令格式、ARM體系的RISC執行格式等。
第二個問題描述的是計算機程序轉化為二進制指令格式後,以什麼樣的方式保存在計算機的磁碟上。由於絕大多數的計算機程序是需要通過運行在計算機硬體之上的操作系統載入運行的,因此計算機程序的二進製表達形式必須以對應操作系統可識別的文件格式存儲。比如常見的Windows操作系統的PE文件格式、Linux操作系統的ELF文件格式等。

五、運行時環境和標准庫
理論上講,一門編程語言如果能提供出完備的操縱操作系統和硬體的原子性功能就已經成功了。但是不提供強大的運行時環境支持和標准庫,是很難讓一門編程語言真正的好用和流行的。沒有人希望簡單地列印一行字元串,還需要使用編程語言提供的基本特性實現調用操作系統提供的列印介面的邏輯。Java語言之所以久興不衰,正是因為它不僅提供了完善的運行時環境和開發庫支持,甚至提供了更強大的開發框架和工具支持。
因此可見,除了完備的語言特性,為開發者提供更方便好用的庫和框架支持,消除軟體構建過程中復雜和重復的邏輯,才是一門優秀編程語言的長盛之道。

六、自己動手,立即開始!
《自己動手構造編譯系統——編譯、匯編與鏈接》一書詳細闡述了一門編程語言從無到有的過程,從語言的功能特性設計,到詞法、文法、語義分析;從編譯器、匯編器的設計實現,到目標文件的鏈接生成可執行文件;甚至編譯優化器的實現、二進制指令、可執行文件格式以及語言運行時和標准庫的概念,都在書中做了認真細致地剖析。相信對本書的閱讀,將是一次不錯的獲得知識的體驗!

『貳』 C語言之初還有很多不統一的版本,沒有標准規范,另外還有幾個元老級比C語言還早的同行,怎麼創造語言

語言是依賴於編譯器的。當你寫出了一個全新的編譯器,你就發明了一種新的計算機語言。如果你想製作自己的編譯器判空,需要學習編譯原理(編譯原理我還沒學,沒法跟你講)這里簡單介紹一下這些語言是怎麼來的以及編譯器是如何工作的編譯器本身也是可執行文件,它的工作是遵循一定規則,將代碼轉化為二進制的可執行文件。如果一些編橡搭譯器遵循相同的轉化規則,那麼即使細節上有所不同,同樣的代碼也在這些編譯器上都能生成相同功能的可執行文件,這樣就可以說它們是使用同一種語言的編譯器。C標准就是這種規則的標准規范,也就是C語言的標准規范,可以方便代碼移植和交流。沒有C標準的時候,可能自己抄了別人的代碼,別人運行得好好的,結果自己這里一堆bug。最初的語言是機器語言,用二進制編寫,可以直接寫出可執行文件,不需要編譯器。後來因為機器語言太難記憶,太難閱讀,於是匯編語言被發明出來。匯編語言是將機器語言的指令換成一些容易辨識和記憶的符號的語言,匯編語言的編譯器是用機器語言寫的,稱為匯編器。匯編器工作是將那些符號替換成二進制的指令,於是就生成了可執行文件。最早的c語言編譯器是用匯編語言寫的,它將c語言代碼轉化為匯編代碼,再將匯編代碼轉化為可執行文件。後來的c語言編譯器都是用先前的c語言編譯器編寫的。後來的很多語言的編譯器也都是用c語言寫出來的。現在很少人直接使用編譯器,都是使用將寫代碼和編譯功能,以及其它功能集於一體的集成開發環境(IDE)如果你只是想簡單地替換一些符號,可以專門寫一個程序,用於將代碼文件的句號換成分號;進一步,可以集成文本編輯功能,在程序裡面寫完就轉化為c語言的代碼;更進一步,設置一個按鈕,鏈接編譯器,快捷地將轉化後的梁沖拿代碼編譯。你也可以使用EditPlus這樣的工具實現後兩個功能

『叄』 計算機語言是如何產生的

計算機語言的發展過程

1、機器語言

最初的計算機所使用的是由「0」和「1」組成的二進制數,二進制是計算機的語言的基礎。計算機發明之初,計算機只能被少部分人使用,人們需要用0、1組成的指令序列交由計算機執行,對於機器語言的使用與普及都是很令人頭疼的問題。對於程序的移植能力幾乎沒有,從而時間成本,人力成本十分昂貴。但機器語言也不是沒有優勢,由於這種語言是直接對計算機硬體進行操作,所以在特定型號的計算機上面,運算效率也是很高的,機器語言的出現對於未來的計算機語言發展起到了很好的推動作用,所以機器語言也是第一代計算機語言。

2、匯編語言

匯編語言是在機器語言的基礎上誕生的一門語言,用一些簡潔的英文字母、符號串來替代一個特定的指令的二進制串,這也提高了語言的記憶性和識別性。對於程序的開發與維護起到了積極作用。匯編語言同樣也是直接對硬體進行操作,這樣依然局限了它的移植性。但是使用匯編語言針對計算機特定硬體而編制的匯編語言程序,對於計算機硬體的功能和特長的發揮已有了很大進步,它精煉而質量高,所以至今仍是一種常用的程序開發語言。

3、高級語言

從最初與計算機交流的痛苦經歷中,人們意識到,應該設計一種這樣的語言,這種語言接近於數學語言或人的自然語言,同時又不依賴於計算機硬體,編出的程序能在所有機器上通用。經過努力,1954年,第一個完全脫離機器硬體的高級語言—FORTRAN問世了,40多年來,共有幾百種高級語言出現,有重要意義的有幾十種,影響較大、使用較普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C++、VC、VB、Delphi、JAVA等。高級語言的發展也經歷了從早期語言到結構化程序設計語言,從面向過程到非過程化程序語言的過程。相應地,軟體的開發也由最初的個體手工作坊式的封閉式?生產,發展為產業化、流水線式的工業化生產。

60年代中後期,軟體越來越多,規模越來越大,而軟體的生產基本上是人自為戰,缺乏科學規范的系統規劃與測試、評估標准,其惡果是大批耗費巨資建立起來的軟體系統,由於含有錯誤而無法使用,甚至帶來巨大損失,軟體給人的感覺是越來越不可靠,以致幾乎沒有不出錯的軟體。這一切,極大地震動了計算機界,史稱「軟體危機」。人們認識到:大型程序的編制不同於寫小程序,它應該是--項新的技術,應該像處理工程一樣處理軟體研製的全過程。程序的設計應易於保證正確性,也便於驗證正確性。1969年,提出了結構化程序設計方法,1970年,第一個結構化程序設計語言一Pascal語言出現,標志著結構化程序設計時期的開始。

80年代初開始,在軟體設計思想上,又產生了一次革命,其成果就是面向對象的程序設計。在此之前的高級語言,幾乎都是面向過程的,程序的執行是流水線似的,在一個模塊被執行完成前,人們不能幹千別的事,也無法動態地改變程序的執行方向。這和人們日常處;理事物的方式是不一致的,對人而言是希望發生一件事就處理一件事,也就是說,不能面向過程,而應是面向具體的應用功能,也就是對象(object)。其方法就是軟體的集成化,如同硬體的集成電路一樣,生產一些通用的、封裝緊密的功能模塊,稱之為軟體集成塊,它與具體應用無關,但能相互組合,完成具體的應用功能,同時又能重復使用。對使用者來說,只關心它的介面(輸入量、輸出量)及能實現的功能,至於如何實現的,那是它內部的事,使用者完全不用關心,C++、VB、Delphi就是典型代表。高級語言的下一個發展目標是面向應用,也就是說:只需要告訴程序你要干什麼,程序就能自動生成演算法,自動進行處理,這就是非過程化的程序語言。

『肆』 如何自創一門編程語言

從你的描述來看,自指姿創一門編程語言是非常困難的。現在的編程語言都是幾十年前研究櫻斗人員做出來的,他們為編程語言做出了很大的貢獻。
如果自創一門編程語言的話,幾乎是不可能的,就算一個國家,集一脊逗磨國之力也很難做出來。

『伍』 新手如何學習編程

熟悉以下關鍵東西,可以邊學邊做,定期訓練,經常思考,長期積累:

1、語法。

2、基礎理論(數學、數據結構、演算法等)。

3、設計方法(編程原則、設計模式、框架設計等)。

4、庫(核心、基礎、UI、擴展、游戲引擎等)。

5、計算機相關(操作系統、網路、圖形學等)。

6、領域知識(游戲設計、網站設計等)。

7、開發工具(編輯器、IDE、自動部署等)。

8、項目管理(進度管理、分工協作、Bug管理、版本控制等)。

最普遍也是最重要的能力:創造力。努力分析並理解好做什麼以及怎麼做。要知道上面那些東西一開始都是不存在的。

具體方法包括:

1、快速閱讀入門教程和書籍,適合學習語言和基礎庫。比如我學Java讀的《Java編程思想》,練習題做過一點,然後學ActionScript就沒讀過書,只讀過Adobe官方文檔《ActionScript 3.0編程》。

2、閱讀庫的文檔、實例、源碼。比如Flash、Flex開發,熟悉官方API很重要,很多細節要具體使用時才注意到,這時候最好做個筆記,雖然我從沒看過我的筆記。

3、做一個自己感興趣或熟悉的小項目,比如我就以黑白棋游戲作為多個語言的試水項目,一樣的邏輯,便於把關注點放在語言特點上。

4、自己動手豐衣足食。廚師有菜譜,程序員可沒菜譜。比如我做游戲,最關鍵的游戲編程知識全部是動手學出來的,很少有專門針對某個業務領域(如游戲)的編程書籍,要麼是入門書,要麼是模式書(如演算法)、理論書(圖形學),很少有書籍教你如何開發一個45度角地圖系統加編輯器的,全靠自己思考,以及看前人的代碼,需要時找些網路資料。關鍵是,可以培養最重要的創造力。

對於演算法和設計模式,可以研讀下,但是關鍵還是靠平時如何使用了。新手勉強不來的。

項目管理方面的,就得靠工作經驗了,多思考多提意見不要只走流程。

閱讀全文

與如何創造編程語言相關的資料

熱點內容
如何在伺服器上配置外網網址 瀏覽:838
阿里雲伺服器的硬體在哪裡 瀏覽:52
python自動注冊谷歌 瀏覽:329
phpini驗證碼 瀏覽:824
解壓後的文件怎麼驅動 瀏覽:326
老闆要程序員加班 瀏覽:414
泰爾pdf 瀏覽:311
視頻轉碼壓縮哪款軟體好 瀏覽:647
盯盯拍記錄儀下載什麼app 瀏覽:436
新東方新概念英語pdf 瀏覽:696
python中如何創建菜單欄 瀏覽:507
中石化app那個叫什麼名 瀏覽:706
借貸寶合集解壓密碼 瀏覽:640
python爬取網頁代碼 瀏覽:480
efs加密對微信無效 瀏覽:496
劉秀pdf 瀏覽:998
腳上長黑刺是什麼app 瀏覽:703
演算法工程師上海 瀏覽:390
php的循環語句怎麼寫 瀏覽:289
畫聖誕樹用什麼軟體python 瀏覽:452