Can you summarize the following document?
        
  早期的計算機軟體都是用組合語言直接編寫的,這種狀況持續了數年。當人們發現為不同型別的中央處理器(CPU)編寫可重用軟體的開銷要明顯高於編寫編譯器時,人們發明了高階程式語言。由於早期的計算機的記憶體很少,當大家實現編譯器時,遇到了許多技術難題。  大約在20世紀50年代末期,與機器無關的程式語言被首次提出。隨後,人們開發了幾種實驗性質的編譯器。第一個編譯器是由美國女性電腦科學家葛麗絲·霍普(Grace Murray Hopper)於1952年為A-0 系統編寫的。但是1957年由任職於IBM的美國電腦科學家約翰·巴科斯(John Warner Backus)領導的FORTRAN則是第一個被實作出具備完整功能的編譯器。1960年,COBOL成為一種較早的能在多種架構下被編譯的語言。  高階語言在許多領域流行起來。由於新的程式語言支援的功能越來越多,計算機的架構越來越複雜,這使得編譯器也越來越複雜。  早期的編譯器是用組合語言編寫的。首個能編譯自己源程式的編譯器是在1962年由麻省理工學院的Hart和Levin製作的。從20世紀70年代起,實現能編譯自己源程式的編譯器變得越來越可行,不過還是用Pascal和C語言來實現編譯器更加流行。製作某種語言的第一個能編譯器,要麼需要用其它語言來編寫,要麼就像Hart和Levin製作Lisp編譯器那樣,用直譯器來執行編譯器。

  編譯器的構造與優化是計算機專業的大學課程,課程名稱一般為「編譯原理」或「編譯器」。通常在課程中包含了如何實現一種教學用程式語言的編譯器。一個著名的例子是20世紀70年代,瑞士電腦科學家尼克勞斯·維爾特()用於講解編譯器的構造時使用的PL/0編譯器。儘管它很簡單,PL/0編譯器介紹了這個領域的幾個有影響的概念:

  編譯器的一種分類方式是按照生成程式碼所執行的系統平臺劃分,這個平臺稱為目標平臺。  有一些編譯器輸出的程式碼,將執行於與編譯器所在相同型別的計算機和作業系統之上,這種編譯器叫做本地編譯器。輸出可以執行於不同的平臺之上的編譯器,叫做交叉編譯器。由於嵌入式系統通常沒有軟體開發環境,因此,為這類系統開發軟體時,通常需要使用交叉編譯器。  編譯器所輸出於虛擬機器上執行之程式碼,編譯器和編譯器輸出的執行平臺有可能相同,也有可能不同。因此,對於這類編譯器,不去區分它是本地編譯器還是交叉編譯器。
編譯器(英語:compiler)是一種計算機程式,它會將某種程式語言寫成的原始碼(原始語言)轉換成另一種程式語言(目標語言)。