This post is based on my talk “Finagle: Under the Hood” that was presented
at Scala Days NYC. I thought I’d publish this for those who prefer reading instead of watching (video
is not yet published anyway). The full slide deck is available online as well.

Turns out I’ve never mentioned anything about Finch, a library I’m working on most of my
free time, in my personal blog. So I decided to finally fix that and write a small note on what I
think about Finch’s performance as an HTTP library/server. To be more precise, I want to comment
the most recent results of the TechEmpower benchmark and perhaps, give some
insights on why Finch is ranked so high there.

Functional programming nicely leverages constraints on *how* programs are written thereby promoting a clean and easy to reason about coding style. *Purely functional data structures* are (surprisingly) built out of those constraints. They are **persistent** (FP implies that both *old* and *new* versions of an updated object are available) and backed by **immutable** objects (FP doesn’t support *destructive updates*). Needless to say, it’s a challenge to design a purely functional data structure that meets performance requirements of its imperative sibling. Fortunately, it’s quite possible in most of the cases, even for those data structures whose reference implementations are backed by mutable arrays. This post precisely describes a process of designing a purely functional implementation technique for Standard Binary Heaps, with the same asymptotic bounds as in an imperative setting.

Combinatorics is a branch of mathematics that mostly focuses on problems of counting the structures of given size and kind. The most famous and well-known examples of such problems might be often asked as job interview questions. This blog post presents four generational problems (combinations, subsets, permutations and variations) along with their *purely functional* implementations in Scala.

In 2009, Vladimir Yaroslavski introduced a Dual-Pivot QuickSort algorithm, which is currently the default sorting algorithm for primitive types in Java 8. The idea behind this algorithm is both simple and awesome. Instead of using single pivot element, it uses two pivots that divide an input array into three intervals (against two intervals in original QuickSort). This allowed to decrease the height of recursion tree as well as reduce the number of comparisons. The post describes a similar dual-pivot approach but for a BinarySearch algorithm. Thus, our modified binary search algorithm has prefix *Dual-Pivot*.