7 ms·
Not being a c++ dev, I didn't realize there were multiple versions of the standard library - are they just different implementations of the same api? Are there
by netcraft 13y ago
Not being a c++ dev, I didn't realize there were multiple versions of the standard library - are they just different implementations of the same api? Are there other languages with multiple implementations of the standard lib?
- alexberghage 13y agoYes and yes! So, the C++ standard library differences don't usually bite you unless you're e.g. Building executables on windows with mingw and trying to link against libraries built with visual studio that use STL features at the API, but there are indeed several implementations out there. libstdc++, libc++, and msvcrt are among the more common. As for other languages with several standard libraries: a while ago that was a frequent criticism of D -- there were two competing standard libraries, which caused some division in the community.
- speeder 13y agoD was another issue entirely. It had a standard library, and a non-standard library that was more popular than the standard one, and they were not compatible at all. The reason it caused the division at community is that the ones that you could not use both on the same project, this meant that for a while you had two "D" languages that were separate, libraries made with one did not worked with the other...
- xavel 13y agoOh man, and I'm glad they finally settled for Phobos. I don't use D much, but thanks to gdc, the gcc frontend to dmd, and Phobos, writing D actually became acceptable, almost enjoyable. There's, of course, still the fact that D is not very widely used.
- synchronise 13y agoHas this issue with D been fixed, or do users still have to choose between two incompatible libraries?
- qznc 13y agoFixed with D2. Although, not all of Tango (the non-standard one) is available in D2/Phobos already. For example, Phobos has XML [2,3] stuff, but Tango's is supposed to be better [0]. Port is ongoing [1]. [0] http://dotnot.org/blog/archives/2008/03/12/why-is-dtango-so-fast-at-parsing-xml/ http://dotnot.org/blog/archives/2008/03/12/why-is-dtango-so-... [1] https://github.com/SiegeLord/Tango-D2 https://github.com/SiegeLord/Tango-D2 [2] http://dlang.org/phobos/std_xml.html http://dlang.org/phobos/std_xml.html [3] http://forum.dlang.org/thread/igmfgrfwzeqpwafeilfi@forum.dlang.org http://forum.dlang.org/thread/igmfgrfwzeqpwafeilfi@forum.dla...
- ArbitraryLimits 13y agoIt seems like C++'s lack of an ABI would bite you way before any issues with libc++. (Or is there one now? I'm getting old.)
- plorkyeran 13y agoIn practice all of the compilers have arrived at a common ABI for each platform.
- deleted 13y ago[deleted]
- HNLogInShit 13y agoWow, so we could now truly have "off-the-shelf" objects, which was going to be the future of software development in the '90s but never materialized?
- bstamour 13y agoTechnically C doesn't have a standard ABI either. Compilers just tend to use similar symbol names.
- pjmlp 13y agoTrue, what many perceive as the C ABI is actually the OS ABI. As most OSs tend to be written mostly in C, it is natural that C ABI == OS ABI. In the few cases where the OS was written in other languages, like the mainframe systems, the early 80's OS done in Pascal dialects (Mac OS), Modula-2 (Lillith), Assembly (MS-DOS/CP-M) and many others to list here, there was no C ABI to speak of.
- apaprocki 13y agoThat isn't true. IBM and Oracle's compiler do not share a compatible ABI with g++ or clang. Oracle is adopting the common ABI in Studio 13 and that's a pretty big deal.
- binarycrusader 13y ago
- betterunix 13y agoJava, Lisp, etc. have multiple implementations too. Different implementations often have different characteristics -- performance, compliance with the standard, etc.
- gohrt 13y agoEvery Java implementation is compliant with the standard -- it is part of the "Java(TM)" trademark licensing.
- pjmlp 13y agoIn theory yes. But as any developer that deployed applications across multiple JVMs will tell you, there are a few surprises along the way.
- microtherion 13y agoIn the specific case of C++, standard compliance was probably a pretty major factor, as the standard library for C++ is very complex, and vendors are not necessarily always fast to keep up with new features (or willing to port these to older platforms). For quite some time, STLport <http://www.stlport.org> http://www.stlport.org> was a life saver for providing modern, efficiently implemented library features on not-so-modern platforms. Conversely, the fact that the Apache library hadn’t been updated since 2008 probably means is that it’s not C++11 compliant at all, significantly behind most vendor libraries, and the effort for upgrading would be fairly significant.
- jordigh 13y agoYes, just like there are several C++ compilers, each of them can potentially use its own implementation of the standard library. This isn't all that rare in other languages. Python has a standard implementation, but there are others, e.g. http://pypy.org/ http://pypy.org/
- Tobu 13y agoPyPy reuses the Python stdlib as much as possible (though they do have patched up and/or rpython versions of some modules). PyPy's advantage is performance and hackability, but the stdlib isn't critical to that.
- _delirium 13y agoI would say most languages do. C is another one: the original AT&T C library has found its way via changes into some of the BSDs, but Linux systems typically use the GNU C library ("glibc"), which for copyright reasons had to be done as an independent implementation (the Unix source at the time was proprietary). Microsoft and IBM also have their own C library implementations.
- stephencanon 13y agoApple, Intel, HP, ... also have their own C library implementations, to say nothing of dinkumware and musl-libc and ..., or the various glibc derivatives like eglibc and bionic. I could go on for quite a while, now that I think about it.
- zeckalpha 13y agoBionic is a glibc derivative?
- cokernel_hacker 13y agoIt is not, it contains pieces of various BSD libc derivatives: http://codingrelic.geekhold.com/2008/11/six-million-dollar-libc.html http://codingrelic.geekhold.com/2008/11/six-million-dollar-l...
- stephencanon 13y agoNo, it’s not. Thanks for catching that (too late to edit, unfortunately).
- Tobu 13y ago(e)glibc and friends are fairly critical since they are the one exposing kernel features. Those that save a bit of space on embedded systems also have a selling point. For C++, aside from must-haves like open-source licences and community support, I don't see what the differentiators are.
- 13y ago
- thwest 13y agoDifferent implementations of the same API yes. They are more or less tied to the compiler you use.
- 0x0 13y agoIn the Android Native SDK (NDK), you can actually choose between 4 different implementations by toggling a switch: https://github.com/flyskywhy/android-ndk-r7b/blob/master/docs/CPLUSPLUS-SUPPORT.html https://github.com/flyskywhy/android-ndk-r7b/blob/master/doc...
- Benvie 13y agoEvery JavaScript engine has its own implementation of the JS standard library. V8's, for example, is almost entirely implemented in JS itself, while SpiderMonkey's is implemented mostly in C++ (though is migrating to more self-hosted in JS).
- reeses 13y agoBack in the old days, I used to prepare for interviews by writing the implementation for the (at the time) c and then c++ standard libraries. Interviewers would often draw from the spec for whiteboard coding. Even if it differed from the spec, it really reduced my stress level. The obvious win was that I knew the standards backward and forward, especially which ones were thread safe when that became important. It also helped with the same sort of interviews where I'd write the function prototype and then work through the implementation with the candidate. The other huge win for me was that I ended up developing an appreciation for automated test harnesses so I could implement without bias from the control. I'm not sure I could recommend implementing your own c++11 library (other than as an embedded subset for resource-constrained systems) but it can be fun to go through and do K&R as a bit of kata.
- lambda 13y agoHm. Is that really that surprising? Many more mature languages have been standardized with multiple competing implementations, some proprietary, some free. In fact, I think among popular languages, there are more of them with multiple competing implementations than there are with just one. Java, C, C++, Objective-C, C#, Fortran, JavaScript, Common Lisp, and Scheme all have multiple implementations, with their own implementations of the standard library. The main exceptions are the collection of "scripting languages" which got popular in the late '90s and early 2000s like Perl, Python, Ruby, and PHP, which have mostly grown communities around a single implementation. But Ruby and Python at least (I'm not sure about the others, being less familiar with them) have been working towards multiple implementations and at least somewhat standardizing the core language and library to make multiple implementations more viable.
- pjmlp 13y agoMaybe the OP does not know much about programming.