Writing data structures in all languages is an advanced topic, if by "data structures" you mean data structures sufficiently generic and powerful enough to be used by a very wide variety of programmers. Do not be confused by the fact that you were able to bash together a linked-list library in C for some task or other that seemed to work for you; it almost certainly has bugs, suboptimal memory usage if not outright leaks, inefficiencies, and an API that would render it not very popular as a generic library for everyone to use. The reason is that "sufficiently generic and powerful enough to be used by a wide variety of programmers" is intrinsically a very high bar.
Under every language you use are some frightfully subtle data structures, and the easier they are to use (i.e., Python dicts), the more frightfully subtle they are under the hood.
(Since certain people have developed a knee twitch with the word "generic" lately, let me note that I mean generic in its most, ahem, generic sense, not specifically the programming language research term.)
"if by "data structures" you mean data structures sufficiently generic and powerful enough to be used by a very wide variety of programmers"
Nope, not what i meant. Just a data structure suited to my very specific problem, optimized just for my particular case. That's usually much easier than solving the general problem in a generic manner. And that should be possible to do easily in a programming language.
> Just a data structure suited to my very specific problem
I think the point is that it's harder to do this properly than it seems like it is, especially in a systems language. I've seen many "working" shared pointers in C++ that only worked if you used them in the way the original authors happened to use them. They wouldn't work if, say, you put a bunch of them in a std::vector.
So some of this is about what "works" means to different people.
Under every language you use are some frightfully subtle data structures, and the easier they are to use (i.e., Python dicts), the more frightfully subtle they are under the hood.
(Since certain people have developed a knee twitch with the word "generic" lately, let me note that I mean generic in its most, ahem, generic sense, not specifically the programming language research term.)