Skip to content
Dave Hudson edited this page May 9, 2017 · 8 revisions

Why A New Library?

I built this for lots of different reasons:

  • I often build mathematical simulations for problems I want to investigate, and as a programmer I tend to write programs to do this rather than use other modelling frameworks. Some of the simulations are things I share as open source projects, and so I wanted something that was stand-alone and non-proprietary, but some of them aren't open and I didn't want the restrictions that a GPL or LGPL license might imply. I also didn't want to have to include a huge framework to build simple programs :-)

  • I care a great deal about software performance (and for quite a number of years was a gcc backend developer for 2 embedded ISAs), so I wanted to understand the performance characteristics of arbitrary precision maths. Writing this from scratch has let me do this, and I've been able to ensure that performance measurements have been part of the codebase from day one. If you read the Dev Notes pages then you'll see continuous work on performance once the code reached a basic functional state.

  • I wanted to have the opportunity to write about building a reasonably complex library, and about how I think about performance optimization. In the past I've done both, but was never in a position to publish the details outside of the companies I was working for. Writing about software has always proven to be useful to me. Having to explain what I've written often gives me new insights into what I should do next, but also helps me spot things that don't really make sense. Part of that means writing about things that ultimately turn out to be dead-ends, but, to me at least, that often gives some of the best understanding of the current version. By seeing what didn't work, it's possible to better understand the design choices that did.

  • Having had (too many) years of writing C code, C++ 14 persuaded me to switch back to C++ for application code, so I wanted a library that took full advantage of modern C++ capabilities.

Why A BSD License?

In the past I've written a lot of code under many different open source and closed source licenses. In this instance I wanted to make it possible to use what I've written in both open and closed software, and without significant burdens on either. I thought about making this public domain, but I firmly believe that authors/creators should be credited for their work because they've often invested substantial amounts of time in it. A 3-clause BSD license seems like a good balance.

The Wiki Documentation Looks Slightly Odd?

The Wiki documentation pages are identical (the same .md files) as the files found in the doc/*.md sources. This means there have to be some compromises, but hopefully nothing too distracting :-)

Clone this wiki locally