folly
?Folly (disingkat secara longgar setelah Facebook Open Source Library) adalah perpustakaan komponen C++17 yang dirancang dengan mempertimbangkan kepraktisan dan efisiensi. Folly berisi berbagai komponen perpustakaan inti yang digunakan secara luas di Facebook . Secara khusus, hal ini sering kali merupakan ketergantungan pada upaya C++ open source Facebook lainnya dan tempat di mana proyek-proyek tersebut dapat berbagi kode.
Ini melengkapi (bukan bersaing melawan) penawaran seperti Boost dan tentu saja std
. Faktanya, kita mulai mendefinisikan komponen kita sendiri hanya ketika sesuatu yang kita perlukan tidak tersedia, atau tidak memenuhi profil kinerja yang dibutuhkan. Kami berusaha keras untuk menghapus hal-hal dari kebodohan jika atau ketika std
atau Boost membuat hal-hal tersebut menjadi usang.
Kekhawatiran kinerja meresapi sebagian besar Folly, kadang-kadang mengarah pada desain yang lebih istimewa daripada yang seharusnya (lihat misalnya PackedSyncPtr.h
, SmallLocks.h
). Kinerja yang baik dalam skala besar adalah tema pemersatu di seluruh Folly.
Kebodohan adalah kumpulan komponen yang relatif independen, beberapa di antaranya sederhana seperti beberapa simbol. Tidak ada batasan pada ketergantungan internal, artinya modul kebodohan tertentu dapat menggunakan komponen kebodohan lainnya.
Semua simbol didefinisikan dalam folly
namespace tingkat atas, kecuali tentu saja makro. Nama makro adalah ALL_UPPERCASE dan harus diawali dengan FOLLY_
. folly
namespace mendefinisikan namespace internal lainnya seperti internal
atau detail
. Kode pengguna tidak boleh bergantung pada simbol di namespace tersebut.
Folly juga memiliki direktori experimental
. Penunjukan ini terutama berarti bahwa kami merasa API mungkin akan banyak berubah seiring berjalannya waktu. Kode ini, biasanya, masih banyak digunakan dan telah diuji dengan baik.
Di tingkat atas Folly menggunakan skema klasik "gagap" folly/folly
yang digunakan oleh Boost dan lainnya. Direktori pertama berfungsi sebagai root instalasi perpustakaan (dengan kemungkinan pembuatan versi ala folly-1.0/
), dan yang kedua adalah untuk membedakan perpustakaan ketika memasukkan file, misalnya #include <folly/FBString.h>
.
Struktur direktorinya datar (meniru struktur namespace), artinya kami tidak memiliki hierarki direktori yang rumit (ada kemungkinan hal ini akan berubah di versi mendatang). Subdirektori experimental
berisi file yang digunakan di dalam kebodohan dan mungkin di Facebook tetapi tidak dianggap cukup stabil untuk penggunaan klien. Kode Anda tidak boleh menggunakan file dalam folly/experimental
agar tidak rusak saat Anda memperbarui Kebodohan.
Subdirektori folly/folly/test
mencakup unittests untuk semua komponen, biasanya diberi nama ComponentXyzTest.cpp
untuk setiap ComponentXyz.*
. Direktori folly/folly/docs
berisi dokumentasi.
Karena struktur folly yang cukup datar, cara terbaik untuk melihat isinya adalah dengan melihat header di direktori folly/
tingkat atas. Anda juga dapat memeriksa folder docs
untuk dokumentasi, dimulai dengan ikhtisar.
Kebodohan dipublikasikan di GitHub di https://github.com/facebook/folly.
Karena folly tidak memberikan jaminan kompatibilitas ABI dari komit ke komit, kami biasanya merekomendasikan membangun folly sebagai perpustakaan statis.
kebodohan mendukung gcc (5.1+), dentang, atau MSVC. Ini harus berjalan di Linux (x86-32, x86-64, dan ARM), iOS, macOS, dan Windows (x86-64). Versi CMake hanya diuji pada beberapa platform berikut; minimal, kami bertujuan untuk mendukung macOS dan Linux (pada rilis Ubuntu LTS terbaru atau yang lebih baru.)
getdeps.py
Skrip ini digunakan oleh banyak alat OSS Meta. Ini akan mengunduh dan membangun semua dependensi yang diperlukan terlebih dahulu, dan kemudian akan memanggil cmake dll untuk membangun kebodohan. Ini akan membantu memastikan bahwa Anda membangun dengan versi yang relevan dari semua perpustakaan dependen, dengan mempertimbangkan versi apa yang diinstal secara lokal di sistem Anda.
Itu ditulis dengan python jadi Anda memerlukan python3.6 atau lebih baru di PATH Anda. Ia bekerja di Linux, macOS dan Windows.
Pengaturan untuk build cmake folly disimpan dalam manifes getdeps build/fbcode_builder/manifests/folly
, yang dapat Anda edit secara lokal jika diinginkan.
Jika di Linux atau MacOS (dengan homebrew terinstal) Anda dapat menginstal dependensi sistem untuk menghemat pembuatannya:
# Clone the repo
git clone https://github.com/facebook/folly
# Install dependencies
cd folly
sudo ./build/fbcode_builder/getdeps.py install-system-deps --recursive
Jika Anda ingin melihat paket sebelum menginstalnya:
./build/fbcode_builder/getdeps.py install-system-deps --dry-run --recursive
Di platform lain atau jika di Linux dan tanpa ketergantungan sistem, getdeps.py
sebagian besar akan mengunduh dan membuatnya untuk Anda selama langkah pembuatan.
Beberapa dependensi yang digunakan dan diinstal getdeps.py
adalah:
Skrip ini akan mengunduh dan membangun semua dependensi yang diperlukan terlebih dahulu, dan kemudian akan memanggil cmake dll untuk membangun kebodohan. Ini akan membantu memastikan bahwa Anda membangun dengan versi yang relevan dari semua perpustakaan dependen, dengan mempertimbangkan versi apa yang diinstal secara lokal di sistem Anda.
getdeps.py
saat ini membutuhkan python 3.6+ untuk berada di jalur Anda.
getdeps.py
akan memanggil cmake dll.
# Clone the repo
git clone https://github.com/facebook/folly
cd folly
# Build, using system dependencies if available
python3 ./build/fbcode_builder/getdeps.py --allow-system-packages build
Ini menempatkan output di area awal:
installed/folly/lib/libfolly.a
: Perpustakaan Anda juga dapat menentukan argumen --scratch-path
untuk mengontrol lokasi direktori awal yang digunakan untuk pembangunan. Anda dapat menemukan lokasi pemasangan awal default dari log atau dengan python3 ./build/fbcode_builder/getdeps.py show-inst-dir
.
Ada juga argumen --install-dir
dan --install-prefix
untuk memberikan kontrol yang lebih baik terhadap direktori instalasi. Namun, karena folly tidak memberikan jaminan kompatibilitas antar commit, kami umumnya merekomendasikan membangun dan menginstal perpustakaan ke lokasi sementara, dan kemudian mengarahkan proyek Anda ke lokasi sementara ini, daripada menginstal folly di direktori instalasi sistem tradisional. misalnya, jika Anda membangun dengan CMake, Anda dapat menggunakan variabel CMAKE_PREFIX_PATH
untuk memungkinkan CMake menemukan kebodohan dalam direktori instalasi sementara ini ketika membangun proyek Anda.
Jika Anda ingin memanggil cmake
lagi untuk mengulangi, ada keluaran skrip run_cmake.py
yang berguna di direktori pembuatan awal. Anda dapat menemukan direktori build awal dari log atau dengan python3 ./build/fbcode_builder/getdeps.py show-build-dir
.
Secara default getdeps.py
akan membuat tes untuk kebodohan. Untuk menjalankannya:
cd folly
python3 ./build/fbcode_builder/getdeps.py --allow-system-packages test
build.sh
/ build.bat
pembungkus build.sh
dapat digunakan di Linux dan MacOS, di Windows gunakan skrip build.bat
sebagai gantinya. Ini adalah pembungkus getdeps.py
.
Jika Anda tidak ingin getdeps memanggil cmake untuk Anda, maka secara default, pembuatan pengujian dinonaktifkan sebagai bagian dari target all
CMake. Untuk membuat pengujian, tentukan -DBUILD_TESTS=ON
ke CMake pada waktu konfigurasi.
Catatan jika Anda ingin memanggil cmake
lagi untuk mengulangi build getdeps.py
, ada keluaran skrip run_cmake.py
yang berguna di direktori build jalur awal. Anda dapat menemukan direktori build awal dari log atau dengan python3 ./build/fbcode_builder/getdeps.py show-build-dir
.
Menjalankan tes dengan ctests juga berfungsi jika Anda melakukan cd ke direktori build, misalnya (cd $(python3 ./build/fbcode_builder/getdeps.py show-build-dir) && ctest)
Jika Anda menginstal boost, gtest, atau dependensi lain di lokasi non-default, Anda dapat menggunakan variabel CMAKE_INCLUDE_PATH
dan CMAKE_LIBRARY_PATH
untuk membuat tampilan CMAKE juga mencari file header dan pustaka di lokasi non-standar. Misalnya, untuk juga mencari direktori /alt/include/path1
dan /alt/include/path2
untuk file header dan direktori /alt/lib/path1
dan /alt/lib/path2
untuk perpustakaan, Anda dapat memanggil cmake
sebagai berikut:
cmake
-DCMAKE_INCLUDE_PATH=/alt/include/path1:/alt/include/path2
-DCMAKE_LIBRARY_PATH=/alt/lib/path1:/alt/lib/path2 ...
Gunakan pendekatan getdeps.py
di atas. Kami menguji di CI di Ubuntu LTS, dan terkadang di distro lain.
Jika Anda menemukan kumpulan paket sistem kurang tepat untuk distro pilihan Anda, Anda dapat menentukan penggantian spesifik versi distro dalam manifes ketergantungan (misalnya https://github.com/facebook/folly/blob/main/build/fbcode_builder/ manifes/meningkatkan ). Anda mungkin dapat membuatnya berfungsi pada distribusi turunan Ubuntu/Debian atau Fedora/Redhat terbaru.
Pada saat penulisan (Des 2021) terdapat penghentian build pada sistem berbasis GCC 11.x di lang_badge_test. Jika Anda tidak memerlukan fungsionalitas lencana, Anda dapat menyiasatinya dengan mengomentarinya dari CMakeLists.txt (sayangnya fbthrift membutuhkannya)
Perhatikan bahwa banyak pengujian dinonaktifkan karena kebodohan build Windows, Anda dapat melihatnya di log dari langkah konfigurasi cmake, atau dengan mencari WINDOWS_DISABLED di CMakeLists.txt
Meskipun demikian, build getdeps.py
berfungsi di Windows dan diuji di CI.
Jika mau, Anda dapat mencoba Vcpkg. kebodohan tersedia di Vcpkg dan rilis dapat dibuat melalui vcpkg install folly:x64-windows
.
Anda juga dapat menggunakan vcpkg install folly:x64-windows --head
untuk membangun melawan main
.
build getdeps.py
berfungsi di macOS dan diuji di CI, namun jika mau, Anda dapat mencoba salah satu manajer paket macOS
folly tersedia sebagai Formula dan rilis dapat dibuat melalui brew install folly
.
Anda juga dapat menggunakan folly/build/bootstrap-osx-homebrew.sh
untuk membangun melawan main
:
./folly/build/bootstrap-osx-homebrew.sh
Ini akan membuat direktori build _build
di tingkat atas.
Instal paket yang diperlukan dari MacPorts:
sudo port install
boost
cmake
gflags
git
google-glog
libevent
libtool
lz4
lzma
openssl
snappy
xz
zlib
Unduh dan instal konversi ganda:
git clone https://github.com/google/double-conversion.git
cd double-conversion
cmake -DBUILD_SHARED_LIBS=ON .
make
sudo make install
Unduh dan instal kebodohan dengan parameter yang tercantum di bawah ini:
git clone https://github.com/facebook/folly.git
cd folly
mkdir _build
cd _build
cmake ..
make
sudo make install