Overloading relational operators separately; thoughts?

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 27 23:38:02 PDT 2016


On 2016-09-28 03:18, Minty Fresh wrote:
> Currently, D offers fine grained overloading for most of the unary and
> arithmetic binary operators, but at some point a decision was made to
> lump together all of the relational operators (and if necessary, the
> equality operators) into a single function `opCmp`.
> And while it does add a lot of convenience and consistency to how
> operators behave, it does also put a lot of limitations on what they can
> do.
>
> For example, it's not currently possible to implement comparison
> operators that would behave lazily and only compute a certain value once
> a function call forces the computation.
>
> Similarly, it's not possible to construct a DSL that would produce code
> or a query in another language, by returning values behave like AST
> nodes rather than actually performing a comparison.
>
> ie.
>   table.users
>        .where!((users) => users.joined_on >= 3.days.ago)
>        .joins(table.posts)
>        .on!((posts, users) => posts.user_id == users.id)
>        .limit(10)
>        .toSql;
>
> It's a little odd to me that D puts so little focus on DSLs, since
> language features like template constraints, `opDispatch`, and even the
> fact that binary operators are overloadable via a single templated
> function are all very useful tools for implementing them.

I completely agree. Or we could go with an even more general approach: 
AST macros [1].

[1] http://wiki.dlang.org/DIP50

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list