系統(tǒng)之家 - 系統(tǒng)光盤(pán)下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > IT快訊 > 詳細(xì)頁(yè)面

C++20協(xié)程實(shí)驗(yàn)性支持已合并到GCC 10

編輯:jiayuan 2020-01-29 11:38:58 來(lái)源于:IT之家

  協(xié)程(Coroutines)是C++20的主要功能之一,它允許某個(gè)函數(shù)在暫停執(zhí)行之后再恢復(fù)。而從新近曝光的GCC項(xiàng)目的郵件列表記錄來(lái)看,對(duì)C++20協(xié)程的實(shí)驗(yàn)性支持目前已經(jīng)被合并到GCC 10編譯器中!下面讓我們來(lái)了解一下。

C++20協(xié)程實(shí)驗(yàn)性支持已合并到GCC 10

  據(jù)悉,官方對(duì)協(xié)程的定義是:

  A coroutine is a function that can suspend execution to be resumed later.

  協(xié)程是能暫停執(zhí)行以在之后恢復(fù)的函數(shù)。

  若函數(shù)的定義實(shí)現(xiàn)了以下任何內(nèi)容之一,則它是協(xié)程:

  • 使用 co_await 運(yùn)算符暫停執(zhí)行,直至恢復(fù)

  1. 01  task《》 tcp_echo_server() {
  2. 02  char
  3. 03  data[
  4. 04  1024
  5. 05 。;
  6. 06  for (;;) {
  7. 07  size_t n = co_await socket.async_read_some(buffer(data));
  8. 08  co_await async_write(socket, buffer(data, n));
  9. 09  }
  10. 10  }
復(fù)制代碼
  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));   }   }

  • 使用關(guān)鍵詞 co_yield 暫停執(zhí)行并返回一個(gè)值

  1. 01  generator《
  2. 02  int
  3. 03  》 iota(
  4. 04  int
  5. 05  n =
  6. 06  0
  7. 07 。 {
  8. 08  while
  9. 09 。
  10. 10  true
  11. 11 。
  12. 12  co_yield n++;
  13. 13  }
復(fù)制代碼
  generator《   int   》 iota(   int   n =   0  。 {   while  。   true   )   co_yield n++;   }

  使用關(guān)鍵詞 co_return 完成執(zhí)行并返回一個(gè)值

  1. 01  lazy《
  2. 02  int
  3. 03  》 f() {
  4. 04  co_return
  5. 05  7
  6. 06  ;
  7. 07  }
復(fù)制代碼
  lazy《   int   》 f() {   co_return   7   ;   }

  據(jù)了解,對(duì)協(xié)程支持的開(kāi)發(fā)工作已進(jìn)行了數(shù)月,現(xiàn)在作為GCC 10最新增添的功能,尚屬實(shí)驗(yàn)性的實(shí)現(xiàn)。

  由于此功能處于早期狀態(tài)以及在GCC 10開(kāi)發(fā)周期的后期階段才被添加進(jìn)來(lái),C++20協(xié)程在 -std=c++2a 中也不會(huì)公開(kāi),而且現(xiàn)在明確要求設(shè)置 -fcoroutines 標(biāo)志方可使用。

  另外,根據(jù)GCC對(duì) C++標(biāo)準(zhǔn)的支持情況頁(yè)面,GCC還會(huì)支持C++的原子操作(atomic compare-and-exchange),完成即時(shí)函數(shù)( immediate functions)的工作,獲得對(duì) C++ modules的支持以及其他功能。不過(guò)由于GCC 10已經(jīng)處于第四階段的開(kāi)發(fā)周期中,因此直到明年在 GCC 11上才可以在此編譯器中看到完整的、可投入生產(chǎn)環(huán)境使用的 C++20支持。

標(biāo)簽 gcc

發(fā)表評(píng)論

0

沒(méi)有更多評(píng)論了

評(píng)論就這些咯,讓大家也知道你的獨(dú)特見(jiàn)解

立即評(píng)論

以上留言僅代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場(chǎng)

官方交流群 軟件收錄