❶ 當下熱度最高的編程語言Python究竟是怎樣誕生的
Python誕生與發展Python作為當下大火的一門編程語言,深受眾多程序員的喜愛,而追溯其發展始末還得從上世紀說起。Python是Guido Van Rossum (荷蘭人吉多·范羅蘇姆)於1989年開發推出。而開發這一編程語言背後還有個不為人知的小故事。1989年聖誕節期間,在阿姆斯特丹的吉多深感無聊與苦悶,作為一名資深的編程愛好者他決定開發一個新的腳本解釋程序,作為編程界慣用的ABC語言的一種繼承。
Python因其奉行極簡主義,易於讀寫受眾多人青睞。更令人稱道的是Python作為一種開源軟體不用花一分錢就能夠實現編輯,同時Python兼容多平台,學習強度相對於其他編程語言而言是普遍公認的簡單,在實際生活的各個領域均得到了廣泛的應用。
❷ 請問編程語言怎麼產生的
編程語言(programming language),是用來定義計算機程序的形式語言。它是一種被標准化的交流技巧,用來向計算機發出指令。一種計算機語言讓程序員能夠准確地定義計算機所需要使用的數據,並精確地定義在不同情況下所應當採取的行動。
最早的編程語言是在電腦發明之後產生的,當時是用來控制提花織布機及自動演奏鋼琴的動作。在電腦領域已發明了上千不同的編程語言,而且每年仍有新的編程語言誕生。很多編程語言需要用指令方式說明計算的程序,而有些編程語言則屬於聲明式編程,說明需要的結果,而不說明如何計算。
編程語言的描述一般可以分為語法及語義。語法是說明編程語言中,哪些符號或文字的組合方式是正確的,語義則是對於編程的解釋。有些語言是用規格文件定義,例如C語言的規格文件也是ISO標准中一部份,2011年後的版本為ISO/IEC 9899:2011,而其他語言(像Perl)有一份主要的編程語言實現文件,視為是參考實現。
編程語言俗稱「計算機語言」,種類非常的多,總的來說可以分成機器語言、匯編語言、高級語言三大類。電腦每做的一次動作,一個步驟,都是按照已經用計算機語言編好的程序來執行的,程序是計算機要執行的指令的集合,而程序全部都是用我們所掌握的語言來編寫的。所以人們要控制計算機一定要通過計算機語言向計算機發出命令。 目前通用的編程語言有兩種形式:匯編語言和高級語言。
❸ 編程語言是如何創建的
因為有解釋器啊,編譯型的語言一般都被轉化成底層的機械碼了。要想自己開發語言完全是沒問題的。至於看什麼《編譯原理基礎》感覺價值不大,能真正看懂的人太少了。還不如直接找個開源的程序語言研究一下。至少改個語法應該沒問題。
❹ 計算機語言是如何開發出來的
計算機語言是「設計」出來的,設計只需要思考和寫文檔,而該語言的編譯器才是「開發」出來的。編譯器也是程序,所以也需要用編程語言來編寫,至於用什麼語言就隨開發者的便了。很多編程語言是用別的更基礎的語言開發的,其中用最多的就是C語言。C語言編譯器很多,大部分都是用別的C語言編譯器編譯出來的,而最早的C語言編譯器是用匯編語言寫出來的,最早的匯編語言編譯器是通過「編譯器自舉」開發出來的。
相關回答
一個很深奧的問題
一、新建項目 啟動Microsoft Visual Studio 。NET,新建一個C#項目MyApp,本例工程存放於F:\Csharp\MyApp。 二、添加控制項 在Form1 窗體上添加三個控制項(見圖1):主菜單MainMenu、標簽Label1和按鈕Button1。
Label1和Button1控制項的屬性均採用預設設置。MainMenu控制項中添加三個菜單項menuItem1、menuItem2、menuItem3。Text屬性分別設為「語言」、「中文」和「English」。
menuItem2、 menuItem3 的RadioCheck屬性設為True。 圖 1 三、創建配置文件 在項目中添加一個文本文件 i,保存當前程序的語言版本設置。該文件中只有一行內容。
如果是「English」,則表示程序為英文版;如果是「Chinese」則為中文版。這里暫且保存為「English」。 四、創建資源文件 。NET中的資源文件有三種: 文本(。txt )文件、XML 格式的。
❺ 像c++這樣的編程語言是怎麼創造出來的
編程語言的發展是隨著硬體一起發展的,最初沒有當前成熟的101鍵盤前,技術人員是無法用字母輸入命令和語句的,顯然也不存在任何高級語言的。
機械計算機我就不談了,太遙遠,第一台電子計算機是ENIAC是1946年製造的,開始用的是連接線,後來用的是打孔機,以紙帶作為輸入,一根紙帶邊上是齒孔用於步進電機帶動紙帶,類似現在的針式列印機的紙張,當然紙帶比針式列印機紙張窄,編程人員事先寫好二進制指令的編碼和數據,逐一在紙帶上打孔,比如一個指令和數據是8位,如果是1,則打一個孔,如果是0則不打孔,打完一個位元組讓步進電機進一格,打後面一個數據。所有程序代碼和數據打完,將紙帶裝到計算機的讀入設備中並逐一讀入並運行,當時還沒有存儲器,所以執行完如果需要再運算一遍,要復位重新裝紙帶。當然如果程序要改寫就得重新打一卷紙帶。
這就是電子計算機最原始的編程(機械計算機則還要麻煩),後來有了存儲器,還是用紙帶輸入程序,然後可以重復運算,因為輸入的指令和數據都存入存儲器了,不需要再跑一遍(真正意義的跑)。此時程序員編寫的程序都是機器語言,形式就是二進制碼
類似這樣
01010100
11001101
01101010
...
後來人們覺得這樣很麻煩,考慮到一種CPU的指令都是固定,如果有一種簡單容易能幫助記憶符號來代替一串二進制就方便多了,因此設計出了匯編語言,因此匯編指令稱為助記符,比如MOV,ADD,JMP等等。這時候就需要一種新的輸入設備代替打孔機,而且能直接連接在計算機上,之後隨著晶體管的發展,單片機出現,一個按鈕代表一個指令,同時結合數碼鍵(0-9,A-F)輸入16進制數據,讓設備轉成二進制數據,這應該算最早的編譯器了,屬於硬體編譯器。
再之後,人們發現計算機不僅可以處理數據,還可以處理文本,因此有了ASC碼,ASC碼也發展了好幾代,既然可以處理文本,隨著計算機設備的發展,把打字機鍵盤復制過來,擴展單片機的按鈕,這樣計算機鍵盤的雛形出現了,取消了專用匯編指令鍵,而改用程序來翻譯輸入的文本,比如單個匯編指令MOV改用鍵盤輸入這三個字母的文本,由翻譯程序翻譯成二級制碼,這應該是最早的源代碼了,而這個翻譯程序最先當然還是用單片機開發的,而這個翻譯程序就是最早的匯編指令編譯器了。
有了匯編指令編譯器,人們可以直接通過鍵盤輸入匯編指令,由編譯器編譯成二級制碼執行程序,有了匯編編譯器,人們不僅直接用於各種科研運算,而且開發了更高級的語言了,那麼後來各種語言蓬勃發展起來了,在C語言前還有A,B,以及其他高級語言陸續出現,比如1954年的Fortran。
所以你可以看到,技術都是迭代發展的,你只要學習到足夠的知識,可以用任何語言開發你的編譯器,當然這可是件不簡單的任務,同時,所開發的編譯器受你所用的語言限制。
❻ 怎麼研發一款編程語言
編程語言,作為人與計算機溝通的橋梁,有著重要和深遠的意義。有過計算機編程經驗的人,多少學習或掌握過一到多種編程語言。計算機專業領域的編程語言成百上千種,主流的編程語言也有數十種之多。每種編程語言面向的領域和特性都不盡相同,不過歸根結底是為了解決人與計算機之間溝通的效率問題,提高計算機的生產力。想必有不少人對那些主流編程語言的創造者十分傾佩,也相信有不少人會好奇一門編程語言是如何誕生的。那麼如何創造一門編程語言呢?
總的來看,創造一門編程語言需要有以下幾個過程:
(1)設計語言的特性。
(2)定義語言的單詞、語法和語義。
(3)實現編譯器或者解釋器將程序翻譯為計算機底層表示。
(4)生成計算機程序的二進制存儲格式。
(5)完善語言的運行時環境和標准庫。
一、語言特性設計
所謂語言特性,就是編程語言為開發者提供了什麼樣的原子性功能特徵。比如是否支持數學表達式計算、字元串處理,是否支持變數、函數和遞歸,是否支持分支、循環復合語句等。語言的變數類型是強類型、弱類型,還是動態類型,程序是過程式、函數式,還是面向對象的。是否支持模板、泛型和反射機制,是否支持多線程和並發特性,是否支持錯誤和異常處理機制等等。
語言特性設計是一門編程語言最關鍵的環節,直接決定了語言的基本特徵和雛形。當然,這也是最難的一個環節,因為語言設計是面向具體問題領域的,是語言設計者從大量的編程實踐中的獲得的總結和升華。比如C語言設計者希望面向計算機底層,擁有對操作系統和硬體的直接操縱能力。而Python的設計者則希望盡可能地減少操作計算機資源的繁瑣過程,以獲得語言的簡潔性、高度的靈活性和擴展性。SQL的設計者面向具體的數據查詢和分析領域,希望幫助開發者獲得快速檢索和操縱數據的能力。而Go語言的設計者則希望在保留C語言優秀功能的基礎上,擴展編程語言對高並發環境的支持,並擁有垃圾回收和快速編譯的能力。
凡此種種,編程語言特性的設計都是面向具體的問題領域的,是語言設計者構建於開發者和計算機之間的中間層,是對開發過程中重復功能邏輯的原子性「封裝」,最終的目的是為了提升具體問題領域內的軟體開發效率。
二、單詞、語法和語義
和人類使用的自然語言類似,編程語言也有自身的單詞、語法和語義,專業上稱為詞法記號、語言文法和語義。
常見的詞法記號可以分為數字、字元、字元串、標識符、關鍵字,以及用於連接表達式的運算符、分割語句或者程序段落的界符等符號。這些是編程語言程序的基本單位,通過它們的有序組合,構建出了一門編程語言形形色色的代碼片段。
編程語言的文法是用來描述語言的語法規則的,具體來說是規定詞法記號之間的排列組合的順序與規則。它描述了編程語言程序的基本模式,不符合該模式的詞法記號的排列被擋在了合法語言程序的大門之外。同時,它也是各種編程語言對於開發者最明顯的差異化特徵。一個有經驗的開發者可以很容易地通過掃視一段代碼,就能分辨出這是哪種編程語言編寫的計算機程序。
編程語言的語義描述了一段符合語言語法的程序,對於計算機而言的真正含義,是開發者最終要傳達給計算機的意願和指令。語言的語義必須是准確的、無二義性的,編譯器也正是通過語義的指導,將計算機程序翻譯為計算機可識別的表達形式。
三、程序的翻譯
計算機程序是用來供人閱讀和修改的,計算機硬體並不能理解程序內的思想和含義。因此,必須有一個翻譯轉換的過程,將人所表達的意願准確無誤地傳遞給計算機,讓計算機明確並執行人下發的指令。實現這種翻譯工作的工具就是編譯器或解釋器。
對於編譯器來說,它的輸入是人類書寫的計算機語言程序,輸出則是計算機可識別的底層表示。首先,它需要識別出程序中的單詞,即詞法分析。然後,根據單詞的組合模式識別出程序的語法結構,即語法分析。最後,根據不同的語法結構對應的語義,將程序按照每個語法模塊的形式轉換為計算機可識別的指令序列,即語義分析和目標代碼生成。
眾所周知編譯器的實現具有一定的復雜度,其根本原因來自於語言語法的結構靈活性和計算機底層表達形式的多樣性,這也是創造一門編程語言最核心的環節。
四、二進制存儲
編譯器將語言程序翻譯轉換後,需要將轉換後的結果存儲起來,以便計算機在需要的時候將其載入、執行。這里不可避免的涉及到兩個問題:
(1)轉換後的結果是什麼樣的形式?
(2)轉換後的結果保存在哪裡?
第一個問題描述的是計算機程序被轉換為怎樣的形式,才是計算機可以識別的。由於計算機中實際運行程序的硬體模塊是CPU,因此計算機程序只有被轉換為CPU的二進制指令格式才能被正確識別、執行。比如常見的Intel體系的CISC指令格式、ARM體系的RISC執行格式等。
第二個問題描述的是計算機程序轉化為二進制指令格式後,以什麼樣的方式保存在計算機的磁碟上。由於絕大多數的計算機程序是需要通過運行在計算機硬體之上的操作系統載入運行的,因此計算機程序的二進製表達形式必須以對應操作系統可識別的文件格式存儲。比如常見的Windows操作系統的PE文件格式、Linux操作系統的ELF文件格式等。
五、運行時環境和標准庫
理論上講,一門編程語言如果能提供出完備的操縱操作系統和硬體的原子性功能就已經成功了。但是不提供強大的運行時環境支持和標准庫,是很難讓一門編程語言真正的好用和流行的。沒有人希望簡單地列印一行字元串,還需要使用編程語言提供的基本特性實現調用操作系統提供的列印介面的邏輯。Java語言之所以久興不衰,正是因為它不僅提供了完善的運行時環境和開發庫支持,甚至提供了更強大的開發框架和工具支持。
因此可見,除了完備的語言特性,為開發者提供更方便好用的庫和框架支持,消除軟體構建過程中復雜和重復的邏輯,才是一門優秀編程語言的長盛之道。
六、自己動手,立即開始!
《自己動手構造編譯系統——編譯、匯編與鏈接》一書詳細闡述了一門編程語言從無到有的過程,從語言的功能特性設計,到詞法、文法、語義分析;從編譯器、匯編器的設計實現,到目標文件的鏈接生成可執行文件;甚至編譯優化器的實現、二進制指令、可執行文件格式以及語言運行時和標准庫的概念,都在書中做了認真細致地剖析。相信對本書的閱讀,將是一次不錯的獲得知識的體驗!