GCC 10 已添加對C++20 協程的實驗性支持
GCC項目的郵件列表記錄顯示,對C++20協程的實驗性支持已合併到GCC 10編譯器中。協程(Coroutines)是C++20的主要功能之一,它允許某個函數在暫停執行之後再恢復。有關C++協程的示例語法和更多詳細信息請在 cppreference.com 上查看。可以看到,官方對協程的定義是:
A coroutine is a function that can suspend execution to be resumed later.
協程是能暫停執行以在之後恢復的函數。
若函數的定義實現了以下任何內容之一,則它是協程:
- 使用
co_await
運算符暫停執行,直至恢復
task<> tcp_echo_server() { char data[1024]; for (;;) { size_t n = co_await socket.async_read_some(buffer(data)); co_await async_write(socket, buffer(data, n)); }}
- 使用關鍵詞
co_yield
暫停執行並返回一個值
generator<int> iota(int n = 0) { while(true) co_yield n++;}
- 使用關鍵詞 co_return 完成執行並返回一個值
lazy<int> f() { co_return 7;}
據了解,對協程支持的開發工作已進行了數月,現在作為GCC 10 最新增添的功能,尚屬實驗性的實現。
由於此功能處於早期狀態以及在GCC 10開發週期的後期階段才被添加進來,C++20協程在 -std=c++2a 中也不會公開,而且現在明確要求設置 -fcoroutines 標誌方可使用。
有關GCC協程支持狀態的更多詳細信息請查看此郵件列表帖子。
另外,根據GCC對C++標準的支持情況頁面,GCC還會支持C++的原子操作(atomic compare-and-exchange),完成即時函數( immediate functions)的工作,獲得對C++ modules的支持以及其他功能。不過由於GCC 10已經處於第四階段的開發週期中,因此直到明年在GCC 11上才可以在此編譯器中看到完整的、可投入生產環境使用的C++20支持。