Google Abseil基礎庫的簡單介紹

2021-09-23 14:06:55 字數 1465 閱讀 9375

概述:abseil已在google歷經十多年的開發,它的目的是為google程式設計人員在各種專案上的工作需求提供支援,這些專案包括protocol buffers、grpc和tensorflow等。

google公開了其專案內部使用的一系列c++庫,隨後還會公開其python庫。

abseil已在google歷經十多年的開發,它的目的是為google程式設計人員在各種專案上的工作需求提供支援,這些專案包括protocol buffers、grpc和tensorflow等。google評價abseil為:

最初,abseil提供的抽象並非c++ 14或c++ 17的組成部分,但最終它們已被新增到c++標準中。例如,google提供乙個稱為stringpiece的型別,隨後c++ 17也新增了乙個稱為std::string_view的相近型別。為了與新的c++ 17型別具有一致的api,google將stringpiece重構為absl::string_view。從底層機制上看,如果開發人員正在使用的是c++ 17,那麼abseil的string_view預設為標準實現;如果開發人員正在使用的是c++ 17以前的版本,那麼string_view預設為google的實現。

使用abseil的優點在於可以訪問一些目前依然尚未新增到標準中的c++特性,並且一旦這些特性被新增到c++標準中,google保證會重構這些特性為預設使用標準實現。google鼓勵開發人員使用abseil,並提及已有超過兩億五千萬行的c++**使用它,並且幾乎所有從頭開始構建的專案都使用了它。這意味著,abseil已被google廣為使用,並出於與專案需求同步的考慮而得以頻繁維護。

abseil中包括如下的庫:

abseil的**採用apache許可,已發布在github上。其python版本的軟體庫將隨後發布。

最近 google 開源了其內部多年使用的 c++ **庫 abseil 作為 c++ 標準庫的補充,並會對其進行持續更新,本文對其進行簡要介紹。

一句話概括,這個庫的特點是用 c++ 11 的**實現了許多 c++ 14 和 c++ 17 的特性,所以你的編譯器也要支援 c++ 11(gcc 4.8+/clang 3.3+,不同平台略有差異)。

需要注意一點的是 google 內部**是不支援異常(excepton)的,c++ 異常的優劣之處有許多討論(知乎上的討論),不用異常可以在一定程度上利於編譯器優化,這裡主要可能還是歷史支援原因。如果你的專案是支援異常的建議要好好測試一下,具體參考下 abseil / abseil fundamentals 。

abseil 簡要組成部分如下:

一些使用要點:

另外 google 還開源了乙份 python **庫 abseil-py 。

[1] 選擇 abseil 的原因

[2] 相容性指導

[3] abseil / design notes :設計理念,現在還只有兩篇文章,後續應該會更新

[4] : 這裡會每週介紹一些谷歌內容的 c++ tips

靜態庫基礎

靜態庫的使用 靜態庫的操作工具 gcc和ar 命令。編寫及使用靜態庫 1 設計庫原始碼 pr1.c 和 pr2.c root billstone make lib cat pr1.c void print1 root billstone make lib cat pr2.c void print2 ...

C動態庫 靜態庫基礎

一 基本概念 依據鏈結階段來分,庫有兩種 靜態庫 a lib 和動態庫 so dll 二者主要的不同點在於 被載入的時刻不同,靜態庫的 在編譯過程中已經被載入可執行程式,因此檔案較大 動態庫的 是在可執行程式執行時才載入記憶體的,在編譯過程中僅簡單的引用,因此 體積較小。二者的特點總結如下 靜態庫 ...

資料庫基礎

一.資料庫事物特徵 1.atomic 原子性 不可分割 2.consistency 一致性 參照完整 3.isolation 隔離性 防止併發 4.durability 永續性 永久儲存資料 二.事物和併發 1.併發問題 第一類丟失,髒讀,虛讀,不可重複讀,第二類丟失更新 不可重複讀的特例 2.鎖的...