Parsing with Matches and Banana Clips
I find myself working with DSLs quite a bit, and thus I write a few parsers. Some languages are better than others for parsers and pattern matching is a technique that makes writing parsers a true joy....
View ArticleAsynchronous workflows in Clojure
Asynchronous workflows is a very powerful feature of F#, and recently I wanted to explore the state of the JVM and in particular Clojure when it comes to replicate the functionality. In this post I'll...
View ArticleScheme as an External DSL in Clojure
This is a follow-up post to my previous "Scheme in Clojure" post.This time we implement a Scheme interpreter as an external DSL. This means that we consider the DSL as completely foreign to the host...
View ArticleSome thoughts on Clojure performance
Edit: This post recently re-surfaced on hacker news and caused a bit of a stir, mainly because of a slightly sensational/misleading title (was "Why is Clojure so slow?"). I wrote this before Rich...
View ArticleAnnouncing Frinj, a practical unit-of-measure calculator DSL for Clojure
I am proud to announce a new Clojure project called "Frinj". Frinj is a practical unit-of-measure calculator DSL for Clojure. Key features;Tracks units of measure through all calculations allowing you...
View ArticleAdding Live Unit Feeds to Frinj
A couple of weeks has passed since I've pushed Frinj to github and blogged/tweeted about it. The response have been pretty awesome, one highlight being when @stuarthalloway showed me a frinj+datomic...
View ArticleWhat is a software company?
Software is different from most other things humans build, hence companies creating/selling/licensing software must be different from other 'production' companies as well? Some definitely are but the...
View ArticleDistributed Actors in Clojure
Here's another post on a topic that have been discussed since the dawn-of-time, is there is nice and idiomatic way to write Erlang/Actor style distributed programs in Clojure? There has certainly been...
View ArticleSome thoughts on logging
Have you ever tried to log from multi threaded program? Have you tried to make sense of the log output which multiple subsystems were logging to? Have you tried to do average latency calculations based...
View ArticleN-Queens with core.logic, take 1
I've been "hammock-reading" the excellent Reasoned Schemer book the last couple of months, on my quest trying to develop a gut feel for when logic programming, as defined by miniKanren/core.logic, is...
View ArticleN-Queens with core.logic, take 2
This post is a follow-up to my previous post on NQueens and core.logic, in which I tried to find the solutions using "pure" logic (without arithmetic goals) and basic minKanren / Reasoner Schemer...
View ArticleReplicating Datomic/Datalog queries with core.logic
I've been toying with Datomic recently, and I particularly like the power of it's query language (~Datalog). Mr Halloway showed a couple of months ago how the query engine is generic enough to be run...
View ArticleReplicating Datomic/Datalog queries with core.logic, take 2
This is a follow-up to my previous post on datalog-equivalent queries in core.logic.Here I present an alternate way to do the unification and join inside core.logic (without having to use...
View ArticleUntying the Recursive Knot
Here I present a couple of examples of the functional design pattern "untying the recursive knot". I've found this useful in a couple of occasions, for instance when breaking apart mutually recursive...
View ArticlecKanren time!
Mr David Nolen recently published core.logic 0.8.alpha2, with added cKanren (c for constraints) support. To celebrate this glorious event I'm writing up some core.logic/cKanren stuff I've been looking...
View ArticleSome more Datalog
I've written about datalog and Datomic a bit recently. To conclude here's another post comparing execution speed with the contrib.datalog library, by Jeffrey Straszheim. Clojure1.4 ready source can be...
View ArticleThe future of .NET lies in Mono. The future of F# lies in MonoDevelop.
It's been a year since I last wrote about F# and Mono. What's happened since then?F# 3.0 has recently been released, bundled in with the new all-grey, ALL-CAPS Visual Studio 2012. The biggest new...
View ArticleEmbedding a new runtime into your legacy C/C++ app
Let's say you have a big / legacy C++ app, then you're undoubtedly covered by Greenspun's tenth rule. Let's also say that your home-grown, buggy and slow DSL / scripting language has been pushed to the...
View ArticleTalk on Frinj
I recently gave a talk on frinj at Skills Matter in London.I go over the basics and also attempt some more involved calculations (*). Lots of live coding in Emacs included.Click here for the video(*)...
View ArticleMoving the blog
I've moved this blog over to github. Please update your bookmarks and RSS readers.Click here to go the new blog
View Article