☰
OCaml 系統
發行版本 5.2
2024 年 2 月
選擇其他版本
OCaml 手冊
目錄
前言
關鍵字索引
OCaml API
OCaml 編譯器 API
目錄
第一部分 OCaml 簡介
第 1 章
核心語言
1
基礎
2
資料型別
3
函式作為數值
4
記錄和變體
4.1
記錄和變體消除歧義
5
命令式特性
6
例外
7
惰性運算式
8
運算式的符號處理
9
美觀列印
10
Printf 格式
11
獨立 OCaml 程式
第 2 章
模組系統
1
結構
2
簽章
3
函子
4
函子和類型抽象
5
模組和獨立編譯
第 3 章
OCaml 中的物件
1
類別和物件
2
直接物件
3
對自身的參照
4
初始化器
5
虛擬方法
6
私有方法
7
類別介面
8
繼承
9
多重繼承
10
參數化類別
11
多型方法
12
使用強制轉型
13
函數式物件
14
克隆物件
15
遞迴類別
16
二元方法
17
友元
第 4 章
帶標籤的引數
1
選用引數
2
標籤和型別推論
3
標籤建議
第 5 章
多型變體
1
基本用法
2
進階用法
3
多型變體的弱點
第 6 章
多型及其限制
1
弱多型和變動
1.1
弱多型型別
1.2
值限制
1.3
放寬的值限制
1.4
變異性和值限制
1.5
抽象資料型別
2
多型遞迴
2.1
明確的多型註釋
2.2
更多範例
3
高階多型函式
第 7 章
廣義代數資料型別
1
遞迴函式
2
型別推論
3
反駁案例
4
進階範例
5
錯誤訊息中的存在型別名稱
6
存在量的明確命名
7
非本地抽象型別上的方程式
第 8 章
類別和模組的進階範例
1
擴展範例:銀行帳戶
2
作為類別的簡單模組
2.1
字串
2.2
Hashtbl
2.3
集合
3
主題/觀察者模式
第 9 章
平行程式設計
1
領域
1.1
加入領域
2
Domainslib:用於巢狀平行程式設計的函式庫
2.1
使用 domainslib 平行化費波那契
2.2
平行迭代結構
3
平行垃圾回收
4
記憶體模型:簡單的部分
5
阻塞同步
5.1
與 systhreads 的互動
6
與 C 綁定的互動
7
原子操作
7.1
無鎖堆疊
第 10 章
記憶體模型:困難的部分
1
為什麼需要弱一致性記憶體?
1.1
編譯器最佳化
1.2
硬體最佳化
2
資料競爭自由意味著循序一致性
2.1
記憶體位置
2.2
先行發生關係
2.3
資料競爭
2.4
DRF-SC
3
使用 DRF-SC 進行推理
4
本地資料競爭自由
5
記憶體模型的操作視圖
5.1
非原子位置
5.2
領域
5.3
非原子存取
5.4
原子存取
5.5
使用語意進行推理
6
不符合規範的操作
第二部分 OCaml 語言
第 11 章
OCaml 語言
1
詞法慣例
2
數值
2.1
基本數值
2.2
元組
2.3
記錄
2.4
陣列
2.5
變體數值
2.6
多型變體
2.7
函式
2.8
物件
3
名稱
4
型別運算式
5
常數
6
模式
7
運算式
7.1
優先順序和結合性
7.2
基本運算式
7.3
控制結構
7.4
資料結構上的操作
7.5
運算子
7.6
物件
7.7
強制轉型
7.8
其他
8
型別和例外定義
8.1
型別定義
8.2
例外定義
9
類別
9.1
類別型別
9.2
類別運算式
9.3
類別定義
9.4
類別規範
9.5
類別型別定義
10
模組型別(模組規範)
10.1
簡單模組型別
10.2
簽章
10.3
函子型別
10.4
with
運算子
11
模組運算式(模組實作)
11.1
簡單模組運算式
11.2
結構
11.3
函子
12
編譯單元
第 12 章
語言擴充功能
1
數值的遞迴定義
2
遞迴模組
3
私有型別
3.1
私有變體和記錄型別
3.2
私有型別縮寫
3.3
私有列型別
4
本地抽象型別
5
第一級模組
6
還原模組的型別
7
在簽章內進行替換
7.1
破壞性替換
7.2
本地替換宣告
7.3
模組型別替換
8
型別層級模組別名
9
在 open 語句中覆寫
10
廣義代數資料型別
11
Bigarray 存取的語法
12
屬性
12.1
內建屬性
13
擴充節點
13.1
內建擴充節點
14
可擴展變體型別
14.1
私有可擴展變體型別
15
生成函子
16
僅限擴充的語法
16.1
擴充運算子
16.2
擴充常值
17
行內記錄
18
文件註解
18.1
浮動註解
18.2
項目註解
18.3
標籤註解
19
擴展索引運算子
19.1
多索引表示法
20
空變體型別
21
警示
22
廣義 open 語句
23
綁定運算子
23.1
範例
23.2
慣例
23.3
一般語法轉換規則
23.4
變數綁定的簡短表示法 (let-punning)
24
效果處理器
24.1
基礎
24.2
並行
24.3
使用者層級執行緒
24.4
控制反轉
24.5
語意
24.6
淺層處理器
第三部分 OCaml 工具
第 13 章
批次編譯 (ocamlc)
1
編譯器概述
2
選項
3
模組和檔案系統
4
常見錯誤
5
警告參考
5.1
警告 6:函式應用中省略標籤
5.2
警告 9:記錄模式中缺少欄位
5.3
警告 52:脆弱的常數模式
5.4
警告 57:保護下的模糊或模式變數
第 14 章
頂層系統或 REPL (ocaml)
1
選項
2
頂層指令
3
頂層和模組系統
4
常見錯誤
5
建構自訂頂層系統:
ocamlmktop
5.1
選項
6
原生頂層:
ocamlnat
(實驗性質)
第 15 章
執行期系統 (ocamlrun)
1
概觀
2
選項
3
共用函式庫的動態載入
4
常見錯誤
第 16 章
原生碼編譯 (ocamlopt)
1
編譯器概述
2
選項
3
常見錯誤
4
執行 ocamlopt 產生的執行檔
5
與位元組碼編譯器的相容性
第 17 章
詞法分析器與語法分析器產生器 (ocamllex, ocamlyacc)
1
ocamllex
概觀
1.1
選項
2
詞法分析器定義的語法
2.1
標頭和尾部
2.2
命名正規表示式
2.3
進入點
2.4
正規表示式
2.5
動作
2.6
正規表示式中的變數
2.7
重新填入處理器
2.8
保留識別符
3
ocamlyacc
概觀
4
語法定義的語法
4.1
標頭和尾部
4.2
宣告
4.3
規則
4.4
錯誤處理
5
選項
6
完整範例
7
常見錯誤
第 18 章
相依性產生器 (ocamldep)
1
選項
2
典型的 Makefile
第 19 章
文件產生器 (ocamldoc)
1
用法
1.1
呼叫
1.2
模組資訊的合併
1.3
程式碼撰寫規則
2
文件註解的語法
2.1
文件註解的位置
2.2
Stop 特殊註解
2.3
文件註解的語法
2.4
文字格式化
2.5
文件標籤 (@-tags)
3
自訂產生器
3.1
產生器模組
3.2
處理自訂標籤
4
新增命令列選項
4.1
編譯和用法
第 20 章
除錯器 (ocamldebug)
1
編譯以進行除錯
2
呼叫
2.1
啟動除錯器
2.2
初始化檔案
2.3
離開除錯器
3
命令
3.1
取得說明
3.2
存取除錯器狀態
4
執行程式
4.1
事件
4.2
啟動除錯程式
4.3
執行程式
4.4
時間旅行
4.5
終止程式
5
斷點
6
呼叫堆疊
7
檢視變數值
8
控制除錯器
8.1
設定程式名稱和引數
8.2
程式載入方式
8.3
檔案搜尋路徑
8.4
工作目錄
8.5
開啟和關閉反向執行
8.6
除錯器關於
fork
的行為
8.7
載入新程式碼時停止執行
8.8
除錯器與程式之間的通訊
8.9
微調除錯器
8.10
使用者定義的列印器
9
其他命令
10
在 Emacs 下執行除錯器
第 21 章
效能分析 (ocamlprof)
1
編譯以進行效能分析
2
分析執行效能
3
列印效能分析資訊
4
時間效能分析
第 22 章
OCaml 與 C 的介接
1
概觀和編譯資訊
1.1
宣告基本型別
1.2
實作基本型別
1.3
將 C 程式碼與 OCaml 程式碼靜態連結
1.4
將 C 程式碼與 OCaml 程式碼動態連結
1.5
選擇靜態連結和動態連結
1.6
建構獨立自訂執行期系統
2
value
型別
2.1
整數值
2.2
區塊
2.3
堆積外部的指標
3
OCaml 資料型別的表示法
3.1
原子型別
3.2
元組和記錄
3.3
陣列
3.4
具體資料型別
3.5
物件
3.6
多型變體
4
值的運算
4.1
種類測試
4.2
整數的運算
4.3
存取區塊
4.4
配置區塊
4.5
引發例外
5
與垃圾收集器和諧共處
5.1
簡單介面
5.2
低階介面
5.3
待處理動作和非同步例外
6
完整範例
7
進階主題:從 C 回呼到 OCaml
7.1
從 C 應用 OCaml 閉包
7.2
取得或註冊 OCaml 閉包以用於 C 函式中
7.3
註冊 OCaml 例外以用於 C 函式中
7.4
C 中的主程式
7.5
將 OCaml 程式碼嵌入 C 程式碼中
8
進階範例搭配回呼
9
進階主題:自訂區塊
9.1
struct custom_operations
9.2
配置自訂區塊
9.3
存取自訂區塊
9.4
撰寫自訂序列化和反序列化函式
9.5
選擇識別符
9.6
已完成區塊
10
進階主題:Bigarrays 和 OCaml-C 介面
10.1
包含檔案
10.2
從 C 或 Fortran 存取 OCaml bigarray
10.3
將 C 或 Fortran 陣列包裝成 OCaml Bigarray
11
進階主題:更便宜的 C 呼叫
11.1
傳遞未裝箱的值
11.2
直接 C 呼叫
11.3
範例:直接呼叫 C 函式庫函式
12
進階主題:多執行緒
12.1
註冊從 C 建立的執行緒
12.2
使用 systhreads 並行執行長時間執行的 C 程式碼
13
進階主題:與 Windows Unicode API 介接
14
建構混合 C/OCaml 函式庫:
ocamlmklib
15
警語:內部執行期 API
15.1
內部變數和 CAML_INTERNALS
15.2
OCaml 版本巨集
第 23 章
使用 Flambda 進行最佳化
1
概觀
2
命令列旗標
2.1
依回合指定最佳化參數
3
內聯
3.1
傳統內聯啟發式
3.2
“Flambda” 內聯啟發式概觀
3.3
處理特定的語言結構
3.4
內聯報告
3.5
評估內聯效益
3.6
推測控制
4
特製化
4.1
評估特製化效益
5
參數的預設設定
5.1
-O2 最佳化層級的設定
5.2
-O3 最佳化層級的設定
6
手動控制內聯和特製化
7
簡化
8
其他程式碼移動轉換
8.1
常數提升
8.2
頂層 let 綁定的提升
9
未裝箱轉換
9.1
閉包變數的未裝箱
9.2
特製化引數的未裝箱
9.3
閉包的未裝箱
10
移除未使用的程式碼和值
10.1
移除多餘的 let 表達式
10.2
移除多餘的程式建構
10.3
移除未使用的引數
10.4
移除未使用的閉包變數
11
其他程式碼轉換
11.1
將非逸出參考轉換為可變變數
11.2
以特製化引數取代閉包變數
12
效果的處理
13
編譯靜態配置的模組
14
禁止最佳化
15
使用不安全的操作
16
詞彙表
第 24 章
使用 afl-fuzz 進行模糊測試
1
概觀
2
產生檢測
2.1
進階選項
3
範例
第 25 章
使用執行期事件進行執行期追蹤
1
概觀
2
架構
2.1
事件來源
2.2
事件傳輸
3
用法
3.1
使用 OCaml API
3.2
使用工具
4
自訂事件
4.1
概述
4.2
追蹤自訂事件:一個範例
第 26 章
“尾模構造器”程式轉換
1
消歧義
2
危險:脫離尾模構造
3
轉換細節
4
目前的限制
第 27 章
使用 ThreadSanitizer 執行期偵測資料競爭
1
概述與用法
2
效能影響
3
偽陰性和偽陽性
4
執行期選項
5
連結的指南
6
訊號傳遞的變更
第四部分 OCaml 函式庫
第 28 章
核心函式庫
1
內建類型和預定義的例外
2
模組
Stdlib
:初始開啟的模組
第 29 章
標準函式庫
第 30 章
編譯器前端
第 31 章
unix 函式庫:Unix 系統呼叫
第 32 章
str 函式庫:正規表達式和字串處理
第 33 章
runtime_events 函式庫
第 34 章
threads 函式庫
第 35 章
dynlink 函式庫:動態載入和連結物件檔案
第 36 章
最近移除或移動的函式庫 (Graphics, Bigarray, Num, LablTk)
1
Graphics 函式庫
2
Bigarray 函式庫
3
Num 函式庫
4
Labltk 函式庫和 OCamlBrowser
第五部分 索引
首頁
前言 »
版權所有 © 2024 法國國家資訊與自動化研究所