T
TartanLlama
blog.tartanllama.xyz · Personal blog · on HN since 2017
TartanLlama is the blog of Sy Brand, who writes about C++, debuggers, compilers, and GPU programming.
What HN saysHN repeatedly recommends its Writing a Linux Debugger series as a good way to learn about debuggers. It also links the C++ initialization post.
31HN people shared it
11linked it in comments
30stories submitted
531story points
1 year agolast shared
2017people per year2026
Most-shared posts
- 1Writing a Linux Debugger (2017)11 people · 41 points · first shared 2018 · 2 comments on HN
- 2Writing a Linux Debugger4 people · 9 points · first shared 2017 · discussion on HN
- 3Initialization in C++ is bonkers (2017)3 people · 191 points · first shared 2020 · 249 comments on HN
- 4Spaceship Operator3 people · 11 points · first shared 2018 · discussion on HN
- 5Learning C++3 people · 5 points · first shared 2017 · discussion on HN
- 6Writing a Linux Debugger Part 2: Breakpoints2 people · 143 points · first shared 2017 · 15 comments on HN
- 7Do compilers take inline as a hint?2 people · 67 points · first shared 2018 · 21 comments on HN
- 8Accelerating your C++ on the GPU with SYCL2 people · 4 points · first shared 2017 · discussion on HN
- 9Sycl2 people · first shared 2017
- 10Functional exceptionless error-handling with optional and expected1 people · 55 points · first shared 2017 · 31 comments on HN
- 11Guaranteed copy elision in C++17 does not elide copies1 people · 2 points · first shared 2018 · discussion on HN
- 12Custom Alias Analysis in LLVM1 people · 1 points · first shared 2018 · discussion on HN
- 13Meeting C++17 Trip Report1 people · 1 points · first shared 2017 · discussion on HN
- 14Building my first custom keyboard1 people · 1 points · first shared 2017 · discussion on HN
- 15Initialization is bonkers1 people · first shared 2017
What HN people wrote when they linked it
thasso · 2025-06-11
If you are interested in debuggers, there was a post series by Sy Brand a few years back:
https://blog.tartanllama.xyz/writing-a-linux-debugger-setup/
Eli Bendersky also wrote about debuggers (I think his post is a great place to start):
https://eli.thegreenplace.net/2011/01/23/how-debuggers-work-part-1
I was fascinated with debuggers a while back exactly because they were so mysterious to me. I then wrote a ptrace debugger myself [1]. It features pretty simple implementations of the most common stuff you would expect in a debugger. Though I made the grave mistake of formatting all the code in GNU style.
[1]: https://github.com/thass0/spray/tree/main/src
SebastienWae · 2023-09-27
Yes, the "Writing a Linux Debugger" series in C++. https://blog.tartanllama.xyz/writing-a-linux-debugger-setup/
And more generally there is "The Debugging Book" in python. https://www.debuggingbook.org/
mrazomor · 2023-09-27
I really liked https://blog.tartanllama.xyz/writing-a-linux-debugger-setup/
I learned a lot.
323 · 2022-11-28
Less known fact is that it's called C++23 because there are 23 ways to initialize a variable.
Of course, it's a joke. In reality C++23 has only 20 ways to initialize a variable:
https://www.cppstories.com/2022/init-string-options/
https://blog.tartanllama.xyz/initialization-is-bonkers/
elvis70 · 2020-10-18
See also the "Writing a Linux Debugger" series of posts in which a source-level debugger is implemented: https://blog.tartanllama.xyz/writing-a-linux-debugger-setup/
cesarb · 2018-04-01
Having started using the Internet in the 90's, and thus still remembering Geocities-era websites, I loved that they did this as a webring (https://en.wikipedia.org/wiki/Webring): each blog post has a link to the next one, making a singly-linked circular list.
Starting with this one, we have:
- http://www.bfilipek.com/2018/04/deprecating-pointers.html
- http://www.modernescpp.com/index.php/no-new-new
- https://www.fluentcpp.com/2018/04/01/cpp-will-no-longer-have-pointers/
- https://blog.tartanllama.xyz/no-pointers/
- https://arne-mertz.de/2018/04/raw-pointers-are-gone/
And it circles back to this one.
autopoiesis · 2017-09-11
Also there's work towards a pure C++ abstraction layer for programming these accelerators, called SYCL [0]. It lets you define your compute kernels using normal C++ lambdas or functions, and then automatically infers the data dependencies to do the kernel execution. In particular, it provides an implementation of the C++ "Parallel STL" [1] (some intro slides at [2]), which in turn provides "execution policies" for various standard library functions, such as sorting. The aim is precisely the kind of thing you're talking about!
[0] I found a nice intro at https://blog.tartanllama.xyz/sycl/
[1] http://en.cppreference.com/w/cpp/experimental/parallelism
[2] https://www.khronos.org/assets/uploads/developers/library/2016-superco…
jaiprabhu · 2017-09-07
Check out this recent post by Simon Brand on this subject - https://blog.tartanllama.xyz/learning-cpp/
autopoesis · 2017-08-25
Have you had a look at SYCL? I found a nice intro at [1]. Hopefully at some point soon there's an implementation of it for nVidia GPUs, too; right now I've only come across support for Intel and AMD OpenCL using Codeplay's compiler [2]. But it seems quite promising!
[1] https://blog.tartanllama.xyz/sycl/
[2] https://www.codeplay.com/products/computesuite/computecpp
drudru11 · 2017-06-12
This was published earlier and in a much more readable format at:
https://blog.tartanllama.xyz/c++/2017/01/20/initialization-is-bonkers/
Rusky · 2020-10-20
I really don't see how Rust has most of C++'s problems. Slow compiler, sure, though things are changing. Most complex languages in history? Only if you squint at it from 10000 feet and ignore what the complexity is doing.
C++ has approximately eighteen different partially-overlapping categories of variable initialization, many of which are legacy-but-still-used! [0] And some of those categories have changed their boundaries every language version since C++11 (based on the definition of "aggregate").
C++ has three to five partially-overlapping kinds of type inference all in active use (auto, decltype(id), decltype((expr)), decltype(auto), template argument deduction)! This is interleaved with name lookup and overload resolution (below), so if some subexpression isn't compiling how you expect, you have a vast space of language features potentially to blame.
C++ has so many kinds of name lookup and namespacing that I'm not even sure how to count them. There's unqualified lookup, argument-dependent lookup, qualified lookup, class member access, etc. Sometimes you can't refer to things defined later (outside a class) and sometimes you can (inside a class). There is even undefined behavior if you mess up namespacing! (Undiagnosed ODR violations are every experienced C++ programmer's nightmare.)
C++ has ad-hoc overload resolution based on un-scoped identifiers, which even crosses namespace boundaries using one of the above name lookup modes. It has two kinds of user-defined…