You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.9 KiB
77 lines
2.9 KiB
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
namespace facebook {
|
|
namespace butter {
|
|
|
|
/*
|
|
* `Butter` is a minimal collection of basic tools borrowed from other low-level
|
|
* general purpose libraries (like Folly, Abseil or Boost). The main goals of
|
|
* Butter:
|
|
* - Make the codebase more portable;
|
|
* - Make the dependency list explicit (by decoupling it as a dependency list of
|
|
* Butter);
|
|
* - Make relying on modern C++ patterns and tools in code simple and easy.
|
|
* - Make executing experiments with different dependencies easier.
|
|
* - Limit reliance on third-party libraries eventually.
|
|
*
|
|
* Target C++ Version
|
|
* ------------------
|
|
* Currently, Butter targets C++17.
|
|
*
|
|
* The Scope
|
|
* ---------
|
|
* What should be part of Butter and what should not? Should I add some piece of
|
|
* functionality in the Butter? Here is a quick checklist.
|
|
*
|
|
* As of now, Butter is relatively permissive per the guidance below:
|
|
*
|
|
* If one of the following is true, yes, go for it:
|
|
* - If some feature is already in some future C++ standard (possibly in draft
|
|
* stage) and it's already implemented in some 3rd party library.
|
|
* - If some standardized feature of C++ is implemented in the standard not in
|
|
* the most efficient way (because the standard enforces some tricky
|
|
* constraints, like always-valid iterators, which nobody uses and should use),
|
|
* but you have a library that does it right providing exact same interface.
|
|
*
|
|
* If one of the following is true, please do *NOT* do it (at least as part of
|
|
* the library):
|
|
* - You want to use some very fancy pattern that your favorite library (but
|
|
* nothing else) provides, and You want to make this pattern very command in the
|
|
* code base. Your hope is that this pattern will conquer the world and be
|
|
* a part of the C++ standard eventually.
|
|
* - You favorite library provides some general purpose container that 10x times
|
|
* faster than the standard one, so You want to use that in the code base. That
|
|
* container does not have compatible API though (because it's a clear trade-off
|
|
* with efficiency, of course).
|
|
*
|
|
* Note that eventually Butter will restrict the API collection to reduce
|
|
* reliance on non-standard C++ builtin libraries. That way, the API footprint
|
|
* stays small and is limited to just the essential APIs. This restriction is
|
|
* currently a work in progress.
|
|
*/
|
|
|
|
/*
|
|
* Configuration
|
|
*/
|
|
|
|
/*
|
|
* Enables using Folly containers instead of standard ones (such as map, vector,
|
|
* small_vector, optional and etc.)
|
|
* Custom containers are only enabled in release mode. Using custom stuff
|
|
* complicates debugging process because it breaks embedded into IDE
|
|
* introspections mechanisms.
|
|
*/
|
|
#ifndef DEBUG
|
|
#define BUTTER_USE_FOLLY_CONTAINERS
|
|
#endif
|
|
|
|
} // namespace butter
|
|
} // namespace facebook
|