📄 history.qbk
字号:
]][:['- fewer bugs like the one Joaquin found]][:['- better space efficiency]][:['- exception-safety guarantees are immediately full-filled (I haven'tlooked, but I suspect that there are several bugs in this area)]][*Daniel][:['Multi_index supports everything a bimap would, but itsinterface is more cumbersome. I for one won't use a W3DOM-like libraryif we get one, but I would happily use property_tree. I've also onlyused multi_index once, and that was to use it as a bidirectional map.Property_tree covers other areas as well as being a potential subset ofan XML library, but I still hold there is value in such a subset.]][*Boris][:['I haven't used program_options yet. But if I understandcorrectly both libraries seem to support storing and accessing data withstrings that might describe some kind of hierarchy. This seems to be the coreidea of both libraries - is this correct?]][:['Then it wouldn't matter much what container is used. However a generic treewhich can store data hierarchically probably makes most sense. If Iunderstand correctly both libraries could make use of such a class?]][*Marcin][:['I think generic tree container is material for another library.Whether property_tree should be based on it or not is a matter of internalimplementation, and generally of little interest to users. The biggest valueof property_tree is in its easy to use interface, that should not becompromised, if at all possible. I have been already reassured in this viewby quite many people who took their time to review the library.]][*Boris][:['I was trying to see the big picture: I rather prefer a C++standard based on a few well-known concepts like containers, iterators,algorithms etc. instead of having a C++ standard with hundreds of components which are tailored for specific needs, collaborate with only a handful of othercomponents and think they provide an easy-to-use interface while all theeasy-to-use interfaces make the whole standard less easy-to-use.]][:['That said I have used your property tree library myself to read and write aconfiguration file. It was indeed very easy to use. However it would havebeen even easier if it was something I had known before like eg. aniterator. For now I will definitely use your property tree library but wouldappreciate if existing concepts were reused many C++ developers are familiarwith. My opinion is that your library should be a part of Boost but shouldbe more generalized in the future.]][*Thorsten][:['Well, I think we need both. Boost.MultiIndex is a great library and can do all kinds of wonderful things. But I would still like to seea bidirectional map (boost::bimap) written as a wrapper around it toget an easy and specialized interface.]][*Pavel][:['Bimap is available in libs/multi-index/examples/bimap.cpp.]][*Thorsten][:['Right, but the real value comes when somebody designs a niceSTL-like interface and write docs etc, at least that was my point.]][*Dave][:['IMO Thorsten is exactly right. This is precisely the sort of thing that could be added to the library as part of its ongoing maintenanceand development (without review, of course).]][*Joaquin][:['Thorsten, we have talked about this privately in the past, but I feel like bringing it to the list in the hope of getting the attention of potential contributors:]][:['There are some data structures buildable with B.MI which are regarded asparticularly useful or common, like for instance the bidirectional map orbimap. A lean and mean implementation is provided in the aforementionedexample, but certainly a much carefully crafted interface can be providedkeeping B.MI as the implementation core: operator\[\], selection of1-1/1-N/N-1/N-N variants, hashing/ordering, etc.]][:['I'm afraid I don't have the time to pursue this, as the current roadmap forcore features of B.MI is taking all the spare time I can dedicate to thelibrary. For this reason, I would love to see some volunteer jumping in whocan develop this and other singular containers using B.MI (a cache containercomes to mind) and then propose the results here either as a stand alone library of as part of B.MI --I'd prefer the former so as to keep the sizeof B.MI bounded.]][:['If there's such a volunteer I can provide her with some help/mentoring. I alsowonder whether this is a task suitable to be proposed for Google Summer of Code.]][*Thorsten][:['I think it would be good for SOC. All the really hard thingsare taken care of by B.MI, and so it seems reasonable for a student to be ableto fill in the details.]][*Dave][:['Great!]][*Jeff][:['Please write a proposal!]][*Joaquin][:['I've just done so:]][blurb *Specialized containers with Boost.MultiIndex* *Introduction* Boost.MultiIndex allows the construction of complex data structures involving two or more indexing mechanisms on the same set of elements. Out of the unlimited range of possible data structures specifiable within Boost.MultiIndex, some particular configurations arise recurrently: *a.* A bidirectional map or bimap is a container of elements of type pair<T,Q> where fast look up is provided both for the T and the Q field, in contrast with a regular STL map which only allows for fast look up on T. *b.* An MRU (most recently used) list keeps the n last referenced elements: when a new item is inserted and the list has reached its maximum length, the oldest element is erased, whereas if an insertion is tried of a preexistence element, this gets promoted to the first position. MRU lists can be used to implement dynamic caches and the kind of behavior exhibited by programs featuring a "Recent files" menu command, for instance. Although Boost.MultiIndex provides the mechanisms to build these common structures, the resulting interface can be cumbersome and too general in comparison with specialized containers focusing on such particular structures. *Goal* To write a library of specialized containers like the ones described above, using Boost.MultiIndex as the implementation core. Besides bimap and MRU list, the student can also propose other specialized containers of interest in the community. It is expected that the library meets the standards of quality required by Boost for an eventual inclusion in this project, which implies a strong emphasis on interface design, documentation and unit testing; the mentor will be guiding the student through the complete cycle from specification and requirements gathering to documentation and actual coding. The final result of the project must then contain: *a.* Source code following [@http://boost.org/more/lib_guide.htm#Guidelines Boost programming guidelines]. *b.* User documentation. Requirements on the format are loose, though the [@http://www.boost.org/tools/quickbook/doc/html/index.html QuickBook] format is gaining acceptance within Boost. *c.* Complete set of unit tests powered by [@http://boost.sourceforge.net/boost-build2/ Boost Build System V2]. *Requirements* *a.* Intermediate-to-high level in C++, with emphasis in generic programming (templates). *b.* Knowledge of the STL framework and design principles. Of course, knowledge of Boost in general and Boost.MultiIndex in particular is a big plus. *c.* Acquaintance with at least two different C++ programming environments. *d.* Some fluency in the English language; subsequent reviews of the documentation can help smooth rough edges here, though. *e.* A mathematical inclination and previous exposure to a formal Algorithms course would help very much. *f.* A craving for extreme quality work. *Benefits for the student* The student taking on this project will have the opportunity to learn the complete process of software production inside a highly regarded C++ open source institution, and even see her work included in Boost eventually. The completion of the project involves non-trivial problems in C++ interface design and so-called modern C++ programming, high quality user documentation and unit testing. The student will also learn, perhaps to her surprise, that most of the time will be spent gathering and trying ideas and, in general, thinking, rather than writing actual code.][*Matias][:['I am planning to submit an application to SoC. I will love to make realthe specialized containers you mention and try to include some useful others.]][:[^And then... after long hours of coding (and fun) this library saw the light.]][:__BOOST_BIMAP_LOGO__][endsect][endsect]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -