<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4633523501776102249</id><updated>2011-08-29T04:34:22.114-07:00</updated><category term='run-time compilation'/><category term='math'/><category term='contact information'/><category term='linear algebra'/><category term='hanging chain'/><category term='optimization'/><title type='text'>Jeremy Pack's Coding Blog</title><subtitle type='html'>Boost.Extension (C++ Plugins), Scientific computation, Distributed Systems, and Boost.Reflection.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-3198383783963912163</id><published>2010-04-15T16:44:00.000-07:00</published><updated>2010-04-15T16:44:02.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contact information'/><title type='text'>Questions</title><content type='html'>If you have questions on Boost.Extension, feel free to contact me:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/profiles/100981388284358828816/contactme"&gt;Contact Jeremy Pack&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-3198383783963912163?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/3198383783963912163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=3198383783963912163' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/3198383783963912163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/3198383783963912163'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2010/04/questions.html' title='Questions'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-690514701234671049</id><published>2010-03-26T16:30:00.000-07:00</published><updated>2010-03-26T16:30:50.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hanging chain'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Hanging Chain with Varying Weights</title><content type='html'>Here's another hanging chain scenario. The red links are a little longer and much heavier.&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="235"&gt;&lt;param name="movie" value="http://www.youtube.com/v/b7219OI3mbM&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/b7219OI3mbM&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="235"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-690514701234671049?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/690514701234671049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=690514701234671049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/690514701234671049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/690514701234671049'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2010/03/hanging-chain-with-varying-weights.html' title='Hanging Chain with Varying Weights'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-4067459974029355370</id><published>2010-03-25T16:50:00.000-07:00</published><updated>2010-03-25T17:14:02.278-07:00</updated><title type='text'>The Hanging Chain Problem - or Catenary</title><content type='html'>Here's a video from some software I just wrote for the class I've been taking part time (you should never stop learning!)&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="200"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mOKtg7VurDU&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/mOKtg7VurDU&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Here's my description of the problem from my report:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Consider a chain hung from the ceiling. How can we predict its &lt;br /&gt;shape as it hangs? Each link in the chain will naturally fall until it &lt;br /&gt;is pulled back by neighboring links. As the links fall, the potential &lt;br /&gt;energy of the chain decreases until the chain has reached it’s ﬁnal &lt;br /&gt;shape. &lt;br /&gt;If we minimize the potential energy of the whole chain, while keep- &lt;br /&gt;ing the links connected, we can ﬁnd this ﬁnal shape. The most obvious &lt;br /&gt;method to solve this problem would be to slowly attempt to move the &lt;br /&gt;links of the chain downward without unlinking them. Each link would &lt;br /&gt;move a little bit at a time, eventually reaching its ﬁnal position. &lt;br /&gt;However, such a method could be very slow - especially for large &lt;br /&gt;chains. First of all, the actual movement of each link is restricted &lt;br /&gt;by the neighboring links, meaning that only inﬁnitesimal movements &lt;br /&gt;could be made at a time. In addition, moving any link will aﬀect every &lt;br /&gt;other link in the chain.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I'll add a few details of my solution once everyone else has turned their projects in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-4067459974029355370?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/4067459974029355370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=4067459974029355370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/4067459974029355370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/4067459974029355370'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2010/03/hanging-chain-problem-or-catenary.html' title='The Hanging Chain Problem - or Catenary'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-7093528715131837401</id><published>2010-01-29T09:06:00.000-08:00</published><updated>2010-01-29T09:06:57.609-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='run-time compilation'/><category scheme='http://www.blogger.com/atom/ns#' term='linear algebra'/><title type='text'>Run-time Compilation - Performance</title><content type='html'>I put together an example of compiling code generated at run-time, and then loading it using Extension:&lt;br /&gt;&lt;br /&gt;https://svn.boost.org/trac/boost/browser/sandbox/libs/extension/examples/runtime_compilation&lt;br /&gt;&lt;br /&gt;I'm preparing some experiments to compare the performance of numerical code compiled in advance to that compiled at run-time. There will be three test cases involving complex matrix operations:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The matrix sizes is known at compile-time, and can be used by the compiler for optimization. The matrix computations are done in the main binary.&lt;/li&gt;&lt;li&gt;The matrix sizes are not known at compile-time. The matrix computations are done in the main binary using algorithms that work for arbitrarily-sized matrices.&lt;/li&gt;&lt;li&gt;The matrix sizes are not known when the binary is compiled. When the binary loads a matrix, it will generate code on the fly to process the matrix. It will then compile the code into a shared library, load the shared library, and run the algorithm.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;My hypothesis is that it will be possible to make the runtime-generated code faster than the arbitrarily-sized matrix code, for the following reasons:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The compiler will be able to make certain optimizations that it can only do when it knows the size of the arrays being looped over.&lt;/li&gt;&lt;li&gt;I'll be able to use fewer variables and more constants in the compiled code.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;I expect it to be slower than the specialized pre-compiled code for two reasons though:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Code in a shared library usually runs more slowly than code in the binary itself. One reason for this is that shared libraries do not know which address space they will be running at during run-time, and can't hardcode as many pointers and such as an executable. (Note that operating system libraries often have an optimization to avoid this problem, by using reserved address space)&lt;/li&gt;&lt;li&gt;Even if it did run as fast, it has to be compiled and loaded first.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Any opinions? I hope to post preliminary results in the next couple weeks or so.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-7093528715131837401?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/7093528715131837401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=7093528715131837401' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/7093528715131837401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/7093528715131837401'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2010/01/run-time-compilation-performance.html' title='Run-time Compilation - Performance'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-2385212774011959953</id><published>2010-01-29T08:52:00.000-08:00</published><updated>2010-01-29T08:52:45.736-08:00</updated><title type='text'>Explanation</title><content type='html'>I consider Extension basically complete - quite a number of people are using it in projects. The main issue holding me back from submitting it for review by the Boost community is that I wanted to make the Reflection library part of Extension in a natural way, and I've been struggling at finding a balance between flexibility, performance and readability for the Reflection API. Also, of course, the Boost library review process is a bit painful - I'd need to block out at least 100 hours of my time to make sure the documentation, API, code, tests etc. were correct and easy to follow.&lt;br /&gt;&lt;br /&gt;My previous post shouldn't be considered as much an obituary as an explanation of the slow progress lately. As I mentioned, I haven't been able to make much progress on the Reflection/Extension integration and new Extension features partially because it's difficult to design an API without having code that requires it.&lt;br /&gt;&lt;br /&gt;If you find any features lacking in Extension, or aren't sure how to get the functionality you need, feel free to describe your use case to me - I can add the relevant functionality or documentation.&lt;br /&gt;&lt;br /&gt;Also, always feel free to send patches. Extension is in the Boost sandbox:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://svn.boost.org/trac/boost/browser/sandbox/libs/extension"&gt;https://svn.boost.org/trac/boost/browser/sandbox/libs/extension&lt;/a&gt;&lt;br /&gt;&lt;a href="https://svn.boost.org/trac/boost/browser/sandbox/boost/extension"&gt;https://svn.boost.org/trac/boost/browser/sandbox/boost/extension&lt;/a&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="https://svn.boost.org/trac/boost/browser/sandbox/libs/reflection"&gt;https://svn.boost.org/trac/boost/browser/sandbox/libs/reflection&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="https://svn.boost.org/trac/boost/browser/sandbox/boost/reflection"&gt;https://svn.boost.org/trac/boost/browser/sandbox/boost/reflection&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-2385212774011959953?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/2385212774011959953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=2385212774011959953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/2385212774011959953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/2385212774011959953'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2010/01/explanation.html' title='Explanation'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-3467566370672703991</id><published>2010-01-28T20:17:00.000-08:00</published><updated>2010-01-28T20:17:00.193-08:00</updated><title type='text'>Alternatives to Plugins</title><content type='html'>I honestly haven't put much time into Boost.Extension and Boost.Reflection lately.&amp;nbsp;My current work has no need for plugins of that type - and it's difficult to continue designing something without good current use cases to consider.&lt;br /&gt;&lt;br /&gt;I've actually been surprised by the use cases many people propose to me in e-mail. Some people are looking for a full reimplementation of COM, and want plugins that can be compiled with a very different set of compiler options than the binary loading the plugin. In most cases, I felt like their use case did not justify such a complex solution.&lt;br /&gt;&lt;br /&gt;So, do you really need C++ plugins? Consider the following:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Do you need C++ performance? Or would a Boost.Python solution of integrating plugins be more effective? Python is certainly easier to deploy.&lt;/li&gt;&lt;li&gt;Do you really need plugins? Or do you just need to compile your binary with different modules for different users?&lt;/li&gt;&lt;li&gt;Are you shipping your source code to users to compile? If so, they can just compile in the plugins instead of putting them in a shared library.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;If C++ plugins are still desired, here are my recommendations:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Always compile the binary and plugins with the same compiler options.&lt;/li&gt;&lt;li&gt;If you really need different compiler options:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Consider building a distributed system, with the binary and the plugin communicating over network sockets or IPC.&lt;/li&gt;&lt;li&gt;Consider using a plain C API, with very simple types being passed between the binary and the plugin (even structs can be a problem, since they may have different sizes depending on compiler options).&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div&gt;I plan to start posting here about some of my current work on the performance of optimization algorithms. I'm building a framework to automatically instrument and test different linear and nonlinear algorithms. I also hope to get back to dabbling in OpenGL...&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-3467566370672703991?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/3467566370672703991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=3467566370672703991' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/3467566370672703991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/3467566370672703991'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2010/01/alternatives-to-plugins.html' title='Alternatives to Plugins'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-7701645695096356968</id><published>2009-06-24T09:31:00.000-07:00</published><updated>2010-01-11T13:18:25.213-08:00</updated><title type='text'>Resource Management Across DLL Boundaries</title><content type='html'>&lt;span style="font-size: medium;"&gt;Resource management across DLL boundaries in C++ is tricky. Here are the basic rules used in Boost.Extension:&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="border-collapse: collapse; font-family: arial; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;ol&gt;&lt;span style="border-collapse: collapse; font-family: arial; font-size: 13px;"&gt;&lt;li style="margin-left: 15px;"&gt;&lt;span style="font-size: medium;"&gt;Anything allocated inside the DLL must be deallocated before the DLL is released. This means that if you pass a std::map into the DLL and modify it, you must delete (or at least clear()) the std::map before releasing the DLL.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;&lt;span style="font-size: medium;"&gt;In order to use an interface across the DLL boundary, you basically have to guarantee that both the DLL and main executable were compiled with the same options - this is, for me, the primary weakness of C++ with DLLs.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;&lt;span style="font-size: medium;"&gt;RTTI does not always function as expected across DLL boundaries. Check out the type_info classes to see how I deal with that.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-size: 16px;"&gt;Always use virtual destructors for your interfaces - then you can safely delete them from the main binary or in the DLL.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/span&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style="border-collapse: collapse; font-family: arial; font-size: 13px;"&gt;&lt;span style="font-size: medium;"&gt;It took a whole lot of trial and error to get this to work on different platforms.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="border-collapse: collapse; font-family: arial; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-7701645695096356968?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/7701645695096356968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/7701645695096356968'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2009/06/resource-management-across-dll.html' title='Resource Management Across DLL Boundaries'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-7811508233589948885</id><published>2008-08-01T10:27:00.000-07:00</published><updated>2008-08-01T10:41:11.174-07:00</updated><title type='text'>Translation Bar</title><content type='html'>At least 50% of the visitors to this web site do not speak English as a first language. I have placed a Google Translation box on the left. Hopefully this will help make it easier to understand.&lt;br /&gt;&lt;br /&gt;However, I realize that the translations it gives aren't very good - especially when it tries to translate source code. Don't misunderstand me - the Google software is quite impressive, but this is the type of text where a native speaker (who is also a programmer) is needed for a good translation.&lt;br /&gt;&lt;br /&gt;If you would like to provide translations of any of the documentation content, I will post it here. The most important parts are the first two tutorials.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-7811508233589948885?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/7811508233589948885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=7811508233589948885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/7811508233589948885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/7811508233589948885'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/08/translation-bar.html' title='Translation Bar'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-3312116631904172980</id><published>2008-08-01T10:03:00.000-07:00</published><updated>2008-08-01T10:12:39.019-07:00</updated><title type='text'>Download Options</title><content type='html'>There are a few different ways to install Boost.Extension and Boost.Reflection.&lt;br /&gt;&lt;br /&gt;I've provided a download, to the left here, that includes both Boost.Extension, Boost.Reflection, and all Boost libraries needed for the examples and tests.&lt;br /&gt;&lt;br /&gt;But, if you have Boost installed, you don't need all the other libraries, so feel free to just copy the boost/extension or boost/reflection directories to your Boost tree instead.&lt;br /&gt;&lt;br /&gt;If you want to always stay up to date with the latest changes, you can also get the libraries directly from the Boost Sandbox using Subversion:&lt;br /&gt;&lt;br /&gt;svn co http://svn.boost.org/svn/boost/sandbox/boost/reflection&lt;br /&gt;svn co http://svn.boost.org/svn/boost/sandbox/boost/extension&lt;br /&gt;&lt;br /&gt;Let me know if you have problems installing or compiling on any system.&lt;br /&gt;&lt;br /&gt;Also, as a note, the libraries themselves are header-only.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-3312116631904172980?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/3312116631904172980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=3312116631904172980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/3312116631904172980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/3312116631904172980'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/08/download-options.html' title='Download Options'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-1517737626116134026</id><published>2008-07-26T23:56:00.000-07:00</published><updated>2008-07-27T00:13:59.542-07:00</updated><title type='text'>Final Changes Before Review</title><content type='html'>Since I presented these libraries at BoostCon in May, I've been working to address a few of the feature requests mentioned there, and clean up the library for review for inclusion in Boost.&lt;br /&gt;&lt;br /&gt;I could use your feedback on the following:&lt;br /&gt;&lt;br /&gt;1 - What do you think is missing in the libraries?&lt;br /&gt;2 - Have you had any problems getting them to work? Which OS? Compiler?&lt;br /&gt;3 - I've updated the first three tutorials quite recently. Are they clear enough?&lt;br /&gt;4 - I've updated the header references recently (with Doxygen). Are those docs clear enough?&lt;br /&gt;5 - Anything else you can think of.&lt;br /&gt;&lt;br /&gt;Feel free to post a comment to this blog, or to send me an e-mail at rostovpack [at] gmail [dot] com.&lt;br /&gt;&lt;br /&gt;Just as a heads up, here are the things I plan to finish before review:&lt;br /&gt;&lt;br /&gt;The library headers themselves:&lt;br /&gt;&lt;br /&gt;1 - Add an optimization for the case where factories or reflected functions with unknown parameters are called.&lt;br /&gt;2 - Move the entirety of the Boost.Reflection library to the boost::extensions namespace and the boost/extension directory (because of how much the libraries overlap, I'd like to have them together for review).&lt;br /&gt;&lt;br /&gt;The documentation:&lt;br /&gt;&lt;br /&gt;1 - About 10 total tutorials - 3 are up to date, and one more is just about finished. The remaining tutorials will cover calling functions without knowing their signatures, compiling and loading new shared libraries at run-time (ie, c++ interpretation), reference-counting within shared libraries, storing version information etc. with factories, and some related topics.&lt;br /&gt;2 - Rewrite performance analysis section to take into account recent changes.&lt;br /&gt;3 - Expand FAQ and appendices.&lt;br /&gt;4 - Add installation instructions.&lt;br /&gt;&lt;br /&gt;The examples:&lt;br /&gt;&lt;br /&gt;1 - Examples for each of the tutorials listed.&lt;br /&gt;2 - An example plugin-based image processing system.&lt;br /&gt;3 - An example using GCCXML to automatically generate factory or reflection declarations.&lt;br /&gt;&lt;br /&gt;The build files:&lt;br /&gt;&lt;br /&gt;1 - I need to clean up and simplify the Jamfiles. I need to use some of the less well-documented features of Boost.Build to do it.&lt;br /&gt;&lt;br /&gt;Once the above are done, I plan to submit the library for review.&lt;br /&gt;&lt;br /&gt;While reading the docs, the main page lists at the bottom all of the parts that have been updated recently. Those are the most useful parts to read.&lt;br /&gt;&lt;br /&gt;If there's anything else that you want to see, please let me know.&lt;br /&gt;&lt;br /&gt;The redistributable is on the left in tar.gz format.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-1517737626116134026?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/1517737626116134026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=1517737626116134026' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/1517737626116134026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/1517737626116134026'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/07/final-changes-before-review.html' title='Final Changes Before Review'/><author><name>Jeremy</name><uri>http://www.blogger.com/profile/12569029669446564258</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-9197735044967297529</id><published>2008-07-15T15:59:00.000-07:00</published><updated>2008-07-26T20:10:06.538-07:00</updated><title type='text'>Latest Release - Downloadable</title><content type='html'>I've packaged together the latest stable release:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://redshoelace.googlepages.com/extension_reflection.tar.gz" onclick="javascript: if (typeof(urchinTracker) == 'function') urchinTracker('/download_latest_from_post');"&gt;extension_reflection.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It contains the tests, examples, documentation and headers. It also contains the other Boost libraries that these depend on. Most of the other libraries are used by the examples, but not required for using the headers.&lt;br /&gt;&lt;br /&gt;To use the library in your project, just add the root of the extracted directory to your include path (ie, /home/me/downloads/extension-reflection).&lt;br /&gt;&lt;br /&gt;If you want to make sure that the tests pass on your system, you will need bjam - see &lt;a href="http://boost.org/"&gt;boost.org&lt;/a&gt;. Then run the test_redist.sh script. If bjam is not in your path, you'll need to set the variable BOOST_BJAM_PATH. You can also set BOOST_BJAM_OPTIONS if needed.&lt;br /&gt;&lt;br /&gt;I'll provide a Windows .bat file in the next release.&lt;br /&gt;&lt;br /&gt;For the documentation, I've only updated the Extension reference section. The docs are at extension-reflection/libs/extension/doc/html/index.html in the redistributable. I'll post the latest docs up on this site once I've fixed some of the tutorials.&lt;br /&gt;&lt;br /&gt;Feel free to let me know if you have trouble getting the redistributable to work on a given system - it is a work in progress.&lt;br /&gt;&lt;br /&gt;Also, it can take a little bit of setup to use Extension without Bjam. If you've worked it out for your compiler/OS, feel free to send me your instructions and I'll try to post them with the documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-9197735044967297529?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/9197735044967297529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=9197735044967297529' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/9197735044967297529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/9197735044967297529'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/07/latest-release-downloadable.html' title='Latest Release - Downloadable'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-2139023747146941639</id><published>2008-04-09T18:41:00.000-07:00</published><updated>2008-04-18T10:42:37.135-07:00</updated><title type='text'>Back Up!</title><content type='html'>All data is back up. URLs should be the same as they were previously.&lt;br /&gt;&lt;br /&gt;Sorry for any inconvenience!&lt;br /&gt;&lt;br /&gt;Edit: Oops, some of my links were bad. This is fixed now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-2139023747146941639?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/2139023747146941639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=2139023747146941639' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/2139023747146941639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/2139023747146941639'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/04/back-up.html' title='Back Up!'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-5045505114436141505</id><published>2008-03-26T10:08:00.000-07:00</published><updated>2008-03-26T10:11:32.403-07:00</updated><title type='text'>Temporary Server Outage</title><content type='html'>I'm moving the documentation to a different server. As such, you'll need to get it by downloading the library directories from SVN (see earlier posts). It should all be there.&lt;br /&gt;&lt;br /&gt;Sorry for the inconvenience!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-5045505114436141505?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/5045505114436141505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=5045505114436141505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/5045505114436141505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/5045505114436141505'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/03/temporary-server-outage.html' title='Temporary Server Outage'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-9181451730102568098</id><published>2008-02-12T19:17:00.001-08:00</published><updated>2008-07-26T20:10:30.990-07:00</updated><title type='text'>Downloading the Libraries</title><content type='html'>As I've mentioned before, the easiest way to get these libraries and stay up to date, is to get them from the Boost Sandbox. However, the latest version of the libraries is also available here:&lt;br /&gt;&lt;br /&gt;&lt;a href='http://redshoelace.googlepages.com/extension_reflection.tar.gz'&gt;Extension/Reflection tar.gz file&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This archive also contains each of the Boost libraries used by the Extension or Reflection library, or by the examples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-9181451730102568098?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/9181451730102568098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=9181451730102568098' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/9181451730102568098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/9181451730102568098'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/02/downloading-libraries.html' title='Downloading the Libraries'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-2656723557156952650</id><published>2008-02-09T20:25:00.000-08:00</published><updated>2008-07-29T20:35:08.145-07:00</updated><title type='text'>Reflection/Extension interoperability</title><content type='html'>I've posted one single page of the Reflection docs - an example of reflecting classes that are located in shared libraries, using the Extension library. Since this is perhaps the most common use case for the library, I figured I'd post it even before the rest of the docs were done:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://boost-extension.redshoelace.com/docs/boost/extension/boost_extension/extension_reflection.html"&gt;Boost.Extension/Boost.Reflection interoperability&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-2656723557156952650?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/2656723557156952650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=2656723557156952650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/2656723557156952650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/2656723557156952650'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/02/reflectionextension-interoperability.html' title='Reflection/Extension interoperability'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-4487448028249344805</id><published>2008-02-08T23:28:00.000-08:00</published><updated>2008-07-31T21:27:46.345-07:00</updated><title type='text'>Docs Posted for Boost.Extension</title><content type='html'>I've posted the docs for Boost.Extension at:&lt;br /&gt;&lt;br /&gt;&lt;a href='http://boost-extension.redshoelace.com'&gt;Boost.Extension Documentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Almost half of the doc material was written by Mariano, the rest by myself.&lt;br /&gt;&lt;br /&gt;Boost.Reflection docs will be posted as soon as they are completed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-4487448028249344805?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/4487448028249344805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=4487448028249344805' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/4487448028249344805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/4487448028249344805'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/02/docs-posted-for-boostextension.html' title='Docs Posted for Boost.Extension'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-5127833481229744613</id><published>2008-02-08T22:15:00.000-08:00</published><updated>2008-02-08T22:22:21.295-08:00</updated><title type='text'>Back at Work</title><content type='html'>My apologies for the long hiatus! &lt;br /&gt;&lt;br /&gt;Currently, both libraries compile with:&lt;br /&gt;&lt;br /&gt;MSVC 2005&lt;br /&gt;GCC 4 (Ubuntu)&lt;br /&gt;GCC 4 (OS X)&lt;br /&gt;&lt;br /&gt;If you have any questions about compilation or installation, please let me know (just in the comments of this post is fine, or e-mail me at rostovpack - at - gmail.com.&lt;br /&gt;&lt;br /&gt;The Reflection documentation is incorrect - my next project. For examples of using reflection, I recommend looking the libs/reflection/test/ directory. The latest test is parameter_info_test.cpp, which allows you to store information about the arguments in a reflected function (for instance, names of the parameters). I haven't yet written in the code to actually retrieve this information, but it should be finished soon.&lt;br /&gt;&lt;br /&gt;If you see any compilation errors or warnings, please let me know.&lt;br /&gt;&lt;br /&gt;Current work:&lt;br /&gt;&lt;br /&gt;1 - Integrate the new Boost.Function/Factory functionality into Boost.Extension.&lt;br /&gt;2 - Update Reflection documentation and examples.&lt;br /&gt;3 - Uses for the parameter_info.&lt;br /&gt;&lt;br /&gt;Any feature requests?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-5127833481229744613?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/5127833481229744613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=5127833481229744613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/5127833481229744613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/5127833481229744613'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2008/02/back-at-work.html' title='Back at Work'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-8722736334683309610</id><published>2007-09-06T10:11:00.000-07:00</published><updated>2008-08-02T08:39:10.401-07:00</updated><title type='text'>What is Boost.Reflection?</title><content type='html'>Boost.Reflection is similar to, and can be used together with, Boost.Extension. However, it allows for creating and using objects without having access to the definition of the class or one of its base classes (Boost.Extension requires having access to one of a class's base classes).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Features:&lt;/div&gt;&lt;div&gt;&lt;ol id=""&gt;&lt;li&gt;Use arbitrary information to describe a class&lt;/li&gt;&lt;li&gt;Instantiate a class&lt;/li&gt;&lt;li&gt;Call its methods by arbitrary identifiers (although you can use strings to identify methods, it is possible to use any arbitrary information to select them)&lt;/li&gt;&lt;li&gt;Fast function calls - you only have the overhead of two functions called by function pointers.&lt;/li&gt;&lt;li&gt;Call functions without knowing what parameters they require.&lt;/li&gt;&lt;li&gt;Containers indexed by type.&lt;/li&gt;&lt;/ol&gt;Information about Boost.Reflection is currently contained in the Extension docs. Especially check out the following:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://boost-extension.redshoelace.com/docs/boost/extension/boost/reflections/basic_reflection.html"&gt;reflection.hpp reference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://boost-extension.redshoelace.com/docs/boost/extension/boost/reflections/basic_reflection/reflector.html"&gt;reflector reference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://boost-extension.redshoelace.com/docs/boost/extension/boost_extension/extension_reflection.html"&gt;Extension/Reflection interoperability&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-8722736334683309610?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/8722736334683309610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=8722736334683309610' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/8722736334683309610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/8722736334683309610'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2007/09/what-is-boostreflection.html' title='What is Boost.Reflection?'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-8975919499798944490</id><published>2007-09-06T10:04:00.000-07:00</published><updated>2007-09-06T10:11:20.780-07:00</updated><title type='text'>What is Boost.Extension?</title><content type='html'>Boost.Extension is a C++ library designed primarily to ease the creation of plugins. It allows for creating shared libraries that can be loaded by an executable, and which can implement interfaces defined in the executable. The executable can then instantiate and use these implementations.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Features:&lt;/div&gt;&lt;div&gt;&lt;ol id=""&gt;&lt;li&gt;Type-safety&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Arbitrary information can be stored about a plugin (version info, size, requirements etc.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fast - you access implementations through pointers to their interfaces, so you only have the normal overhead of a virtual function call&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thread-safe&lt;/li&gt;&lt;li&gt;Cross-platform (Windows, Mac, and Linux have all been tested)&lt;/li&gt;&lt;li&gt;RTTI is optional&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-8975919499798944490?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/8975919499798944490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=8975919499798944490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/8975919499798944490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/8975919499798944490'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2007/09/what-is-boostextension.html' title='What is Boost.Extension?'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-40255871917507847</id><published>2007-09-04T10:11:00.000-07:00</published><updated>2007-09-04T10:16:54.168-07:00</updated><title type='text'>Status</title><content type='html'>I've revamped the interface for Boost.Extension, to make it more concise. The main difference is that the RTTI requirement is easier to avoid now.&lt;br /&gt;&lt;br /&gt;Option 1:&lt;br /&gt;&lt;br /&gt;You can have separate containers for each set of constructors for a specific interface.&lt;br /&gt;&lt;br /&gt;Option 2:&lt;br /&gt;&lt;br /&gt;You can declare your own type of type info - perhaps just integers or strings.&lt;br /&gt;&lt;br /&gt;The latest change makes option one easier.&lt;br /&gt;&lt;br /&gt;A recent checkin in Boost.Build seems to have broken the build for documentation. If you have trouble generating the documentation, you may have to wait a few days until I check the latest docs into svn.boost.org in the sandbox. I managed to get the docs compiling successfully on Ubuntu, and should have the updates posted in three to four days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-40255871917507847?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/40255871917507847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=40255871917507847' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/40255871917507847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/40255871917507847'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2007/09/status.html' title='Status'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-1373209006781282569</id><published>2007-08-30T14:06:00.000-07:00</published><updated>2007-09-06T10:24:19.699-07:00</updated><title type='text'></title><content type='html'>I finally have the redesigned functionality for reflection. It's not done certainly, but the following will compile and work correctly. I'll be committing this to the SVN repository soon.&lt;br /&gt;&lt;br /&gt;Here's how it works:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/////////////////////////////////////&lt;br /&gt;//  In your code that reflects some class out:&lt;br /&gt;&lt;br /&gt;class MyClass {&lt;br /&gt;public:&lt;br /&gt;&amp;nbsp;&amp;nbsp;int myFunction();&lt;br /&gt;}&lt;/code&gt;&lt;div&gt;&lt;code&gt;// For terseness&lt;br /&gt;using namespace boost::reflections;&lt;br /&gt;generic_reflector * exportMyClass() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;reflector&lt;myclass&gt; * myClassReflector =&lt;br /&gt;&amp;nbsp;&amp;nbsp;new reflector&lt;myclass&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;// reflect an arg-less constructor&lt;br /&gt;&amp;nbsp;&amp;nbsp;myClassReflector-&gt;reflect_constructor();&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  reflect the member function&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  with some info about it&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  note that like boost::extensions,&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  the info parameter is templated&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  with a string as the default&lt;br /&gt;&amp;nbsp;&amp;nbsp;myClassReflector-&gt;reflect_method(&amp;MyClass::myFunction, "myFunction");&lt;br /&gt;&amp;nbsp;&amp;nbsp;return myClassReflector;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;///////////////////////////////&lt;br /&gt;//  Now in the code that will use the reflection&lt;br /&gt;//  (This code could be in a DLL, or the top code could be in a DLL etc)&lt;br /&gt;using namespace boost::reflections;&lt;br /&gt;&amp;nbsp;&amp;nbsp;int main(int argc, char * argv[]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  A reflection must be created with a pointer&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  to a generic_reflector&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  The reflection will destroy the generic_reflector&lt;br /&gt;&amp;nbsp;&amp;nbsp;reflection myReflection(exportMyClass());&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  Create an instance with a default constructor&lt;br /&gt;&amp;nbsp;&amp;nbsp;instance inst = myReflection.get_constructor().call();&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  Find the function with an int return value and&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  info of "myFunction" and call it.&lt;br /&gt;&amp;nbsp;&amp;nbsp;function&lt;int&gt; func =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myReflection.get_method&lt;int&gt;("myFunction");&lt;br /&gt;&amp;nbsp;&amp;nbsp;//  Call func on inst&lt;br /&gt;&amp;nbsp;&amp;nbsp;func(inst);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;////////&lt;br /&gt;&lt;/int&gt;&lt;/int&gt;&lt;/myclass&gt;&lt;/myclass&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-1373209006781282569?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/1373209006781282569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=1373209006781282569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/1373209006781282569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/1373209006781282569'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2007/08/i-finally-have-redesigned-functionality.html' title=''/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-5112662495021246080</id><published>2007-08-23T09:50:00.000-07:00</published><updated>2007-08-23T10:00:25.064-07:00</updated><title type='text'></title><content type='html'>One conversation from the Boost Mailing list contained a lot of the rationale behind both libraries. The basic design goals were the following, in order of importance:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Cross-platform (this is Boost - it has to be)&lt;/li&gt;&lt;li&gt;Concise, natural interface (no macros, etc.)&lt;/li&gt;&lt;li&gt;Minimization of dependencies on other Boost libraries&lt;/li&gt;&lt;li&gt;Separation of optional features of the library from the primary headers&lt;/li&gt;&lt;li&gt;Performance&lt;/li&gt;&lt;/ol&gt;Number 3 was difficult, and we've decided to &lt;span style="font-style: italic;"&gt;probably&lt;/span&gt; require inclusion of Boost.Preprocessor. Constructors or other functions with many arguments require a lot of template code that is much easier to just generate using Boost.Preprocessor. Boost.Function will probably be required as well.&lt;br /&gt;&lt;br /&gt;For some of the original discussion on some of these design decisions, see the &lt;a href="http://lists.boost.org/Archives/boost/2007/03/117803.php"&gt;discussion&lt;/a&gt; that began with Mariano's interest in writing a plugin library for the Google Summer of Code:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-5112662495021246080?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/5112662495021246080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=5112662495021246080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/5112662495021246080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/5112662495021246080'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2007/08/one-conversation-from-boost-mailing.html' title=''/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633523501776102249.post-159896424401268334</id><published>2007-08-23T09:28:00.002-07:00</published><updated>2007-08-23T09:33:36.033-07:00</updated><title type='text'>Current Progress</title><content type='html'>Mariano Consoni has been working on both Boost.Extension and Boost.Reflection over the summer. Our current status on these two projects:&lt;br /&gt;&lt;br /&gt;1 - Boost.Extension is mostly complete. One piece of functionality that I have not finished is the ability to automatically close shared libraries that do not currently have any loaded plugins. The main obstacles here are preserving the current Boost.Extension syntax and overcoming some platform irregularities (on Mac OS X there are two types of dynamically linked library with very different properties - bundles and dylibs).&lt;br /&gt;&lt;br /&gt;2 - I am currently working with the code that Mariano wrote for Boost.Reflection to make it a bit more generic and do some cleanup and performance tuning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633523501776102249-159896424401268334?l=blog.redshoelace.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.redshoelace.com/feeds/159896424401268334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4633523501776102249&amp;postID=159896424401268334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/159896424401268334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633523501776102249/posts/default/159896424401268334'/><link rel='alternate' type='text/html' href='http://blog.redshoelace.com/2007/08/current-progress.html' title='Current Progress'/><author><name>Jeremy Pack</name><uri>http://www.blogger.com/profile/11778436344324270641</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
