crubit
abseil-cpp
crubit | abseil-cpp | |
---|---|---|
13 | 54 | |
556 | 13,955 | |
4.9% | 1.3% | |
9.8 | 9.5 | |
3 days ago | 6 days ago | |
C++ | C++ | |
GNU General Public License v3.0 or later | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
crubit
-
Making C++ Safe Without Borrow Checking, Reference Counting, or Tracing GC
See also:
Thomas Neumann's current proposal for memory safe C++ using dependency tracking:
- https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p27...
Google's proposal for memory safety using Rust-like lifetime analysis:
- https://discourse.llvm.org/t/rfc-lifetime-annotations-for-c/...
- https://github.com/google/crubit/tree/main/lifetime_analysis
- Will Carbon Replace C++?
-
Supporting the Use of Rust in the Chromium Project
For the people who are curious: crubit is an attempt to develop the way to seamlessly integrate C++ and Rust.
-
Crubit: C++/Rust Bidirectional Interop Tool
Please see the experimentation and proposals at https://github.com/google/crubit/blob/main/docs/lifetime_annotations_cpp.md and https://github.com/google/crubit/blob/main/docs/lifetimes_static_analysis.md
-
The Unicode Consortium announces ICU4X 1.0, its new high-performance internationalization library. It's written in Rust, with official C++ and JavaScript wrappers available.
autocxx is good, though crubit is aiming for direct bidirectional interop
-
Programming languages endorsed for server-side use at Meta
The areas you mentioned (CLI, web services, low level systems programming) are not mutually exclusive. Doing a good job on one doesn't mean something else is affected.
The folks who worked on the most popular command line argument parser (https://docs.rs/clap/latest/clap/#example) made a positive contribution that didn't detract from any other use case.
Similarly, the folks working on improving Rust for web services will also make it better for systems programming. In a blog post published today (https://blog.rust-lang.org/inside-rust/2022/07/27/keyword-ge...), they discuss keyword generics, a feature that will be equally helpful for `async` code and `const` functions evaluated at compile time.
There is already some interoperability with C++ (http://cxx.rs) and ongoing research into automating this interoperability (https://github.com/google/autocxx, https://github.com/google/crubit). Feels like there's enough effort
-
Carbon Language: An experimental successor to C++
This language was started by folks at Google. (Although it's interesting that they're publishing it under a separate github org, which suggests ambitions beyond Google's needs.) Google has a huge, performance-sensitive C++ codebase. At Google, major product teams' backends are typically written in C++, as well as common infrastructure like D (disk server), Colossus (distributed filesystem), Spanner (distributed SQL database), and Borg (cluster management). More than a few people would love for it all to be be written in Rust instead, but migration would be challenging, to say the least. I'm told people are looking into it—see Crubit for example. But AFAIK, no one's decided yet whether Google will stay with C++ for all these things, migrate some to Rust, migrate some to Carbon, and/or do something else entirely.
It's currently unclear if Rust can interop with C++ with high fidelity. For example https://docs.rs/moveit/latest/moveit/ and https://github.com/google/crubit/blob/main/rs_bindings_from_... provide functionality to use non-trivially relocatable C++ types from Rust.
abseil-cpp
- Sane C++ Libraries
- Open source collection of Google's C++ libraries
- Is Ada safer than Rust?
-
Appending to an std:string character-by-character: how does the capacity grow?
Yeah, it's nice! And Abseil does it, IFF you use LLVM libc++.
https://github.com/abseil/abseil-cpp/blob/master/absl/string...
The standard adopted it as resize_and_overwrite. Which I think is a little clunky.
-
Shaving 40% Off Google’s B-Tree Implementation with Go Generics
This may be confusing to those familiar with Google's libraries. The baseline is the Go BTree, which I personally never heard of until just now, not the C++ absl::btree_set. The benchmarks aren't directly comparable, but the C++ version also comes with good microbenchmark coverage.
https://github.com/google/btree
https://github.com/abseil/abseil-cpp/blob/master/absl/contai...
- Faster Sorting Beyond DeepMind’s AlphaDev
-
“Once” one-time concurrent initialization with an integer
An implementation of call_once that accommodates callbacks that throw: https://github.com/abseil/abseil-cpp/blob/master/absl/base/c...
-
[R] AlphaDev discovers faster sorting algorithms
I wouldn't say it's that cryptic. It's just a few bitwise rotations/shifts/xor operations.
-
Deepmind Alphadev: Faster sorting algorithms discovered using deep RL
You can see hashing optimizations as well https://www.deepmind.com/blog/alphadev-discovers-faster-sort..., https://github.com/abseil/abseil-cpp/commit/74eee2aff683cc7d...
I was one of the members who reviewed expertly what has been done both in sorting and hashing. Overall it's more about assembly, finding missed compiler optimizations and balancing between correctness and distribution (in hashing in particular).
It was not revolutionary in a sense it hasn't found completely new approaches but converged to something incomprehensible for humans but relatively good for performance which proves the point that optimal programs are very inhuman.
Note that for instructions in sorting, removing them does not always lead to better performance, for example, instructions can run in parallel and the effect can be less profound. Benchmarks can lie and compiler could do something differently when recompiling the sort3 function which was changed. There was some evidence that the effect can come from the other side.
For hashing it was even funnier, very small strings up to 64 bit already used 3 instructions like add some constant -> multiply 64x64 -> xor upper/lower. For bigger ones the question becomes more complicated, that's why 9-16 was a better spot and it simplified from 2 multiplications to just one and a rotation. Distribution on real workloads was good, it almost passed smhasher and we decided it was good enough to try out in prod. We did not rollback as you can see from abseil :)
But even given all that, it was fascinating to watch how this system was searching and was able to find particular programs can be further simplified. Kudos to everyone involved, it's a great incremental change that can bring more results in the future.
-
Backward compatible implementations of newer standards constructs?
Check out https://abseil.io. It offers absl::optional, which is a backport of std::optional.
What are some alternatives?
carbon-lang - Carbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)
Folly - An open-source C++ library developed and used at Facebook.
DIPs - D Improvement Proposals
Boost - Super-project for modularized Boost
verdigris - Qt without moc: set of macros to use Qt without needing moc
spdlog - Fast C++ logging library.
go-sumtype - A simple utility for running exhaustiveness checks on Go "sum types."
Qt - Qt Base (Core, Gui, Widgets, Network, ...)
go-server-core - An attempt to build a plugin based server
EASTL - Obsolete repo, please go to: https://github.com/electronicarts/EASTL
autocxx - Tool for safe ergonomic Rust/C++ interop driven from existing C++ headers
BDE - Basic Development Environment - a set of foundational C++ libraries used at Bloomberg.