News for hackers. Stuff that matters.
Re:Why should I have written ZeroMQ in C, not C++ (part II) by aidenn0 on Thursday August 30, 2012 @12:54PM (#4455529)
I agree its a problem with C++, but IMO it is an inevitable consequence of its strengths: namely that it is regularly used across a very wide range of domains than other languages. I've sen it used on 16-bit microcontrollers, where templates and exceptions were considered harmful, and in large applications, where those features were considered essential.
Re:Why should I have written ZeroMQ in C, not C++ (part II) by rumcajz on Thursday August 30, 2012 @01:20PM (#4455675)
How would you implement an O(1) list without breaking encapsulation then?
Re:Why should I have written ZeroMQ in C, not C++ (part II) by tptacek on Thursday August 30, 2012 @01:21PM (#4455678)
What do you mean, "O(1) list"?
Re:Why should I have written ZeroMQ in C, not C++ (part II) by tg3 on Thursday August 30, 2012 @01:55PM (#4455841)
I assume he meant "a list from which an element can be removed in constant time."
Re:Why should I have written ZeroMQ in C, not C++ (part II) by mpyne on Thursday August 30, 2012 @03:15PM (#4456255)
Perhaps I'm being dumb, but doesn't std::list<T> already do exactly this?

From SGI's STL docs:

"A list is a doubly linked list. That is, it is a Sequence that supports both forward and backward traversal, and (amortized) constant time insertion and removal of elements at the beginning or the end, or in the middle"

Re:Why should I have written ZeroMQ in C, not C++ (part II) by malkia on Thursday August 30, 2012 @04:10PM (#4456494)
As others have said - yes, as long as you keep the iterator not the object itself. e.g. from T itself you cannot find where it was stored, so with std::list<something>, and then only from something you can't find where it is (you can have to look for it in the list).
Re:Why should I have written ZeroMQ in C, not C++ (part II) by eklitzke on Thursday August 30, 2012 @03:31PM (#4456315)
The idiomatic way to access and manipulate STL data structures is through iterators. In this case, an iterator for a std::list is basically a pointer/reference to the person container in the article, so if you're referring to the list objects via their iterators there's no need for O(n) list traversal.
Re:Why should I have written ZeroMQ in C, not C++ (part II) by tedunangst on Thursday August 30, 2012 @02:03PM (#4455887)
The question doesn't make much sense. Your C example totally breaks encapsulation.
Re:Why should I have written ZeroMQ in C, not C++ (part II) by rumcajz on Thursday August 30, 2012 @02:22PM (#4455994)
Well, what kind of problem is that in C? It's C. It has no public/private keywords. Nobody expect struct in C to be well-encapsulated.
Re:Why should I have written ZeroMQ in C, not C++ (part II) by scott_s on Thursday August 30, 2012 @03:31PM (#4456308)
It's also not a problem in C++ if you don't care. Just because C++ gives you the means to enforce encapsulation doesn't mean you have to. And, as I said below, when your goal is performance and you need to break abstractions, it makes sense not to enforce encapsulation.
Re:Why should I have written ZeroMQ in C, not C++ (part II) by ahupp on Thursday August 30, 2012 @02:27PM (#4456026)
http://www.boost.org/doc/libs/1_35_0/doc/html/intrusive/usag...

Not sure if this qualifies as not "breaking encapsulation" but it's as close as you're going to get.