Bit Syntax in Erlang
One of the often under-appreciated features of Erlang is its Bit Syntax for parsing and pattern matching binary data at a bit level. For instance, to pare TCP segments you can write something along the line of:
The same capability can be applied to anything binary protocols, such as video encoding, imaging, or UDP.
Imitating with F# Computation Expressions
Whilst this capability is not built into F#, or any other language that I know of for that matter, we do have a very powerful, and robust feature in F# in Computation Expressions.
With computation expressions, I was able to create a small library that allows you to write and read data to and from a stream at a bit level. With the bitWriter and bitReader workflows you will be able to write and parse TCP headers with code like the following:
The library is available via Nuget:
please give it a try, and let me know if you find any bugs here.
p.s. there is still much work to be done on the library. For instance, it’s allocating a new buffer array for each workflow rather than using a buffer pool. If you find this library useful and in need for greater performance, please feel free to contribute and help improve the performance of this library.