Thursday, September 24, 2015

Access to the Source Code

The code of Derivatives Algorithms is in two codebases.

One, for the code generator "Machinist", is publicly available at https://bitbucket.org/hyer/machinist.  It has somewhat more capabilities than are used for the samples in the book.  Those interested in code generation are welcome to critique, use, or contribute to it.

Note that Machinist contains no explicitly financial or quantitative content.

The C++ code presented directly in the book is extracted from is in a different repository, at https://github.com/TomHyer/DA_Bones_Mirror (a mirror of the master repo on Bitbucket).  This is a private repository, which I intend to open to all buyers of the book. 

If you are such a buyer (of the first or second edition), please write me at ${book_title}@gmail.com.  Enclose some evidence of your purchase, and I will invite you as a viewer of the code repository. 

Note that the code on Bitbucket is subject to change and development, and I may from time to time update the GitHub mirror.  Occasionally this will cause code snippets to differ from those presented in the book, but not so as to dilute their didactic value.

Second Edition is Now Published

World Scientific has confirmed to me that the Second Edition has been published.  It is available to order at their site.

Sunday, May 3, 2015

LLVM/Clang Compatibility

The source code in the book relies on some Microsoft extensions to C++.  I have changed the online sample code to compile cleanly with LLVM.  There are two common cases where the resulting code is made significantly more awkward.

First, Microsoft allows derived classes to access public data members of their "dependent base class" (here "dependent" seems to mean "having a template parameter") directly; LLVM requires the use of the qualified name.

Second, consider the idiom for rescaling a matrix (here, shown for just one row and column):
auto doScale = bind2nd(multiplies<double>(), scale));
Transform(&corr->Row(ii), doScale);
Transform(&corr->Col(ii), doScale);
Microsoft allows this; but LLVM will not pass a pointer to the unnamed return values of Row and Col, and requires them to be assigned to named variables.

Thus the online code has become slightly more verbose and obscure.  The code in the book, where space is at a premium, continues to rely on Microsoft extensions.

Tuesday, April 21, 2015

Machinist -- the Code Generator

The examples in the second edition, and the supporting library, use my public-domain project "Machinist" for all code generation.  Bitbucket users can view the code here (after logging on). 

Wednesday, March 25, 2015

Second Edition

World Scientific has contracted to publish a second edition of Volume 1 (Bones), and I have submitted the draft manuscript.