WG211/M24Rompf
We present Rhyme, an expressive language designed for high-level data manipulation, with a primary focus on querying and transforming nested structures such as JSON and tensors, while yielding nested structures as output. Rhyme draws inspiration from a diverse range of declarative languages, including Datalog, APL, JQ, Einstein summation (Einsum), GraphQL, and more recent functional logic programming languages like Verse. It has a syntax that closely resembles existing object notation, puts a large emphasis on easy composition through metaprogramming, and has the ability to perform query optimization and code generation through an expressive intermediate representation (IR). Our IR comprises loop-free and branch-free code with program structure implicitly captured via dependencies. Rhyme is designed for multi-paradigm workloads, allowing it to accommodate typical data pro- cessing operations such as aggregations, group-bys, and joins, along with tensor expressions (à la einops) and various interactions with the outside world (e.g., visualizing query outputs with tables, charts, and so on).