本書是一本系統(tǒng)闡述倉頡程序設(shè)計語言的技術(shù)書籍,倉頡程序設(shè)計語言是一門由華為公司研發(fā)的國產(chǎn)計算機高級編程語言。
全書共15章,全書從最簡單的倉頡程序開始,全面覆蓋了倉頡程序設(shè)計語言的基本語法語義規(guī)則。第1章為引言,簡單介紹了倉頡語言的歷史和特點。第2章介紹了第1個倉頡程序。第3、4章介紹了倉頡語言的基本類型、運算符、基本輸入輸出和控制結(jié)構(gòu)等。第5章介紹了函數(shù)。第6-9章介紹了倉頡語言中的高級類型和類型關(guān)系,包括記錄、枚舉、類、接口、繼承等。第10章介紹了泛型和常用集合,泛型是對類型的進一步抽象。第11章介紹了屬性和擴展。第12章介紹了多線程和異常處理,多線程為處理并發(fā)問題提供了基礎(chǔ)。第13章介紹了包,包管理為組織多文件及大型項目提供了機制保障。第14、15章是自動微分和元編程,自動微分為倉頡語言在人工智能應(yīng)用中提供了更高的開發(fā)效率,元編程則使倉頡語言具有通過代碼生成代碼和修改代碼的能力。
本書在介紹倉頡語言特性的同時,配備了大量的示例代碼說明,使讀者在學(xué)習(xí)倉頡程序語言規(guī)則上更容易理解,書中示例代碼均進行過測試。
本書可作為開發(fā)者了解認識倉頡編程語言的入門書籍,可作為大學(xué)計算機、軟件專業(yè)相關(guān)課程的教材或參考書,還可作為倉頡程序設(shè)計工程師的參考書籍。
本書系統(tǒng)闡述倉頡程序設(shè)計語言,全書共15章,從最簡單的倉頡程序開始講解,全面覆蓋了倉頡程序設(shè)計語言的基本語法、語義及規(guī)則。本書在介紹倉頡語言特性的同時,配備了大量的示例代碼及說明,使讀者在學(xué)習(xí)倉頡程序語言規(guī)則上更容易理解。
深入淺出 介紹倉頡編程語言的基本理念、邏輯與體系,并在程序開發(fā)示例中加以驗證和說明。為讀者建立倉頡語言程序設(shè)計的技術(shù)體系,為開發(fā)者提供學(xué)習(xí)和開發(fā)參考。
技術(shù)前沿 帶領(lǐng)讀者走進倉頡程序設(shè)計語言,開啟程序設(shè)計語言國產(chǎn)化的新篇章,推動中國軟件開發(fā)在編程語言基礎(chǔ)領(lǐng)域自主創(chuàng)新。
中國華為技術(shù)有限公司發(fā)布倉頡程序設(shè)計語言恰逢我國近年來在高精尖及基礎(chǔ)領(lǐng)域受到國外擠壓的關(guān)鍵時期。作為軟件基礎(chǔ)領(lǐng)域的編程語言,國產(chǎn)化對我國軟件行業(yè)發(fā)展具有戰(zhàn)略意義。
倉頡程序設(shè)計語言的出現(xiàn),是華為技術(shù)有限公司基礎(chǔ)技術(shù)進一步提升的結(jié)果,也是我國多年來信息技術(shù)發(fā)展長期積淀的結(jié)果,更是國家發(fā)展戰(zhàn)略的需要。
倉頡程序設(shè)計語言作為一門新的程序設(shè)計語言,吸取了眾多其他編程語言的優(yōu)點,同時滿足編程語言在未來技術(shù)中的需要。倉頡語言在設(shè)計上把一些面向未來的技術(shù)作為語言本身的特性,如自動微分等。另外,倉頡語言還在不斷完善及發(fā)展的過程中,開發(fā)者需要用發(fā)展的眼光看待倉頡程序設(shè)計語言。
《倉頡程序設(shè)計語言》適合具有一定高級編程語言基礎(chǔ)的讀者,適合具有一定計算機或軟件開發(fā)基礎(chǔ)的大學(xué)生或軟件開發(fā)者閱讀!秱}頡程序設(shè)計語言》通過系統(tǒng)闡述和豐富的示例代碼幫助開發(fā)者快速掌握倉頡程序設(shè)計語言,開啟國產(chǎn)化程序設(shè)計的新天地。
《倉頡程序設(shè)計語言》主要內(nèi)容
第1章 引言,簡要介紹倉頡程序設(shè)計語言的歷史和特點,說明《倉頡程序設(shè)計語言》面向的讀者。
第2章 第1個倉頡程序,介紹如何編寫倉頡Hello World程序,通過編譯、運行該程序說明倉頡程序的基本開發(fā)過程,本章還介紹倉頡程序包含的元素。
第3章 基本類型和運算符,介紹倉頡程序中的常量和變量,基本的數(shù)據(jù)類型,基本的算術(shù)運算符、關(guān)系運算符和邏輯運算符等。
第4章 基本輸入/輸出和控制結(jié)構(gòu),介紹倉頡語言中的基本輸出函數(shù)、終端輸入/輸出及其常用成員函數(shù)的使用、控制結(jié)構(gòu)等?刂平Y(jié)構(gòu)中包括順序、選擇和循環(huán)3種基本程序控制結(jié)構(gòu),分別介紹3種結(jié)構(gòu)在倉頡程序中的具體表達。
第5章 函數(shù),介紹函數(shù)的定義、函數(shù)的調(diào)用和函數(shù)的高級特性。函數(shù)具有類型,可以作為參數(shù)傳遞或返回,并且可以嵌套。倉頡語言還支持Lambda表達式,相當(dāng)于匿名函數(shù)。
第6章 結(jié)構(gòu)和枚舉類型,介紹結(jié)構(gòu)類型的定義、創(chuàng)建使用結(jié)構(gòu)、結(jié)構(gòu)成員和訪問控制等,以及枚舉類型的用法和倉頡語言內(nèi)置的枚舉類型Option類型。
第7章 類和對象,介紹類的定義、對象的創(chuàng)建和使用、類的成員、可見性和寫限制,類是自定義的高級數(shù)據(jù)類型,是面向?qū)ο缶幊痰幕靖拍,也是面向(qū)ο蟪绦蛟O(shè)計中基本特征封裝的具體實現(xiàn)。
第8章 繼承和接口,介紹通過繼承定義派生類、繼承中的構(gòu)造函數(shù)、訪問權(quán)限、重載、覆蓋和重定義,以及接口的定義和繼承、接口的實現(xiàn)、Any接口。繼承是面向?qū)ο笤O(shè)計的基本特征之一,接口是類型中的更高層次抽象。
第9章 類型關(guān)系,介紹類和子類型、接口和子類型、函數(shù)使用中的子類型、類型轉(zhuǎn)換、類型判斷、類型別名。倉頡語言是強類型語言,類型關(guān)系在實際開發(fā)中發(fā)揮著重要的作用,子類型和父類型之間的隱性切換是面向?qū)ο蠖鄳B(tài)性的具體體現(xiàn)。
第10章 泛型和常用集合,介紹泛型類型、泛型函數(shù)、泛型約束,以及常用的幾個集合類型,包括Array、ArrayList、HashSet、HashMap。泛型是一種類型參數(shù)化技術(shù),提高了編寫程序的通用性。
第11章 屬性和擴展,介紹屬性的定義和使用、擴展的定義和使用。屬性提供了更加方便訪問程序的機制,擴展在不產(chǎn)生新類型的情況下為已有類型提供了擴充新功能的能力。
第12章 多線程和異常處理,多線程部分包括線程的創(chuàng)建、線程的等待和線程同步,異常處理部分包括異常類型、拋出和異常處理。
第13章 包,介紹包聲明、包中的可見性、包的導(dǎo)入、多包項目編譯、main函數(shù)參數(shù)等,多個包的組織和管理是完成大型項目所必需的,包管理為組織大型項目提供了有效的語言機制。
第14章 自動微分,首先簡要介紹微分技術(shù),然后介紹倉頡語言中簡單的函數(shù)自動微分,最后介紹倉頡語言中的可微類型、可微函數(shù)、自動微分API、高階微分。倉頡語言把自動微分作為語言本身的基本特性進行設(shè)計,為倉頡語言應(yīng)用在人工智能等領(lǐng)域提供了更好的支持。
第15章 元編程,首先簡要介紹元編程概念,然后介紹倉頡語言中的元編程類型、引述表達式、宏等。倉頡語言元編程使其具有通過代碼生成代碼和修改代碼的能力,元編程可以在編譯階段優(yōu)化生成運行效率更高的代碼。
閱讀建議
這是一本倉頡程序設(shè)計語言的入門書,但不是一本程序設(shè)計的入門書,因此筆者認為學(xué)習(xí)《倉頡程序設(shè)計語言》需要具備一定的程序設(shè)計基礎(chǔ)。
致謝
在《倉頡程序設(shè)計語言》的撰寫過程中,筆者得到了來自多方的支持和幫助,在這里特別表示感謝。
首先感謝家人的支持,如果沒有家人的支持,可能無法完成《倉頡程序設(shè)計語言》。
感謝中原工學(xué)院的同事,筆者在撰寫《倉頡程序設(shè)計語言》的過程中得到了多位領(lǐng)導(dǎo)和老師的支持、幫助,如余雨萍、李勇軍、張玉瑩、馬超凡、賈曉輝、朱彥松等。感謝研究生周鵬,在成書過程中和筆者共同學(xué)習(xí)、探討了倉頡程序設(shè)計語言。
感謝華為技術(shù)有限公司一大批優(yōu)秀的工程師,如果沒有他們的努力恐怕不會有倉頡編程語言的面世。在成書過程中筆者參考了華為技術(shù)有限公司提供的官方技術(shù)文檔。
感謝倉頡語言技術(shù)社區(qū)和社區(qū)里的眾多同人,在《倉頡程序設(shè)計語言》成稿過程中,社區(qū)提供了很好的交流平臺,通過和很多技術(shù)同人交流使筆者對倉頡語言有了更好、更深的理解。
感謝清華大學(xué)出版社工作人員的辛勤工作,特別感謝趙佳霓編輯,從策劃選題到出版的過程中付出了許多努力。
劉安戰(zhàn)
2024年5月
劉安戰(zhàn),華為認證HDE,中原工學(xué)院副教授、碩士生導(dǎo)師,國家認證高級系統(tǒng)分析師、系統(tǒng)架構(gòu)設(shè)計師、信息系統(tǒng)項目管理師。主持完成 產(chǎn)學(xué)合作協(xié)同育人項目(HarmonyOS移動應(yīng)用開發(fā)),率先在高校開設(shè)HarmonyOS開發(fā)類課程。參編國家十二五規(guī)劃教材1部,曾獲河南省軟件工程課程教學(xué)成果一等獎。
第1章 引言 1
1.1 倉頡語言的起源 1
1.2 倉頡語言的特點 1
1.3 本書面向的讀者 2
第2章 第1個倉頡程序 3
2.1 倉頡Hello World程序 3
2.2 編譯和運行 4
2.2.1 在Ubuntu系統(tǒng)下編譯運行 4
2.2.2 在Windows 10系統(tǒng)下開發(fā)倉頡程序 6
2.3 倉頡程序包含的元素 16
第3章 基本類型和運算符 18
3.1 常量和變量 18
3.1.1 常量 18
3.1.2 變量 21
3.2 數(shù)據(jù)類型 22
3.3 運算符 26
3.3.1 算術(shù)運算符 26
3.3.2 關(guān)系運算符 27
3.3.3 邏輯運算符 28
3.3.4 其他運算符 28
第4章 基本輸入/輸出和控制結(jié)構(gòu) 31
4.1 基本輸出函數(shù) 31
4.2 終端輸入/輸出 32
4.2.1 終端輸入 33
4.2.2 終端輸出 34
4.3 控制結(jié)構(gòu) 35
4.3.1 順序結(jié)構(gòu) 35
4.3.2 選擇結(jié)構(gòu) 36
4.3.3 循環(huán)結(jié)構(gòu) 40
第5章 函數(shù) 46
5.1 函數(shù)定義 46
5.1.1 一般函數(shù)定義 46
5.1.2 嵌套函數(shù)定義 50
5.1.3 重載函數(shù)定義 51
5.2 函數(shù)調(diào)用 51
5.2.1 一般函數(shù)調(diào)用 52
5.2.2 遞歸函數(shù)調(diào)用 54
5.3 函數(shù)高級特性 55
5.3.1 函數(shù)類型 55
5.3.2 函數(shù)類型作為變量類型 56
5.3.3 函數(shù)類型作為返回類型 56
5.3.4 函數(shù)類型作為形參類型 57
5.3.5 Lambda表達式 57
第6章 結(jié)構(gòu)和枚舉類型 59
6.1 結(jié)構(gòu)類型 59
6.1.1 定義結(jié)構(gòu)類型 59
6.1.2 創(chuàng)建使用結(jié)構(gòu) 60
6.1.3 結(jié)構(gòu)成員 61
6.1.4 訪問控制 66
6.1.5 結(jié)構(gòu)定義限制 68
6.2 枚舉類型 69
6.2.1 枚舉類型的基本用法 69
6.2.2 枚舉類型的更多用法 72
6.2.3 Option類型 73
第7章 類和對象 76
7.1 定義類 76
7.2 創(chuàng)建使用類對象 77
7.3 類的成員 79
7.4 可見性和寫限制 85
第8章 繼承和接口 87
8.1 繼承 87
8.1.1 定義派生類 87
8.1.2 繼承中的構(gòu)造函數(shù) 90
8.1.3 訪問權(quán)限 91
8.1.4 重載、覆蓋和重定義 93
8.2 接口 95
8.2.1 定義接口 95
8.2.2 接口繼承 97
8.2.3 接口實現(xiàn) 98
8.2.4 Any接口 100
第9章 類型關(guān)系 102
9.1 類和子類型 102
9.2 接口和子類型 103
9.3 函數(shù)使用中的子類型 104
9.4 類型轉(zhuǎn)換和類型判斷 106
9.4.1 數(shù)值類型之間的轉(zhuǎn)換 106
9.4.2 字符和整型之間的轉(zhuǎn)換 107
9.4.3 is和as表達式 107
9.5 類型別名 108
第10章 泛型和常用集合類型 110
10.1 泛型 110
10.1.1 泛型類型 110
10.1.2 泛型函數(shù) 114
10.1.3 泛型約束 116
10.2 常用集合類型 118
10.2.1 Array 119
10.2.2 ArrayList 121
10.2.3 HashSet 122
10.2.4 HashMap 124
第11章 屬性和擴展 126
11.1 屬性 126
11.1.1 定義屬性 126
11.1.2 使用屬性 129
11.2 擴展 131
11.2.1 擴展的定義 131
11.2.2 擴展限制和使用 133
11.2.3 擴展的作用域 135
第12章 多線程和異常處理 138
12.1 多線程 138
12.1.1 創(chuàng)建線程 138
12.1.2 等待線程 139
12.1.3 線程同步 141
12.2 異常處理 151
12.2.1 異常類型 152
12.2.2 拋出和處理異常 153
第13章 包 158
13.1 聲明包 158
13.2 包中頂層聲明的可見性 160
13.3 包的導(dǎo)入 162
13.4 多包項目編譯 165
13.5 main函數(shù)參數(shù) 168
第14章 自動微分 169
14.1 微分技術(shù)簡介 169
14.2 簡單的函數(shù)自動微分 170
14.3 可微類型 171
14.4 可微函數(shù) 172
14.4.1 頂層可微函數(shù) 172
14.4.2 非頂層可微函數(shù) 174
14.5 自動微分API 176
14.5.1 @Grad表達式 176
14.5.2 @ValWithGrad表達式 178
14.5.3 @AdjointOf表達式 178
14.5.4 stopGradient函數(shù)接口 179
14.6 高階微分 180
第15章 元編程 181
15.1 元編程簡介 181
15.2 元編程類型和引述表達式 182
15.2.1 Token類型 182
15.2.2 Tokens類型 183
15.2.3 引述表達式 185
15.3 宏 187
15.3.1 宏定義和調(diào)用 187
15.3.2 非屬性宏 188
15.3.3 屬性宏 189
15.3.4 宏嵌套 191
15.4 元編程示例 193
附錄A 倉頡語言中的關(guān)鍵字 196
附錄B 倉頡語言中的運算符 197
附錄C 倉頡語言提供的包及主要功能說明 199