ChaiScript 6 Years Later

It's been a little more than a year since our last update.

In the past year there has been a heavy focus on ChaiScript performance and correctness, with a side of features.

ChaiScript 5.7.1 was just released and 5.3.0 was available at the time of the last update.

Template Code Bloat Revisited: A Smaller make_shared

Note 2015-05-01 - fixed typos in first example Note 2015-05-04 - fixed typos in second example

Back in 2008 I wrote an article on template code bloat. In that article I concluded that the use of templates does not necessarily cause your binary code to bloat and may actually result in smaller code! This ended up becoming one of my more significant articles and has been referenced on wikipedia.

FizzBuzz in ChaiScript with Function Guards

I was recently reminded of the old FizzBuzz programming test and thought I would share a version of it for ChaiScript. ChaiScript has a possibly little used feature that allows you to execute a 'guard' or test before the function is executed, to see if it matches certain criteria. We can take advantage of this to generate rather readable version of FizzBuzz.

Adding std::future support to ChaiScript

Yesterday I decided to look into adding std::future support to ChaiScript. To be fair future is the return value of several other higher level threading constructs, so we don't want just "std::future," we want enough support to make it usable.

ChaiScript works very well with functions and function objects, so ideally we want something like:

Complex Object Initialization Optimization with IIFE in C++11

IIFE (Immediately-Invoked Function Expression) is a common tool used in JavaScript. The idea is to both define an anonymous function and call it in the same expression. The point is to produce a local scope for variables so they do not pollute the global scope.

This same technique can be deployed in C++ to lead to cleaner, safer, more performant code when building up objects which require multiple steps to initialize.

Make Sure You Provide Virtual Destructors

If you make use of inheritance, it's likely that you need to provide a virtual destructor for your classes. Modern compilers will warn if you do not, but this is a pretty recent development.

The problem is best illustrated with an example:

ChaiScript (almost) 5 Years Later

July 13, 2009 Reddit covered Release 1.0 of ChaiScript. Many things changed in the last 5 years. Features added, dependencies removed, and performance increased. With all of the changes, we decided it was time to provide a 5 year retrospective and give the world a second first-look at ChaiScript.

To start with, we've celebrated 5 years with a brand new website with organized examples (in progress) and documentation links:

And a continuous integration system: Build Status Coverage Status

Tech Roundup

I've been following a few different news sources lately and have found a few good articles and projects I thought I would share.

New ChaiScript Releases

We are proud to announce two new ChaiScript releases:

ChaiScript 4.0.0

  • Lots of bug fixes
  • Performance improvements
  • Support for ?: ternary operators
  • Support for switch statements

ChaiScript 5.0.0

This release is a complete retooling of ChaiScript that uses C++11 instead of Boost.

C++11: Auto

We've already covered C++11 decltype and why you should start using C++11 features today. Now we will move on to one of the most widely supported C++11 features: the new auto keyword.;