This week, we got Morel running on Go (following Java and Rust). Because a new platform is useless unless the language is the same everywhere, we designed a porting process driven by a shared corpus of tests. One, two, three… Go? You may be asking why Morel needs a third platform. The answer is that platforms don’t matter. More precisely, platforms shouldn’t matter to you, the user. They matter to…
Morel is more than a query language. Because it is a functional language with relational algebra built in, it can express problems that a query language can’t. It already supports constraint programming and logic programming, and package queries are another example.
Lambda syntax varies widely across languages; more widely, I think, than other language features. I wish it weren’t so. It’s difficult to see the elegance in a new language if the syntax is unfamiliar.
Morel’s design philosophy of “everything is an expression” has transformed how we think about queries, making them more composable and flexible than traditional SQL. One stubborn holdout was the order step, which required a special syntax with comma-separated order-items rather than a single expression. In this post, we describe how we evolved the syntax of the order step in Morel release 0.7, and…
SQL’s INTERSECT ALL and EXCEPT ALL operators rarely get attention, but they elegantly solve a classic math problem. The problem is computing the greatest common divisor (GCD) and least common multiple (LCM) of two integers, using the prime factors of those integers. In this post we show how to do this using intersect and except, Morel’s equivalent of INTERSECT ALL and EXCEPT ALL.
There are many excellent and innovative projects happening in the Rust data ecosystem. I am frequently asked whether Morel should be one of them. Thinking about this question gave me some insights into Morel’s strengths, and where our priorities should be.