Y
HN Search
Hacker News Search
new
|
comments
|
top
|
jobs
BenFrantzDale
searching Neon…
1.
▲
2.
▲
3.
▲
4.
▲
5.
▲
6.
▲
6 ms
·
1.
▲
by
BenFrantzDale
5mo ago
> Skills are good for instilling non-repeatable, yet intuitive or institutional knowledge. What about just putting that sort of thing in human-targeted documentation? Why call it a “skill” and hide it somewhere a human is less likely to
2.
▲
by
BenFrantzDale
2y ago
Have you compared perf with the reference implementation of the P2300 “Senders” proposal? https://github.com/NVIDIA/stdexec
3.
▲
by
BenFrantzDale
2y ago
Having it available means we can use it explicitly. For example, I could see a compiler flag making `std::vector<T>::operator[]` be checked and then if profiling warrants, remove the check by explicitly checking if my index is out of
4.
▲
by
BenFrantzDale
2y ago
As a C++ user, shared_ptr is great for some things, but it is an anti-pattern. Shared_ptr<const T> is much much better. The problem is that shared_ptr<T> isn’t value-semantic and so destroys local reasoning. That said, there are
5.
▲
by
BenFrantzDale
2y ago
Agreed. I just opened https://gitlab.kitware.com/cmake/cmake/-/issues/25846 although I have no idea how hard it is to address this sort of issue robustly.
6.
▲
by
BenFrantzDale
2y ago
I agree. I wish we had to say `int x = std::uninitialized;`
7.
▲
by
BenFrantzDale
3y ago
Can you express value semantics in Python, or is everything still passed by mutable reference still and duck-typed at runtime? I’m being flip, and I like Python for some things, but for large robust performant software I find C++ way easier
8.
▲
by
BenFrantzDale
3y ago
I thought that too. I think the point there was that you don’t have to push this notion as afar as in/out of functions: that just flipping them within a function can be beneficial.
9.
▲
by
BenFrantzDale
3y ago
I agrée with them and with you. It looks like they work in some poor language that doesn’t allow overloading. Their example of `frobnicate`ing an optional being bad made me think: why not both? `void frobnicate(Foo&); void frobnicate(st
10.
▲
by
BenFrantzDale
3y ago
For list comprehension, we have (C++23): `std::ranges::to<std::vector>(items | std::views::filter(shouldInclude) | std::views::transform(f))` it’s not quite `[f(x) for x in items if shouldInclude(x)]` but it’s the same idea.
11.
▲
by
BenFrantzDale
3y ago
That’s what tests are for. And if `print_table` is factored properly then they won’t want to add flags, they’ll make a new function out of the pieces of `print_table` that has distinct behavior of its own.
12.
▲
by
BenFrantzDale
3y ago
If the sub-functions could be reused and people would be tempted to change them, then that’s what your tests are for. In fact, it’s often tricky to test the sun-function logic without pulling them out because to write the test you have to f
13.
▲
by
BenFrantzDale
3y ago
I totally agree. And you can always write mutating “functions” (what get called “algorithms” in the C++ world), like C++’s `std::ranges::sort(range)`.
14.
▲
by
BenFrantzDale
3y ago
This blogger obviously wouldn’t get along with Sean Parent of Adobe. It’s old but I have everyone on my team watch this “no raw loops” presentation: https://youtu.be/W2tWOdzgXHA?si=4LKv1-sau60U63op in which he identifies re
15.
▲
by
BenFrantzDale
3y ago
I write C++ including the conventions around the strong units library we use. What this article promote as “better” seems pretty bad. They dont like `Money m = new Money(10.0m); decimal amount = m.Amount;` and images prefer `Money m = 10.0m
16.
▲
by
BenFrantzDale
3y ago
And conversely, if you are using classical polymorphism, you can get essentially the effect of PImpl by having an abstract base class with a static factory function that returns a unique pointer, then implement that factory function by in t
17.
▲
by
BenFrantzDale
3y ago
I’m curious: do you use a `const std::unique_ptr<Impl>` or just a `std::unique_ptr<T>` or do you have a template that provides value semantics for the `Impl`? If I used PImpl a lot I’d make a `value<T>` that encapsulates o
18.
▲
by
BenFrantzDale
3y ago
If your internal representation is stable, you can put private functions in a private friend class that is only defined in the cpp file: `private struct access; friend struct access;`.
19.
▲
by
BenFrantzDale
3y ago
C++ also has `std::expected<T,E>`.
20.
▲
by
BenFrantzDale
3y ago
What I find most fascinating about LLMs isn’t that they are smart but that they are different from the smarts I’m used to. It’s not that smart but it knows far more than any human ever could. It’s not smart, but it is well-read. It has read
21.
▲
by
BenFrantzDale
3y ago
I think polymorphism has its place, and Lakos’s use of them for allocators is one such place: it lets you bind a well-defined interface to a concrete implementation at runtime. So rather than wrestle with templated allocators where every `s
22.
▲
by
BenFrantzDale
3y ago
Windward and upwind are different in my book: windward is anything to the side of the boat opposite the main boom, whereas upwind is you draw a line perpendicular to the wind direction and anything toward the wind from that line is upwind.
23.
▲
by
BenFrantzDale
3y ago
I assume it’s been around forever. https://en.cppreference.com/w/cpp/language/new (Placement-new is the thing you are talking about.) C++20 has `std::construct_at` which does the same thing but is usable at c
24.
▲
by
BenFrantzDale
4y ago
As one data point: we are replacing Golang with C++ for homogeneity and not-weirdness. C++ has problems but it is very good at scaling and being boring, which is a good thing.
25.
▲
by
BenFrantzDale
4y ago
Exactly this. I’ve seen architectural decisions that over time lead to exponential work to implement new features. An architectural fix can lead to a big-O difference in productivity, not just 10x (a constant factor).
26.
▲
by
BenFrantzDale
4y ago
I agree with you in principal. But it’s not “sneaking”. You are a professional, there’s no shame in doing the job right. Imagine if bridge-builders felt like they had to “sneak in” using the proper concrete setting schedule!
27.
▲
by
BenFrantzDale
4y ago
It really depends. I used PImpl today but it’s the rare exception. Between small inlinable classes and abstract base classes, there are lots of ways work. But that’s the beauty of C++: there are lots of ways to solve problems!
28.
▲
by
BenFrantzDale
4y ago
It’s to add minimal type safety. I use this technique in C++ (not with units) even though we have a strong units library. It’s particularly useful for keeping track of things that are scalar-like but get passed around a bunch. Passing aroun
29.
▲
by
BenFrantzDale
4y ago
To clarify, I think by “move things from stack to heap” you mean “move values from stack to heap”, where, e.g., `std::vector<int>` is a value. The vector’s data is still on the heap (or in the allocator’s pool for `std::pmr::vector<
30.
▲
by
BenFrantzDale
4y ago
As an avid long-time professional C++ user, I agree with that paraphrase. At the same time, I know that (somehow!) people use and like C. I’ve been looking for an article like this explaining how such a to-me-antiquated-feeling language (C)
More ›