- Go語言高級編程(第2版)
- 柴樹杉 曹春暉
- 688字
- 2025-08-07 17:56:10
1.2.4 Alef——Phil Winterbottom,1993
在Go語言出現之前,Alef語言是比較完美的并發語言,Alef語法和運行時基本是無縫兼容C語言。Alef語言對線程并發體和進程并發體都提供了支持,其中proc receive(c)
以線程方式啟動一個并發體,task receive(c)
以線程方式啟動一個并發體,它們之間通過通道c
進行通信。不過,由于Alef語言同時支持進程并發體和線程并發體,而且在并發體中可以再次啟動更多的并發體,因此Alef的并發狀態異常復雜。同時Alef沒有自動垃圾收集機制(Alef保留的C語言靈活的指針特性也導致自動垃圾收集機制實現比較困難),各種資源充斥于不同的線程和進程之間,導致并發體的內存資源管理也異常復?雜。
Alef語言只在Plan 9系統中得到過短暫的支持,其他操作系統中并沒有實際可以運行的Alef開發環境。關于Alef語言的資料也只有Plan 9 Programmer’s Manual(Plan 9程序員手冊)中的“Alef Language Reference Manual”(Alef語言參考手冊)和“Alef User’s Guide”(Alef用戶指南)部分,因此在貝爾實驗室之外關于Alef語言的討論并不?多。
圖1-5展示了Alef用戶指南中給出的一個可能的并發體狀?態。

圖1-5 Alef并發模型
Alef語言并發版本的“Hello, World”程序如下:
#include <alef.h> void receive(chan(byte*) c) { byte *s; s = <- c; print("%s\n", s); terminate(nil); } void main(void) { chan(byte*) c; alloc c; proc receive(c); task receive(c); c <- = "hello proc or task"; c <- = "hello proc or task"; print("done\n"); terminate(nil); }
程序開頭的#include <
alef
.h>
語句用于包含Alef語言的運行時庫。receive()
是一個普通函數,用作程序中每個并發體的入口函數;main()
函數中的alloc
c
語句先創建一個chan(byte*)
類型的通道,類似Go語言的make(chan []byte)
語句;然后分別以進程和線程的方式運行receive()
函數,啟動并發體;啟動并發體之后,main()
函數向c
通道發送了兩個字符串數據;而以進程和線程狀態運行的receive()
函數會以不確定的順序先后從通道收到數據后,分別打印字符串;最后每個并發體都通過調用terminate(nil)
來結束自?己。
Alef的語法和C語言基本保持一致,可以認為它是在C語言的語法基礎上增加了并發編程相關的特性,可以看作是另一個維度的C++語?言。
- Mastering Visual Studio 2017
- 深入淺出數據科學:Python編程
- 工程軟件開發技術基礎
- RTC程序設計:實時音視頻權威指南
- Web Application Development with R Using Shiny(Second Edition)
- 零基礎學Python網絡爬蟲案例實戰全流程詳解(高級進階篇)
- 單片機應用與調試項目教程(C語言版)
- Java:High-Performance Apps with Java 9
- 愛上micro:bit
- 新印象:解構UI界面設計
- Mastering JavaScript
- Python滲透測試編程技術:方法與實踐(第2版)
- Learning Redux
- Unity與C++網絡游戲開發實戰:基于VR、AI與分布式架構
- R語言編程基礎