Silicon Valley Code Camp : October 6th and 7th, 2012
Alex is C++ Portable Components (POCO) Project Lead. He is professionally consulting on C++, POCO as well as developing steel manufacturing automation and process control software since 1998. He has master's degree in mechanical engineering from Faculty of Engineering (University of Rijeka, Croatia) and master's degree in software engineering from Citadel Graduate College in Charleston, South Carolina. Alex is also IEEE (Computer Society) Certified Software Development Professional.
The C++ static type system is beneficial in many ways; it can, however, also be a straitjacket. Is there a rationale for dynamic type layer on top of a statically typed language like C++? Given both historical (ANSI C union and void*, MS COM Variant, boost::[variant, any, lexical_cast]) and recent (boost::type_erasure, Facebook folly::dynamic) development trends, the answer is a resounding "yes".
This presentation is based on Poco::Dynamic::Var (aka Poco::DynamicAny) - a dynamic-typing set of C++ classes; furthermore, it will show the simplicity and practical advantages of mapping ad-hoc generated data sets of unknown type, size, and structure to C++ data structures.
Specifically, the presentation demonstrates how to:
(1) Execute a generic "SELECT * FROM Table";
(2) Dynamically map returned data (row/column count and types) to C++ data structures at runtime;
(3) Format the result as [XML, JSON, HTML, your-favorite-data-format-here];
(4) Stream the resulting formatted string to std::ostream compliant HTTP socket stream.
Surely, this must be very complicated to do in C++, right? Not at all - we'll demonstrate all of the above done with a single line of code and then peek under the hood to see where/how does the magic happen. Portable? Of course. Scalable? You bet - it's C++! The content of this presentation fits perfectly into modern AJAXian trends and we'll prove it with an ExtJS example; it prompts re-thinking of the rationale for (a) employing dynamic languages on the server side or (b) polluting HTML with server-side code.