Google開源了Abseil,為C++和Python開發(fā)提供支持

責(zé)任編輯:editor004

作者:Abel Avram

2017-10-09 11:06:01

摘自:INFOQ

Google公開了其項(xiàng)目內(nèi)部使用的一系列C++庫,隨后還會(huì)公開其Python庫。Abseil是Google代碼庫的最基本構(gòu)建模塊,其代碼經(jīng)過了生產(chǎn)環(huán)節(jié)測(cè)試,此后還會(huì)繼續(xù)得到完全的維護(hù)。

Google公開了其項(xiàng)目內(nèi)部使用的一系列C++庫,隨后還會(huì)公開其Python庫。

Abseil已在Google歷經(jīng)十多年的開發(fā),它的目的是為Google編程人員在各種項(xiàng)目上的工作需求提供支持,這些項(xiàng)目包括Protocol Buffers、gRPC和TensorFlow等。Google評(píng)價(jià)Abseil為:

它是從Google內(nèi)部代碼塊中抽取出來的一系列最基礎(chǔ)的軟件庫。作為基本的組成部分,這些軟件庫支撐了幾乎全部Google在運(yùn)行的項(xiàng)目。以前這些API是零零散散地嵌入在Google的大部分開源項(xiàng)目中,現(xiàn)在我們將它們規(guī)整在一起,形成這樣一個(gè)全面的項(xiàng)目。

Abseil是Google代碼庫的最基本構(gòu)建模塊,其代碼經(jīng)過了生產(chǎn)環(huán)節(jié)測(cè)試,此后還會(huì)繼續(xù)得到完全的維護(hù)。

最初,Abseil提供的抽象并非C++ 14或C++ 17的組成部分,但最終它們已被添加到C++標(biāo)準(zhǔn)中。例如,Google提供一個(gè)稱為StringPiece的類型,隨后C++ 17也添加了一個(gè)稱為std::string_view的相近類型。為了與新的C++ 17類型具有一致的API,Google將StringPiece重構(gòu)為absl::string_view。從底層機(jī)制上看,如果開發(fā)人員正在使用的是C++ 17,那么Abseil的string_view默認(rèn)為標(biāo)準(zhǔn)實(shí)現(xiàn);如果開發(fā)人員正在使用的是C++ 17以前的版本,那么string_view默認(rèn)為Google的實(shí)現(xiàn)。

使用Abseil的優(yōu)點(diǎn)在于可以訪問一些目前依然尚未添加到標(biāo)準(zhǔn)中的C++特性,并且一旦這些特性被添加到C++標(biāo)準(zhǔn)中,Google保證會(huì)重構(gòu)這些特性為默認(rèn)使用標(biāo)準(zhǔn)實(shí)現(xiàn)。Google鼓勵(lì)開發(fā)人員使用Abseil,并提及已有超過兩億五千萬行的C++代碼使用它,并且?guī)缀跛袕念^開始構(gòu)建的項(xiàng)目都使用了它。這意味著,Abseil已被Google廣為使用,并出于與項(xiàng)目需求同步的考慮而得以頻繁維護(hù)。

Abseil中包括如下的庫:

base:初始化,以及其它的基礎(chǔ)代碼。 algorithm:對(duì)C++的庫的補(bǔ)充,并為原算法提供了基于容器的版本。 container:提供了更多的STL類型容器。 debugging:用于檢查泄漏的調(diào)試庫。 memory:包括兼容C++ 11版本的std::make_unique()和內(nèi)存管理。 meta:包括兼容C++ 11版本的類型檢查,在C++ 14和C++ 17版本的C++ 庫中可用。 numeric:兼容C++ 11的128位整數(shù)。 strings:各種字符串工具。 synchronization:并發(fā)原語和同步抽象。 time:抽象了絕對(duì)時(shí)間點(diǎn)操作和時(shí)區(qū)操作。 types:非容器工具的類型。

Abseil的代碼采用Apache許可,已發(fā)布在GitHub上。其Python版本的軟件庫將隨后發(fā)布。

查看英文原文: Google Open Sources Abseil, a Collection of C++ and Python Utilities

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)