Eric Niebler 🇺🇦 ✊🏾 Profile Banner
Eric Niebler 🇺🇦 ✊🏾 Profile
Eric Niebler 🇺🇦 ✊🏾

@ericniebler

Followers
12,229
Following
146
Media
730
Statuses
7,014

C++ core compute libraries tech lead at @nvidia , husband, father, @isocpp member, former nomad, and sometimes artist wannabe. @ericniebler @hachyderm .io he/him

Seattle, WA
Joined September 2010
Don't wanna be here? Send us removal request.
Explore trending content on Musk Viewer
Pinned Tweet
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
Thread of tips about Generic Programming.
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 years
Generic Programming pro tip: Although Concepts are constraints on types, you don't find them by looking at the types in your system. You find them by studying the algorithms. #cpp
3
30
160
5
8
50
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
I interviewed someone the other day. They had their GitHub on their resume. For the interview, I screen-shared one of their repos and had them walk me through their code. Loved it. Does anybody else do this? Thoughts?
238
176
3K
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
Today is my first day as an @nvidia employee! I'll be working on bringing powerful abstractions for async to standard C++ that work for both concurrency and parallelism (and NVIDIA GPUs, obvs). Very excited to be here! :-D
35
18
668
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
Trying to reduce a compiler bug and valgrind crashed. VaLgRiNd CrAsHeD V A L G R I N D C R A S H E D wtf? So that's my day. How's your day going?
28
23
534
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
I hate typical tech interviewing. Brain teasers, whiteboard coding .... it's stressful for everyone and gives poor signal-to-noise. If you have code to share, let me see it. Tell me your thought process. What other approaches did you consider? What test cases?
10
17
530
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
@vzverovich @foonathan Reflection is what I do on my life choices as I program C++.
1
42
395
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
Obviously not everybody has publicly available code to share, and that's fine. But if they do ... why NOT review it with them? So much signal!
15
6
361
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 years
Whether C++20 will have Modules, Coroutines, and Ranges largely comes down to this week. Wish us luck! #CPP
19
86
318
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 months
Today I learned about `git commit --fixup=<commit>` and `git rebase --update-refs --autosquash -i <commit>` and my life has significantly improved. I fear no stacked PRs. Bring it.
22
22
303
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
Let's normalize asking for help. I've been in tech for thirty-mumble years, and I ask for help. ALL. THE. TIME. Principal Devs, Distinguished Engineers, Senior Fellows ... they all ask for help. It's ok. Really.
8
39
276
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 months
I just learned about gcc's -fdump-lang-class=<file> option, and ... 🤯 This is awesome for learning the C++ object model. Class and vtable layout is all there. You can see how the compiler implements dynamic polymorphism, multiple inheritance, and virtual inheritance.
5
38
281
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
Mad respect to @Grady_Booch , he's the real deal and I don't presume to be anywhere near as smart or as visionary as he is. But I think I *do* have an experience he lacks that has a bearing on this whole is-AI-sentient business. See, I have epilepsy... /1
@Grady_Booch
Grady Booch
2 years
"Not until a machine can write a sonnet or compose a concerto because of thoughts and emotions felt, and not by the chance fall of symbols, could we agree that machine equals brain." -- Geoffrey Jefferson, 1949 Lister Oration
27
57
404
13
44
266
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
So it begins...
Tweet media one
8
31
262
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
I asked @nvidia for a decent desktop for working and running benchmarks. This is what they sent me. 🤯
Tweet media one
25
4
253
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
What C++ is missing is a cute mascot that folks can emotionally bond with. Like a cute buffer overrun or something.
@Lucretiel
Lucretiel 🦀
3 years
My mom is not at all a tech person, so there's not a lot she understands about Rust outside of the high level "correcter, safer, faster" pitch. But she finds Ferris unutterably delightful; she brings them up basically every time I talk about Rust in her earshot.
2
1
76
22
26
225
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 years
The entirety of the Ranges TS with the addition of lazy adaptor pipelines is now all but certain to be in C++20. I am a very happy camper. 🎉 #Cpp #Cpp20 #CppRap
14
57
221
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
Achievement unlocked: caused the latest clang *and* gcc to ICE with the same piece of code.
20
6
202
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 months
C++ language lawyers! Is this undefined behavior?
Tweet media one
39
30
201
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Hold my beer.
Tweet media one
@code_report
Conor Hoekstra
5 years
1000 @Twitter followers! Let us celebrate with some code (and for the #cplusplus #rangev3 solution 36 lines of of assembly ) + #haskell + @dyalogapl
Tweet media one
5
2
32
5
30
194
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 years
The Ranges wording has officially been merged to the #cpp working draft for C++20! You can read the specification for all the goodies in the new <ranges> header here: Many thanks to @CoderCasey and @zygoloid for the hard work.
4
55
197
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 months
BREAKING: P2300 has been voted into C++26! 🎉
16
32
194
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 months
I have the greatest house number in all of Nerd-dom.
Tweet media one
24
1
191
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
C++. Oh wait, you mean explode in a good way, nm.
@sabrinaesaquino
Sabrina
2 years
Which programming language has the most chance of exploding in the next 5 years?
737
145
2K
6
9
186
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 years
ISO 21425 - "C++ extensions for ranges", aka the Ranges TS, is officially published as of Dec 4. 🎉🎊
7
59
185
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
So many new ranges goodies just officially added to C++23: * ranges::to * views::join_with * views::chunk, views::slide * views::chunk_by * ranges::iota, ranges::shift_left, ranges::shift_right * pipe support for user-defined range adaptors 🎉
4
27
183
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
10 months
The std::execution proposal is big, and the forest can get lost for the trees. I've been asked how to use P2300 to do, well, anything. So here is a "hello world" program that uses P2300 and C++20 to delegate some async I/O to a background thread.
Tweet media one
15
18
186
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 months
Every so often I delude myself into believing I understand C++. And then something like this happens: It's been explained to me. Several times. I still don't understand. @zygoloid remains the only person on earth who knows C++.
Tweet media one
16
15
187
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
C++ trivia is fun. Here's an obscure one: Since C++11, the Standard Library has had a reference-counted string type. What is it?
10
15
182
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Neither of these. Please make it a friend function at class scope. It reduces the scope of the function, so the compiler has fewer overloads to sort through when doing overload resolution.
@eigenbom
Ben Porter
5 years
starting with the most trivial code, as a c++ programmer you must choose a side
Tweet media one
Tweet media two
27
4
93
12
27
179
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
9 months
Here's how to use std::execution to interleave several async operations on an embedded device with only one thread. Zero allocations, guaranteed. It's like coroutines, minus the coroutines.
Tweet media one
Tweet media two
12
21
177
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
volatile is ALWAYS the wrong answer if you are trying to make updates visible across threads. ALWAYS. Unless you are directly accessing hardware, never use volatile in a C++ file.
16
21
176
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Gcc's libstdc++ has full support for ranges on trunk, and I'm beyond excited. It's deeply satisfying.
4
46
171
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
Woohoo! A gcc bug I filed 7 years ago (!) has been fixed. 😃
8
2
168
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
Probably the biggest thing C++ could do to make the language more powerful is to make functions (not function pointers, *functions* -- including overload sets and function templates) first class citizens of the language. The lack of functional composition in C++ is deadly. #cpp
18
22
157
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 years
Generic Programming pro tip: Although Concepts are constraints on types, you don't find them by looking at the types in your system. You find them by studying the algorithms. #cpp
3
30
160
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
So is AI conscious? Are we? What even *is* consciousness anyway? When you know deep in your bones that You can wink out of existence just like *that* -- like the flip of a light switch -- it makes this hooha about AI and consciousness seem silly, like we're arguing about angels.
17
3
155
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 years
Thank you, @CoderCasey .
Tweet media one
4
50
148
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
C++ trivia! Given... template <class T> struct Wrap { T t; }; ...name a type T for which sizeof(T) is greater than sizeof(Wrap<T>). #cpp
12
16
148
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
World's simplest C++20 tuple implementation?
Tweet media one
11
8
145
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
I've been told that Alex Stepanov feels that Generic Programming has failed because, where are the Generic #cpp libraries beyond the STL? In C++23, we're hoping to fix that with an initial set of Generic async algorithms based on a new fundamental abstraction: sender/receiver.
10
19
142
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
Someone found my long-lost IBM Model M keyboard! Squeee! I will soon be reunited with this clicky beauty.
Tweet media one
14
5
140
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Congrats to @visualc for shipping Concepts support! And unless I'm mistaken, MSVC is now first compiler with some level of support for the Big Three C++20 Language Features: concepts, modules, and coroutines! The MSVC team deserves mondo kudos. 👏
2
30
135
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
int i = 0; const auto& [first,second] = std::tie(i, i); ++first; Oh, did you think `const` meant you couldn't modify it? :-P Structured bindings are weird.
10
34
138
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 months
Tweet media one
6
8
140
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
The ISO C++ committee frequently catches a lot of heat, sometimes deserved, often not. But these folks all work very hard, and for the most part they are all volunteers.
1
11
132
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
Everyone seems to think C++ has reached an evolutionary dead end and needs a successor, but the ISO process works just fine. Riiiiiight.
13
2
130
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
I don't know who needs to hear this, but the STL is *not* OOP.
7
12
125
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 months
It's been merged! std::execution has landed!
8
13
125
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Generic Programming doesn't mean templates. It means generalizing algorithm implementations iteratively, discovering sets of requirements on their arguments and grouping the requirements into named concepts and hierarchies of concepts. It's about algorithms, not templates. #cpp
6
11
123
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
Read about how NVIDIA is using portable asynchrony to accelerate standard C++. My team and I published an article about the new stdexec library -- based on P2300 `std::execution` -- that NVIDIA recently shipped. #cpp #hpc #nvidia @NVIDIAHPCDev
4
22
123
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 years
A function to wait for N coroutines to finish and collect their results. This. Took. All. Day. I feel like Stalone at the end of Rocky. #cpp
Tweet media one
11
37
117
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
If I could go back in time and had the power to change C++, rather than adding virtual functions, I would add language support for type erasure and concepts. Define a single-type concept, automatically generate a type-erasing wrapper for it.
13
7
116
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
25 years ago today, I met the woman who would become my wife, and my life was forever changed for the better. I still can't believe I get to share a life with this beautiful, kind, intelligent, passionate, and fierce woman.
Tweet media one
5
0
114
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
Because I have first-hand experience that this feeling of consciousness is an illusion, a self-generating and self-sustaining pattern of neural firings that maintains a notion of "I" as an abstract entity separate from the world I inhabit.
8
4
114
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
What I like about programming is that there are these golden, fleeting moments in which I get to feel incredibly smart. Unfortunately, they usually follow **hours** in which I feel incredibly stupid.
3
11
113
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
I married a wonderful woman who was sadly hounded out of the tech industry by all the micro- (and macro-) aggressions women in this field suffer. Inclusivity is a very personal issue for me! My dudes: go to bat for your female coworkers. You have no idea the shit they endure.
1
12
115
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Seeing all the programming language memes going around lately, I thought to myself smugly that I don't hate any programming languages. Then I thought of CMake.
6
5
109
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 years
A little light reading for the flight to JAX for the wg21 committee meeting. Maybe I can convince the committee to make coroutines monadic. @BartoszMilewski #CPP
Tweet media one
7
17
112
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
Some folks in the #CPP industry are _really_ starting to grok how coroutines and sender/receiver are a basis for powerful, efficient, and composable asynchrony in C++. Must watch!
Tweet media one
5
15
109
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
I so fucking mad and heartsick at what ignorant bigots, drunk on fear and hatred, have done to my country. And I'm ashamed of my employer. How depressing.
8
4
109
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
Finally, a major vendor has shipped an implementation of Ranges. Nice work, @gnutools .
@gnutools
GCC - GNU Toolchain / [email protected]
4 years
The GCC Community is proud to announce the release of #GCC 10.1! Tremendous effort from all of the developers. Continually improving.
9
89
229
3
11
105
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
Tonight's hot take: The very existence of std::logic_error is itself a logic error.
Tweet media one
10
4
105
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
Hey, there's *nothing* wrong with the C declarator syntax, OK?
Tweet media one
16
6
105
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
I recently used clang's `__attribute__((nodebug))` to hide stdexec's trivial 1-liner dispatch functions. I no longer have to step through them in the debugger, and stack traces are way cleaner. This one went from 46 frames to 20! 🔥 Now I wish more modern C++ libs did this.
Tweet media one
Tweet media two
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
Clang has `__attribute__((nodebug))` for this, but GCC doesn't support that, sadly.
4
0
13
8
7
106
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
Object-oriented programming in C++ creates more problems than it solves.
@olafurw
Ólafur Waage
4 years
What programming related opinion do you have that results in this?
Tweet media one
31
1
20
8
4
100
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
I like regex so much, I implemented 3 different regex engines: GRETA, Boost.Xpressive (both backtracking NFAs) and a Thompson NFA, which was great fun. The Thompson NFA I implemented both in C++ and C#. Then Unicode happened and I lost heart.
@alexan_dev
Alex 💻🔥
3 years
Does anyone like regex?
319
21
736
4
12
99
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
11 months
Cool to see Intel taking senders to the embedded space. Looks like @ben_deane in involved, too. I'm curious how I could make stdexec more bare-metal friendly. Ben?
1
17
105
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
Since 2006, I have filed **66** bugs against the gcc front end, of which 41 have been resolved fixed. Is that a lot? Seems like a lot.
8
1
99
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
I am still very sad the C++ community lost JeanHeyd. We need to be better than this.
4
12
95
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 months
After a year of effort, the Library Working Group of the C++ Committee has finished its first pass through the wording of P2300, the std::execution proposal. All 100+ pages. Whew.
1
8
100
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
The single most important thing I did when I was young to help my career in Computer Science was to join the Speech & Debate team in high school. I can't stress enough how important communication skills are, even if you're a programmer.
7
12
99
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Announcing the v0.5.0 "HELL FREEZES" release of range-v3. This is the first version of range-v3 that officially supports MSVC. Props to the folks at @visualc for their hard work closing the gap, and for @CoderCasey for working around the remaining snags.
2
27
95
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 years
"Only half of the C++ community is above average" -- Bjarne Stroustrup
10
15
99
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 years
Alexander Stepanov. A mathematician, computer scientist, and historian, he bought a first edition of a major work by Peano (Formulario mathematico, I think), which is written in Peano's own variant of Latin. Stepanov learned the language and read the whole text ... in one night.
@estherschindler
Esther Schindler
6 years
Who is the smartest person you ever met? How did you know?
13
6
6
3
16
96
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 year
... and god help anyone who actually does this.
Tweet media one
15
5
95
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
WOW! This is much closer to my original vision for std::ranges. Feeling a ton of appreciation for the rangers on the Committee who did the spec work, and for the libstdc++ maintainers for implementing all this so fast. C++23 is going to be awesome. 😎
@code_report
Conor Hoekstra
2 years
TIL, GCC 13 implements all of C++23 Ranges, minus ranges::to and format support. That is pretty amazing! 🔥
Tweet media one
3
10
142
3
7
93
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
@lefticus CMake. Just kidding, it's awful.
3
1
91
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 years
The first part of the Ranges TS is one step closer to landing in C++20:
LEWG unanimously decided to forward standard library concepts to LWG for C++20
1
20
61
0
15
93
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 months
This is my team! Very good work. You can use CUDA and write modern C++ _at the same time_.
@marksaroufim
Mark Saroufim
6 months
llm.cpp was finally published today. It's very much CUDA C++ the good parts. Code: Talk: Speakers: and Jake Hemstad
0
44
314
4
6
95
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 years
I just built and ran all of range-v3's tests using Real Concepts™. A new day has dawned.
4
11
90
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
1 month
In today's C++, when you return a temporary, it is constructed directly in the caller's frame -- no move or copy. Now that we have that, it should be possible to return a native array from a function, no? There's no reason to cling to back-compat here.
Tweet media one
12
5
90
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
@victorxstewart Not at all. I get to ask questions and probe for deeper understanding. If the code isn't theirs, it shows up quick when you ask them to talk about it.
3
0
91
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
2 years
Programming is.... ...making yourself coffee and then forgetting to drink it before it gets cold because <gesticulates toward cursed computer>
7
4
90
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
Today is my last day as a Facebook employee. I'm proud of the work I did there, and very thankful for the opportunity to collaborate with @lewissbaker , @kirkshoop and @LeeWHowes on the foundations of native async. The party isn't over. Stay tuned.
3
2
89
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
It can seem hard to justify spending valuable dev time writing tests. It's doubly hard since "bugs we prevented" isn't a metric we usually get to measure. It takes fortitude as an IC to do it. It takes fortitude and wisdom as a manager to recognize and reward it. But we must.
7
11
89
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 months
The argument for C++ ISO standardization has always been that there are entire industries who won't or can't work with a language that lacks a standard. But those industries are now being told to avoid C++ because it isn't memory-safe. What is the argument for ISO now?
13
6
89
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 months
I've lived in Seattle for almost 30 years. I've never seen the Northern Lights like this before.
Tweet media one
Tweet media two
Tweet media three
Tweet media four
5
5
87
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
6 years
Print a formatted tuple to an ostream. Can you make it shorter? #cpp @SeanParent
Tweet media one
17
24
86
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Hey @Kitware , it would be really cool if the docs for each #CMake command had examples showing how to use them.
4
9
87
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
I have fallen badly behind on the maintenance of range-v3. Help wanted. Does anybody want to contribute to a popular open source C++ library? 🙏 #cpp
15
28
82
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
7 years
Just finished reviewing the last of the Ranges TS issues. Folks, it's done! #cpp
2
22
84
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
4 years
@vzverovich That's a rotate.
1
1
84
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Concept checking without concepts. #cpp
Tweet media one
Tweet media two
5
23
85
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
5 years
Wait, what? 🤯
7
8
86
@ericniebler
Eric Niebler 🇺🇦 ✊🏾
3 years
I don't understand why everyone on Twitter is so quick to call this invasion a failure for Russia, and P*tin's downfall. Seems like a lot of wishful thinking to me. These are early days. Hard days lie ahead. #IStandWithUkriane #FckPutin
8
4
82