本書是一本系統(tǒng)闡述倉頡程序設(shè)計(jì)語言的技術(shù)書籍,倉頡程序設(shè)計(jì)語言是一門由華為公司研發(fā)的國產(chǎn)計(jì)算機(jī)高級編程語言。
全書共15章,全書從最簡單的倉頡程序開始,全面覆蓋了倉頡程序設(shè)計(jì)語言的基本語法語義規(guī)則。第1章為引言,簡單介紹了倉頡語言的歷史和特點(diǎn)。第2章介紹了第1個倉頡程序。第3、4章介紹了倉頡語言的基本類型、運(yùn)算符、基本輸入輸出和控制結(jié)構(gòu)等。第5章介紹了函數(shù)。第6-9章介紹了倉頡語言中的高級類型和類型關(guān)系,包括記錄、枚舉、類、接口、繼承等。第10章介紹了泛型和常用集合,泛型是對類型的進(jìn)一步抽象。第11章介紹了屬性和擴(kuò)展。第12章介紹了多線程和異常處理,多線程為處理并發(fā)問題提供了基礎(chǔ)。第13章介紹了包,包管理為組織多文件及大型項(xiàng)目提供了機(jī)制保障。第14、15章是自動微分和元編程,自動微分為倉頡語言在人工智能應(yīng)用中提供了更高的開發(fā)效率,元編程則使倉頡語言具有通過代碼生成代碼和修改代碼的能力。
本書在介紹倉頡語言特性的同時,配備了大量的示例代碼說明,使讀者在學(xué)習(xí)倉頡程序語言規(guī)則上更容易理解,書中示例代碼均進(jìn)行過測試。
本書可作為開發(fā)者了解認(rèn)識倉頡編程語言的入門書籍,可作為大學(xué)計(jì)算機(jī)、軟件專業(yè)相關(guān)課程的教材或參考書,還可作為倉頡程序設(shè)計(jì)工程師的參考書籍。
本書系統(tǒng)闡述倉頡程序設(shè)計(jì)語言,全書共15章,從最簡單的倉頡程序開始講解,全面覆蓋了倉頡程序設(shè)計(jì)語言的基本語法、語義及規(guī)則。本書在介紹倉頡語言特性的同時,配備了大量的示例代碼及說明,使讀者在學(xué)習(xí)倉頡程序語言規(guī)則上更容易理解。
深入淺出 介紹倉頡編程語言的基本理念、邏輯與體系,并在程序開發(fā)示例中加以驗(yàn)證和說明。為讀者建立倉頡語言程序設(shè)計(jì)的技術(shù)體系,為開發(fā)者提供學(xué)習(xí)和開發(fā)參考。
技術(shù)前沿 帶領(lǐng)讀者走進(jìn)倉頡程序設(shè)計(jì)語言,開啟程序設(shè)計(jì)語言國產(chǎn)化的新篇章,推動中國軟件開發(fā)在編程語言基礎(chǔ)領(lǐng)域自主創(chuàng)新。
中國華為技術(shù)有限公司發(fā)布倉頡程序設(shè)計(jì)語言恰逢我國近年來在高精尖及基礎(chǔ)領(lǐng)域受到國外擠壓的關(guān)鍵時期。作為軟件基礎(chǔ)領(lǐng)域的編程語言,國產(chǎn)化對我國軟件行業(yè)發(fā)展具有戰(zhàn)略意義。
倉頡程序設(shè)計(jì)語言的出現(xiàn),是華為技術(shù)有限公司基礎(chǔ)技術(shù)進(jìn)一步提升的結(jié)果,也是我國多年來信息技術(shù)發(fā)展長期積淀的結(jié)果,更是國家發(fā)展戰(zhàn)略的需要。
倉頡程序設(shè)計(jì)語言作為一門新的程序設(shè)計(jì)語言,吸取了眾多其他編程語言的優(yōu)點(diǎn),同時滿足編程語言在未來技術(shù)中的需要。倉頡語言在設(shè)計(jì)上把一些面向未來的技術(shù)作為語言本身的特性,如自動微分等。另外,倉頡語言還在不斷完善及發(fā)展的過程中,開發(fā)者需要用發(fā)展的眼光看待倉頡程序設(shè)計(jì)語言。
《倉頡程序設(shè)計(jì)語言》適合具有一定高級編程語言基礎(chǔ)的讀者,適合具有一定計(jì)算機(jī)或軟件開發(fā)基礎(chǔ)的大學(xué)生或軟件開發(fā)者閱讀!秱}頡程序設(shè)計(jì)語言》通過系統(tǒng)闡述和豐富的示例代碼幫助開發(fā)者快速掌握倉頡程序設(shè)計(jì)語言,開啟國產(chǎn)化程序設(shè)計(jì)的新天地。
《倉頡程序設(shè)計(jì)語言》主要內(nèi)容
第1章 引言,簡要介紹倉頡程序設(shè)計(jì)語言的歷史和特點(diǎn),說明《倉頡程序設(shè)計(jì)語言》面向的讀者。
第2章 第1個倉頡程序,介紹如何編寫倉頡Hello World程序,通過編譯、運(yùn)行該程序說明倉頡程序的基本開發(fā)過程,本章還介紹倉頡程序包含的元素。
第3章 基本類型和運(yùn)算符,介紹倉頡程序中的常量和變量,基本的數(shù)據(jù)類型,基本的算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符等。
第4章 基本輸入/輸出和控制結(jié)構(gòu),介紹倉頡語言中的基本輸出函數(shù)、終端輸入/輸出及其常用成員函數(shù)的使用、控制結(jié)構(gòu)等?刂平Y(jié)構(gòu)中包括順序、選擇和循環(huán)3種基本程序控制結(jié)構(gòu),分別介紹3種結(jié)構(gòu)在倉頡程序中的具體表達(dá)。
第5章 函數(shù),介紹函數(shù)的定義、函數(shù)的調(diào)用和函數(shù)的高級特性。函數(shù)具有類型,可以作為參數(shù)傳遞或返回,并且可以嵌套。倉頡語言還支持Lambda表達(dá)式,相當(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è)計(jì)中基本特征封裝的具體實(shí)現(xiàn)。
第8章 繼承和接口,介紹通過繼承定義派生類、繼承中的構(gòu)造函數(shù)、訪問權(quán)限、重載、覆蓋和重定義,以及接口的定義和繼承、接口的實(shí)現(xiàn)、Any接口。繼承是面向?qū)ο笤O(shè)計(jì)的基本特征之一,接口是類型中的更高層次抽象。
第9章 類型關(guān)系,介紹類和子類型、接口和子類型、函數(shù)使用中的子類型、類型轉(zhuǎn)換、類型判斷、類型別名。倉頡語言是強(qiáng)類型語言,類型關(guān)系在實(shí)際開發(fā)中發(fā)揮著重要的作用,子類型和父類型之間的隱性切換是面向?qū)ο蠖鄳B(tài)性的具體體現(xiàn)。
第10章 泛型和常用集合,介紹泛型類型、泛型函數(shù)、泛型約束,以及常用的幾個集合類型,包括Array、ArrayList、HashSet、HashMap。泛型是一種類型參數(shù)化技術(shù),提高了編寫程序的通用性。
第11章 屬性和擴(kuò)展,介紹屬性的定義和使用、擴(kuò)展的定義和使用。屬性提供了更加方便訪問程序的機(jī)制,擴(kuò)展在不產(chǎn)生新類型的情況下為已有類型提供了擴(kuò)充新功能的能力。
第12章 多線程和異常處理,多線程部分包括線程的創(chuàng)建、線程的等待和線程同步,異常處理部分包括異常類型、拋出和異常處理。
第13章 包,介紹包聲明、包中的可見性、包的導(dǎo)入、多包項(xiàng)目編譯、main函數(shù)參數(shù)等,多個包的組織和管理是完成大型項(xiàng)目所必需的,包管理為組織大型項(xiàng)目提供了有效的語言機(jī)制。
第14章 自動微分,首先簡要介紹微分技術(shù),然后介紹倉頡語言中簡單的函數(shù)自動微分,最后介紹倉頡語言中的可微類型、可微函數(shù)、自動微分API、高階微分。倉頡語言把自動微分作為語言本身的基本特性進(jìn)行設(shè)計(jì),為倉頡語言應(yīng)用在人工智能等領(lǐng)域提供了更好的支持。
第15章 元編程,首先簡要介紹元編程概念,然后介紹倉頡語言中的元編程類型、引述表達(dá)式、宏等。倉頡語言元編程使其具有通過代碼生成代碼和修改代碼的能力,元編程可以在編譯階段優(yōu)化生成運(yùn)行效率更高的代碼。
閱讀建議
這是一本倉頡程序設(shè)計(jì)語言的入門書,但不是一本程序設(shè)計(jì)的入門書,因此筆者認(rèn)為學(xué)習(xí)《倉頡程序設(shè)計(jì)語言》需要具備一定的程序設(shè)計(jì)基礎(chǔ)。
致謝
在《倉頡程序設(shè)計(jì)語言》的撰寫過程中,筆者得到了來自多方的支持和幫助,在這里特別表示感謝。
首先感謝家人的支持,如果沒有家人的支持,可能無法完成《倉頡程序設(shè)計(jì)語言》。
感謝中原工學(xué)院的同事,筆者在撰寫《倉頡程序設(shè)計(jì)語言》的過程中得到了多位領(lǐng)導(dǎo)和老師的支持、幫助,如余雨萍、李勇軍、張玉瑩、馬超凡、賈曉輝、朱彥松等。感謝研究生周鵬,在成書過程中和筆者共同學(xué)習(xí)、探討了倉頡程序設(shè)計(jì)語言。
感謝華為技術(shù)有限公司一大批優(yōu)秀的工程師,如果沒有他們的努力恐怕不會有倉頡編程語言的面世。在成書過程中筆者參考了華為技術(shù)有限公司提供的官方技術(shù)文檔。
感謝倉頡語言技術(shù)社區(qū)和社區(qū)里的眾多同人,在《倉頡程序設(shè)計(jì)語言》成稿過程中,社區(qū)提供了很好的交流平臺,通過和很多技術(shù)同人交流使筆者對倉頡語言有了更好、更深的理解。
感謝清華大學(xué)出版社工作人員的辛勤工作,特別感謝趙佳霓編輯,從策劃選題到出版的過程中付出了許多努力。
劉安戰(zhàn)
2024年5月
劉安戰(zhàn),華為認(rèn)證HDE,中原工學(xué)院副教授、碩士生導(dǎo)師,國家認(rèn)證高級系統(tǒng)分析師、系統(tǒng)架構(gòu)設(shè)計(jì)師、信息系統(tǒng)項(xiàng)目管理師。主持完成 產(chǎn)學(xué)合作協(xié)同育人項(xiàng)目(HarmonyOS移動應(yīng)用開發(fā)),率先在高校開設(shè)HarmonyOS開發(fā)類課程。參編國家十二五規(guī)劃教材1部,曾獲河南省軟件工程課程教學(xué)成果一等獎。
第1章 引言 1
1.1 倉頡語言的起源 1
1.2 倉頡語言的特點(diǎn) 1
1.3 本書面向的讀者 2
第2章 第1個倉頡程序 3
2.1 倉頡Hello World程序 3
2.2 編譯和運(yùn)行 4
2.2.1 在Ubuntu系統(tǒng)下編譯運(yùn)行 4
2.2.2 在Windows 10系統(tǒng)下開發(fā)倉頡程序 6
2.3 倉頡程序包含的元素 16
第3章 基本類型和運(yùn)算符 18
3.1 常量和變量 18
3.1.1 常量 18
3.1.2 變量 21
3.2 數(shù)據(jù)類型 22
3.3 運(yùn)算符 26
3.3.1 算術(shù)運(yùn)算符 26
3.3.2 關(guān)系運(yùn)算符 27
3.3.3 邏輯運(yùn)算符 28
3.3.4 其他運(yùn)算符 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表達(dá)式 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 接口實(shí)現(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表達(dá)式 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章 屬性和擴(kuò)展 126
11.1 屬性 126
11.1.1 定義屬性 126
11.1.2 使用屬性 129
11.2 擴(kuò)展 131
11.2.1 擴(kuò)展的定義 131
11.2.2 擴(kuò)展限制和使用 133
11.2.3 擴(kuò)展的作用域 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 多包項(xiàng)目編譯 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表達(dá)式 176
14.5.2 @ValWithGrad表達(dá)式 178
14.5.3 @AdjointOf表達(dá)式 178
14.5.4 stopGradient函數(shù)接口 179
14.6 高階微分 180
第15章 元編程 181
15.1 元編程簡介 181
15.2 元編程類型和引述表達(dá)式 182
15.2.1 Token類型 182
15.2.2 Tokens類型 183
15.2.3 引述表達(dá)式 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 倉頡語言中的運(yùn)算符 197
附錄C 倉頡語言提供的包及主要功能說明 199