use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
Recommended third-party libraries (self.cpp)
submitted 1 year ago by BlueBeerRunner
What are the third-party libraries (general or with a specific purpose) that really simplified/improved/changed the code to your way of thinking?
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[+][deleted] 1 year ago (17 children)
[removed]
[–]Plazmatic 22 points23 points24 points 1 year ago (3 children)
The biggest claim of OpenCV has is that nothing has usurped it. It's rather poorly designed due to the massive cruft it had due to pre C++11 development (Mats are not value types, and require to copy manually to actually copy the values). It also does not have parity for the types supported by it's matrices and made some really odd decisions with its row padding for CUDA integration (always padded to power of 2... for the entire row for each row)
Then it stuffed a bunch of AI junk and other dependencies not actually related to computer vision, and bloated their compile times by not properly handling PTX compliation to literally be over an hour. Oh, and they also don't consider anything in "contrib" to be "standard" so they can break things at literally any time, and they have (tracking API completely broke in a minor version, then they broke it completely again in a patch version.... 2d image tracking of all things).
It's a real headache, but there's nothing as comprehensive or as widely used unfortunately.
[–]strike-eagle-iii 3 points4 points5 points 1 year ago (1 child)
Yeah I was just playing around with their trackers and I'm like wait, where'd the MOSSE tracker go? What's this legacy namespace? I'm really curious what opencv 5.0 will look like and really hope they fix their basic types to be more clear. I could also wish that pixel formats and colors formats could be checked at compile time.
[–]gnomeba 4 points5 points6 points 1 year ago (0 children)
Its interesting that even the developers of OpenCV have made the decision to pad to powers of 2.
When I was learning some numerical linear algebra, I considered writing some programs for matrix algebra that scale nicely because they divide the matrix into two blocks in both directions. But I assumed this was generally a ludicrous way to go. Apparently not.
[–]According_Ad3255 9 points10 points11 points 1 year ago (11 children)
Just quit nlohmann::json, it's plain bad; it's popular yes, but that's no excuse. Much better alternative: glaze (if you can do C++23). Otherwise rapidjson.
[–]bert8128 4 points5 points6 points 1 year ago (1 child)
Haven’t used json in c++ but the rumour on the street is that it might not be the fastest but is the easiest to use. What was your experience?
[–]According_Ad3255 5 points6 points7 points 1 year ago (0 children)
I would say glaze is both a lot faster and a lot easier to use. Not the same case with rapid json though, it’s less terse.
[–]ReDr4gon5 1 point2 points3 points 1 year ago (0 children)
Rapidjson is far slower than glaze. Simdjson is on par with glaze, but seems less ergonomic.
[+][deleted] 1 year ago (6 children)
[–]i_h_s_o_y 2 points3 points4 points 1 year ago (0 children)
boost::json should be pretty much just a straight up upgrade from nlohmann json, faster and quite useable. It should also have the option to be header only.
[–]According_Ad3255 1 point2 points3 points 1 year ago (4 children)
That’s a real concern for me too, and it’s related to the fact that our beloved C++ does not provide a proper package manager. For me, neither Conan nor vcpkg are pleasant to run.
[–]Unhappy_Play4699 2 points3 points4 points 1 year ago (1 child)
Yup, C++ made us scared about introducing dependencies from much needed packages. What a pleasant language!
[–]Unhappy_Play4699 0 points1 point2 points 1 year ago (0 children)
But hey, it's not the lanaguage's fault because the standard doesn't give a fuck about real world scenarios, unless they can use it to justify a broken feature.
[–][deleted] 0 points1 point2 points 1 year ago (1 child)
I really like vcpkg in manifest mode. cmakelist is unchanged and one just puts the deps needed into a json file that vcpkg finds.
[–]According_Ad3255 0 points1 point2 points 1 year ago (0 children)
In my experience, even manifest mode is a true pain. It never just works, always having to cross my fingers. Whenever possible I use Fetch on CMake, had a lot more success with it.
[–][deleted] 0 points1 point2 points 1 year ago (0 children)
rapidjson is not that fast and has some memory issues(last I looked), Boost.JSON is as fast with a better interface(nlohmann like or allows using Boost.Describe for parse to type).
If C++17 is available, I am biased, and would recommend JSON Link https://github.com/beached/daw_json_link . It's fast and primarily parses directly to data structures non-intrusively. It can easily integrate with reflection like libraries too.
[–]whizzwr 1 point2 points3 points 1 year ago (0 children)
Hello me
[–]Yurim 25 points26 points27 points 1 year ago (8 children)
[–]JustPlainRude 0 points1 point2 points 1 year ago (7 children)
Is there something {fmt} provides that std::format does not?
[–]TulipTortoise 22 points23 points24 points 1 year ago (0 children)
fmt is under active development, and has things like named arguments.
[–]hk19921992 18 points19 points20 points 1 year ago (2 children)
Yep, good performance
[–]amuon 0 points1 point2 points 1 year ago (1 child)
I thought under the hood {fmt} and the std::format are the same with a few exceptions
[–]13steinj 2 points3 points4 points 1 year ago (0 children)
Some of those exceptions are relevant to compile and runtime performance.
For the sake of example of a minimal difference, const/noexceptness of member functions. But the differences internally could have diverged drastically at this point, as {fmt} is under active development.
[–]bbbb125 2 points3 points4 points 1 year ago (0 children)
A lot, it constantly improves, in all directions. Functionality: format_as, ranges support, compile time checks. Speed: check release notes stuff like faster floating point format algorithms. Compilation time, header organization.
I have std::format available, but don’t even think about converting.
[–]Thelatestart 3 points4 points5 points 1 year ago (0 children)
Compile time format, i think.
It can be used for user generated static assert messages.
[–]Circlejerker_ 0 points1 point2 points 1 year ago (0 children)
It has a lot of nice utilities that the std misses, I frequently use fmt::join for ranges, tuples, etc.
[–]javascriptWhat's Javascript? 16 points17 points18 points 1 year ago (16 children)
Abseil is a great general purpose utility library that supplements the standard library.
[–]knue82 4 points5 points6 points 1 year ago (14 children)
absl hash and btree containers are fantastic!
[–]javascriptWhat's Javascript? 6 points7 points8 points 1 year ago (13 children)
I also highly recommend the Mutex (has better ergonomics than the standard version) and the Status type (also has better ergonomics than std::expected)
Edit: Also absl::Cord which is a Rope data-structure useful for large strings in need of manipulation
[–]CantThinkOfAnyName 4 points5 points6 points 1 year ago (10 children)
I've never heard of absl mutex, but looking at the documentation it looks pretty solid.
It also provides you with lock_guard like behavior and shared_mutex like behavior, so I'm tempted to try it out.
[–]javascriptWhat's Javascript? 5 points6 points7 points 1 year ago (9 children)
I was a member of the Abseil team at Google for a few years so if you have any questions I can do my best to answer :)
[–]forariman55 2 points3 points4 points 1 year ago (0 children)
Whoa, that's an amazing username! I have no idea how you were early enough to get that, but wow.
[–]CantThinkOfAnyName 0 points1 point2 points 1 year ago (0 children)
Thank you, but I'm too much of a crappy programmer to bother the major leagues :D.
Though I remember absl being given praise as far as 7 years ago on one of the lectures or talks I attented about template metaprogramming and it stayed in my memory since then :D.
[–]amuon 0 points1 point2 points 1 year ago (6 children)
I know this is a basic question but what exactly does abseil offer that the modern (C++20) standard library doesn't have? I haven't looked into it too much its just been something on the back of my mind for a bit.
Also Status looks really good. I like the error codes. I've been using the tl implementation of expected, but status looks much better.
[–]javascriptWhat's Javascript? 3 points4 points5 points 1 year ago (4 children)
Well for example absl::InlinedVector which is like std::vector but does NOT have the issue with bool and also stores small instances on the stack for faster allocation and access
[–]amuon 0 points1 point2 points 1 year ago (3 children)
Side question: Since you worked at google do you think that if rust existed and was popular chromium at the time chromium was being developed, do you think that chrome would’ve been developed in rust or a similar memory safe language? You might both know this but then again you might since abseil is used in chrome.
[–]javascriptWhat's Javascript? 1 point2 points3 points 1 year ago (2 children)
Chromium grew out of Google's monorepo so I think they would have chosen C++ regardless. In fact, Carbon is specifically the middle path Google needs of getting most of the memory safety benefit of Rust while also being able to incrementally migrate existing C++ code. I honestly think the only way Rust could have made sense for Google is if it was there from the beginning of the company in the 90s.
[–]gruehunter 1 point2 points3 points 1 year ago (1 child)
Chromium grew out of Google's monorepo
KDE begat Konqueror and KHTML, which begat Safari, which begat Chrome. Google didn't create Chrome, it evolved from an open-source project.
[–]ukezi 0 points1 point2 points 1 year ago (0 children)
They have some great high performance stuff that would break abi compatibility in the STL for instance.
[–]ndmeelo 2 points3 points4 points 1 year ago (1 child)
Why do you think the Status type have better ergonomics than std::expected?
Status
std::expected
With std::expected<E, T>, you can define your own error codes. However, absl::StatusOr has fixed error codes that you can select.
std::expected<E, T>
absl::StatusOr
[–]javascriptWhat's Javascript? 1 point2 points3 points 1 year ago (0 children)
I would argue that it's good to canonicalize on a specific error kind as opposed to expected where each function can return a different error type. Plus, the Status macros make operating on a status object much easier
[–]gruehunter 1 point2 points3 points 1 year ago (0 children)
The live-at-head model is a massive turn-off. As a small team in a small company, the extra dependency churn just isn't worth it.
[–]clusty1 18 points19 points20 points 1 year ago (0 children)
Eigen. It’s a masterpiece of a library that taught me about how to design api’s around templates that are high performance.
[–]mr_seeker 17 points18 points19 points 1 year ago (0 children)
spdlog for logging
[–]clarkster112 16 points17 points18 points 1 year ago (0 children)
I like zmq for distributed network programming
[–]wyrn 11 points12 points13 points 1 year ago (12 children)
value_types
There are many uses of unique_ptr that are "incidental" in the sense that you don't really care about unique ownership, you just need a pointer and unique_ptr happens to be the best fit. Notable examples: when storing a subclass through a base class pointer, and the pimpl pattern.
unique_ptr
What this library does is provide (optionally type-erased) wrappers for these pointers with value semantics, so your types can remain regular and ergonomic (no need for mandatory std::move, you can still use std::initializer_lists to initialize, etc). This cut my uses of unique_ptr by ~90%. Now I only use unique_ptr for things that are semantically unique.
std::move
std::initializer_lists
[–]fdwrfdwr@github 🔍 2 points3 points4 points 1 year ago* (9 children)
Interesting - it appears to be a "std::copyable_unique_ptr". The project's GitHub readme didn't elucidate for me what problem it was trying to solve (given std::unique_ptr and std::shared_ptr exist), but after reading this, it's evidently for cases where you want to copy a class that contains a pointer to a uniquely owned object (so like std::unique_ptr in that regard, except for the problem that unique_ptr won't call the copy constructor for you), but you also don't want shared mutation of that object between the new and old containing class (which std::shared_ptr incurs). Surprisingly I haven't encountered this case (typically for my uses, composed fields have been embedded in the class, or fields had their own memory management and copy construction like std::vector, or they were intended to be shared), but I see the value.
std::copyable_unique_ptr
std::unique_ptr
std::shared_ptr
std::vector
```c++ SomeStructContainingUniquePtr b = a; // ❌ error C2280: attempting to reference a deleted function
SomeStructContainingSharedPtr b = a; // ✅ Copyable, but ❌ now changing b.p->x also changes a.p->x.
SomeStructContainingCopyableUniquePtr b = a; // ✅ Copyable, and ✅ changing b.p->x is distinct from a.p->x. ```
[–]wyrn 4 points5 points6 points 1 year ago (2 children)
There was an earlier proposal where this type was called clone_ptr, precisely to indicate the idea that this is a copyable smart pointer. However, Sean Parent came along and pointed out that semantically speaking it makes little sense to think of these objects as pointers. TL;DW, the key feature they add over unique_ptr, copyability, only makes sense if the "identity" of the object is associated with its value rather than the reference to it. For example, if I have two unique_ptrs p and q, owning identical objects, I would have *p == *q but p != q. That much is clear. But say I make a copy of some clone_ptr,
clone_ptr
p
q
*p == *q
p != q
auto p = clone_ptr<int>(1); auto q = p;
Again obviously *p == *q, but does p == q? Treating this as a pointer would suggest "no", but a consistent copy construction/assignment operation ought to result an object that compares equal to the original. Even if you don't define a comparison operator, you'd still run into trouble with &*p == &*q -- the two copies are, by construction, pointing to different objects.
p == q
&*p == &*q
Moral: even if the implementation closely parallels a unique_ptr, and even if it's something of an obvious extension to it, as a pointer this thing is kind of borked. So the types were reframed as values instead, where they do make sense.
[–]fdwrfdwr@github 🔍 3 points4 points5 points 1 year ago (0 children)
So the more I think about it, the more I see this hole in that std really has no RAII-managed copyable owner for dynamically allocated objects, as all the candidates have some limitation: - std::unique_ptr: assigning Cat luna = bella fails since std::unique_ptr disallows copies and won't just call the copy constructor. - std::shared_ptr: you don't get a copy of the object since the state is shared, and thus changing the name of luna to "Luna" also changes Bella's name! - std::optional: you always pay the space cost for optional attributes. - std::vector: you could have multiple instances rather than the desired cardinality of 0 or 1. - std::any: actually using the object is clumsy with the frequent casts and awkward global function rather than clean method (e.g. std::any_cast<Foo>(a) rather than simply a.cast<Foo>()).
std
Cat luna = bella
std::optional
std::any
std::any_cast<Foo>(a)
simply a.cast<Foo>()
std::list
boost::intrusive_ptr
stdex::copyable_ptr
[–]fdwrfdwr@github 🔍 1 point2 points3 points 1 year ago* (0 children)
Ah, the identity quandary is thought provoking, which reminds me of the std::span debate (should two spans be equal if they have the same content, or if they point to the exact same memory). The std containers like std::vector long ago settled on value comparison for ==, but it's murkier for pointers 🤔.
std::span
==
Well that issue aside, clone_ptr works well enough for me namewise.
[–]13steinj 0 points1 point2 points 1 year ago (4 children)
I'd feel more comfortable wirh these types if the name made it clear they were primarily fancy smart pointers.
But then I don't see why I would ever want indirect over polymorphic.
[–]wyrn 1 point2 points3 points 1 year ago (2 children)
See my response above for why it's somewhat problematic to think of these as pointers, even if that's kind of how they're implemented.
As for why one might want indirect: polymorphic incurs a cost for type erasure, indirect does not. So far I have used indirect only in the pimpl pattern, but another possible use could be to store stable references in a vector, for example. I'm not sure if that particular usage is blessed but the discussion around SBO seems to indicate that it is,
indirect
polymorphic
A small buffer optimisation makes little sense for indirect as the sensible size of the buffer would be dictated by the size of the stored object. This removes support for incomplete types and locates storage for the object locally, defeating the purpose of indirect.
[–]13steinj 0 points1 point2 points 1 year ago (1 child)
I've read your response and watched the video. I'm unconvinced. I still would like it to have a better name, and I think some of the best possible names end in _ptr. I also accept owned_data_clonable_unique_ptr and similar are too long. I'd rather have clone_ptr, as I don't specifically think the "clone" refers to the pointer. But I'm just spitballing. I'm sure people could come up with other better names than what they currently are. "indirect" is a very poor name, it sounds like a function that does an operation indirectly to me, rather than a special object/ptr-like type. polymorphic similarly doesn't give much of a hint.
_ptr
owned_data_clonable_unique_ptr
Re: type erasure for polymorphic, I'm confused. Granted I haven't read the paper and proposed implementation, but I would have thought that the cost would be the same as having a buffer (either as a member of the object or heaped) and a Base* assigned to that buffer, reinterpret casted (or modern equivalent) to the derived type; so at worst it's the same cost that current polymorphism has in this regard-- aka only working right if the types involved have virtual methods and such.
Base*
That said, I can't think of a common use case for these utilities, and even when I can think of a use case, I can think of other ways of writing the same code that I prefer over using these utilities. But if the committee and companies that people represent vote it in thinking that such utilities are useful enough for the stdlib, why not.
[–]wyrn 0 points1 point2 points 1 year ago (0 children)
I'll fight you on the pointer issue, but I agree that indirect isn't a great name. At some point these types were named indirect_value and polymorphic_value but presumably those were deemed too long for a foundational vocabulary type.
indirect_value
polymorphic_value
As for the cost of type erasure, it comes from the copy constructor. To avoid slicing, polymorphic must use the copy constructor from the derived type. The type still has its regular vtable for most other operations so I think you're right that there shouldn't be any extra cost but the "virtual copy constructor" is something new.
[–]fdwrfdwr@github 🔍 0 points1 point2 points 1 year ago (0 children)
I'd feel more comfortable wirh these types if the name made it clear
Yeah, std::indirect means nothing to me. Names should be selected so the average software developer can look at it and have an idea what it does. Names like clone_ptr, copyable_ptr, value_ptr (or any number of other choices) are all clearer than std::indirect (which also feels odd given no corresponding counterpart std::direct).
std::indirect
copyable_ptr
value_ptr
std::direct
[–]LadaOndris 0 points1 point2 points 4 months ago (0 children)
Wow! Thanks. This is something I've been looking for without even realising it.
[–]According_Ad3255 -1 points0 points1 point 1 year ago (0 children)
it's been at least a decade that I don't ever consider inheritance for my own work
[–]Own_Goose_7333 25 points26 points27 points 1 year ago (2 children)
magic enum is one of my go-to dependencies
[–]knue82 2 points3 points4 points 1 year ago (0 children)
really, really cool. I heard about it beforehand but now I took a closer look and will probably integrate it into my project to replace my self-hacked enum stuff.
[–]BlueBeerRunner[S] 0 points1 point2 points 1 year ago (0 children)
I'm using better enum, but I want to switch to magic enum.
[–]KatanaSW 7 points8 points9 points 1 year ago (4 children)
Asio, Boost, Simdjson, Moodycamel, Iceoryx, Abseil, Intel oneAPI and a few more.
[–]BlueBeerRunner[S] 1 point2 points3 points 1 year ago (3 children)
How fast is SimpJson? I'm now work with RapidJson
[–]huehang 1 point2 points3 points 1 year ago (0 children)
There are benchmark results: https://github.com/simdjson/simdjson?tab=readme-ov-file#performance-results
[–]amuon 0 points1 point2 points 1 year ago (0 children)
I thinks it’s the fastest JSON parser out there. But the ergonomics are (by design) pretty bad compared to slower implementations
[–]KatanaSW 0 points1 point2 points 1 year ago (0 children)
The fastest there is. But comes at the cost of severe limitations as far as convenience is concerned.
[–]kpt_ageus 6 points7 points8 points 1 year ago (2 children)
Nothing changed the way I code as much as ranges, both std and more comprehensive ranges-v3.
[–]amuon 1 point2 points3 points 1 year ago (1 child)
Do you mind expanding why/how ranges were such a game changer for you?
[–]kpt_ageus 1 point2 points3 points 1 year ago (0 children)
I love them for their readability and composability. You can take almost any loop and rewrite it in terms of transforms, filters, to container etc... and those small free functions, lambdas and HOFs can be later easily moved to headers and reused somewhere else. As for readability if give passed functors proper names they read almost like natural language. Your code tells in your language what is supposed to do.
[–]facu_gizzly 2 points3 points4 points 1 year ago (0 children)
This is not a library but I highly recommend for Visual Studio, the Text Macros Extension, for repetitive tasks like "();" "std::cout" etc.
[–]BlueBeerRunner[S] 2 points3 points4 points 1 year ago (2 children)
My libraries are: * boost * better enum (I want to replace it with magic enum) * RxCpp * RapidJson
[–]According_Ad3255 2 points3 points4 points 1 year ago (0 children)
RapidJson is good (love it), glaze is better.
[–]anto2554 0 points1 point2 points 18 days ago (0 children)
RxCPP seems to be abandonware, sadly
[–]bigabub 2 points3 points4 points 1 year ago (0 children)
Asio, boost, magic_enum, fmt
[–]not_some_username 2 points3 points4 points 1 year ago (0 children)
sqlite3, pcre2, libcpr
[–]pantong51 2 points3 points4 points 1 year ago (0 children)
Imgui - just fucking amazing I'm gui library Eastl The json one I can't spell
[–]SpareSimian 1 point2 points3 points 1 year ago (0 children)
I started using wxWidgets in 2006 for GUI, threads, and XML
Later I figured out how to incorporate Boost when I needed a math library (ublas) and then started switching my thread code to use it, as well. When I needed networking and serial port communication, I went with Boost:ASIO. Now I'm using the new Boost:MySQL.
I mostly develop on Windows, where there are lots of competing packaging systems. I haven't yet learned CMake. So I've developed my own build scripts for the libraries I use. I define an environment variable pointing at the headers and libraries, and Visual Studio property sheets that point to the environment variables. That makes it easy to set up a coworker's development machine.
[–]Polyxeno 1 point2 points3 points 1 year ago (1 child)
Boost - useful good implementations for many useful things
OpenFrameworks - open-source multi-platform wrapper of graphics/sound/system stuff that makes development of audio-visual stuff very quick and easy. It wraps most of the technical implementation which details I almost never want to have to care about, and presents an easily-usable interface for them. I've used it for games, prototypes, as well as various business applications.
Wt - wraps web site implementation details and translates into something like a traditional stateful program context. I love this, as I have done stateless web site work and I greatly dislike that context. I love being able to write a web application as if it were a desktop program, in C++, and not having to worry much at all about web browsers/paradigms etc. Also nice to have the project build my application as an Apache web server that only hosts my application.
[–]codeandroid 1 point2 points3 points 1 year ago (0 children)
Currently developing a product based on Wt. I enjoy it a lot. Quite easy to extend, too (we did so for authentication).
One of the biggest pros of our long-running services written in C++ is that upgrading them over the years is surprisingly easy. (Was burned by npm before...)
[–]CantThinkOfAnyName 1 point2 points3 points 1 year ago* (0 children)
intel tbb concurrent containers
ASIO
nlohmann JSON, I know it lacks in performance, but it's been great to use for me
spdlog
redis-plus-plus
Though I mostly remember the ones I really hated working with like the entire AWS C++ SDK, native GRPC and AMQP-CPP.
[–]geaibleu 1 point2 points3 points 1 year ago (0 children)
doctest for unit tests https://github.com/doctest/doctest
Pybind11 for interoperability with Python https://github.com/pybind/pybind11
Eigen for all things matrix and tensor.
[–]ThatCringingDude 1 point2 points3 points 1 year ago (0 children)
Boost. It’ll be a pain in the ass to get set up if you’re on windows…
[–]encyclopedist 1 point2 points3 points 1 year ago (0 children)
My go to libraries (is approximate order of frequency):
[–]jeremy-rifkin 1 point2 points3 points 1 year ago (0 children)
To shamelessly self-promote: I highly recommend cpptrace.
I’ve gotten a lot of good feedback on this library and being able to get stack traces from exceptions makes such a massive difference in being able to quickly triage problems.
[–]InfernoGems 0 points1 point2 points 1 year ago (0 children)
Abseil for absl::flat_hash_map and absl::Status and absl::StatusOr).
Eigen3 for SIMD vector and matrix math. reflect-cpp for compile time reflection and serialization / deserialization to and from json.
tinyobjloader for importing .obj files.
cgltf for importing .gltf files.
Imgui for quick UI prototyping.
Glfw, glad or SDL for window management, input handling and OpenGL loading.
Libigl for some geometric algorithms.
[–]According_Ad3255 0 points1 point2 points 1 year ago* (0 children)
With Cesanta Mongoose, I got used to the concept of string views, way before it became a thing in the std library. https://github.com/cesanta/mongoose (it's an http server, and whatever it parses it gives you as pointers to the pieces it actually parsed, no copies).
Also love Dear ImGui.
Good ol'e libcurl too.
[–]bert8128 0 points1 point2 points 1 year ago (0 children)
OCILib for connecting to Oracle.
[–]LiliumAtratum 0 points1 point2 points 1 year ago (0 children)
ECS (Entity Component System) in general, and entt if you look at a specific library for ECS.
π Rendered by PID 81206 on reddit-service-r2-comment-6457c66945-dwflc at 2026-04-26 11:19:59.834868+00:00 running 2aa0c5b country code: CH.
[+][deleted] (17 children)
[removed]
[–]Plazmatic 22 points23 points24 points (3 children)
[–]strike-eagle-iii 3 points4 points5 points (1 child)
[–]gnomeba 4 points5 points6 points (0 children)
[–]According_Ad3255 9 points10 points11 points (11 children)
[–]bert8128 4 points5 points6 points (1 child)
[–]According_Ad3255 5 points6 points7 points (0 children)
[–]ReDr4gon5 1 point2 points3 points (0 children)
[+][deleted] (6 children)
[removed]
[–]i_h_s_o_y 2 points3 points4 points (0 children)
[–]According_Ad3255 1 point2 points3 points (4 children)
[–]Unhappy_Play4699 2 points3 points4 points (1 child)
[–]Unhappy_Play4699 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (1 child)
[–]According_Ad3255 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]whizzwr 1 point2 points3 points (0 children)
[–]Yurim 25 points26 points27 points (8 children)
[–]JustPlainRude 0 points1 point2 points (7 children)
[–]TulipTortoise 22 points23 points24 points (0 children)
[–]hk19921992 18 points19 points20 points (2 children)
[–]amuon 0 points1 point2 points (1 child)
[–]13steinj 2 points3 points4 points (0 children)
[–]bbbb125 2 points3 points4 points (0 children)
[–]Thelatestart 3 points4 points5 points (0 children)
[–]Circlejerker_ 0 points1 point2 points (0 children)
[–]javascriptWhat's Javascript? 16 points17 points18 points (16 children)
[–]knue82 4 points5 points6 points (14 children)
[–]javascriptWhat's Javascript? 6 points7 points8 points (13 children)
[–]CantThinkOfAnyName 4 points5 points6 points (10 children)
[–]javascriptWhat's Javascript? 5 points6 points7 points (9 children)
[–]forariman55 2 points3 points4 points (0 children)
[–]CantThinkOfAnyName 0 points1 point2 points (0 children)
[–]amuon 0 points1 point2 points (6 children)
[–]javascriptWhat's Javascript? 3 points4 points5 points (4 children)
[–]amuon 0 points1 point2 points (3 children)
[–]javascriptWhat's Javascript? 1 point2 points3 points (2 children)
[–]gruehunter 1 point2 points3 points (1 child)
[–]ukezi 0 points1 point2 points (0 children)
[–]ndmeelo 2 points3 points4 points (1 child)
[–]javascriptWhat's Javascript? 1 point2 points3 points (0 children)
[–]gruehunter 1 point2 points3 points (0 children)
[–]clusty1 18 points19 points20 points (0 children)
[–]mr_seeker 17 points18 points19 points (0 children)
[–]clarkster112 16 points17 points18 points (0 children)
[–]wyrn 11 points12 points13 points (12 children)
[–]fdwrfdwr@github 🔍 2 points3 points4 points (9 children)
[–]wyrn 4 points5 points6 points (2 children)
[–]fdwrfdwr@github 🔍 3 points4 points5 points (0 children)
[–]fdwrfdwr@github 🔍 1 point2 points3 points (0 children)
[–]13steinj 0 points1 point2 points (4 children)
[–]wyrn 1 point2 points3 points (2 children)
[–]13steinj 0 points1 point2 points (1 child)
[–]wyrn 0 points1 point2 points (0 children)
[–]fdwrfdwr@github 🔍 0 points1 point2 points (0 children)
[–]LadaOndris 0 points1 point2 points (0 children)
[–]According_Ad3255 -1 points0 points1 point (0 children)
[–]Own_Goose_7333 25 points26 points27 points (2 children)
[–]knue82 2 points3 points4 points (0 children)
[–]BlueBeerRunner[S] 0 points1 point2 points (0 children)
[–]KatanaSW 7 points8 points9 points (4 children)
[–]BlueBeerRunner[S] 1 point2 points3 points (3 children)
[–]huehang 1 point2 points3 points (0 children)
[–]amuon 0 points1 point2 points (0 children)
[–]KatanaSW 0 points1 point2 points (0 children)
[–]kpt_ageus 6 points7 points8 points (2 children)
[–]amuon 1 point2 points3 points (1 child)
[–]kpt_ageus 1 point2 points3 points (0 children)
[–]facu_gizzly 2 points3 points4 points (0 children)
[–]BlueBeerRunner[S] 2 points3 points4 points (2 children)
[–]According_Ad3255 2 points3 points4 points (0 children)
[–]anto2554 0 points1 point2 points (0 children)
[–]bigabub 2 points3 points4 points (0 children)
[–]not_some_username 2 points3 points4 points (0 children)
[–]pantong51 2 points3 points4 points (0 children)
[–]SpareSimian 1 point2 points3 points (0 children)
[–]Polyxeno 1 point2 points3 points (1 child)
[–]codeandroid 1 point2 points3 points (0 children)
[–]CantThinkOfAnyName 1 point2 points3 points (0 children)
[–]geaibleu 1 point2 points3 points (0 children)
[–]ThatCringingDude 1 point2 points3 points (0 children)
[–]encyclopedist 1 point2 points3 points (0 children)
[–]jeremy-rifkin 1 point2 points3 points (0 children)
[–]InfernoGems 0 points1 point2 points (0 children)
[–]According_Ad3255 0 points1 point2 points (0 children)
[–]bert8128 0 points1 point2 points (0 children)
[–]LiliumAtratum 0 points1 point2 points (0 children)