Operator overloading or alternatives to expression templates
Ola Fosheim Grøstad via Digitalmars-d
digitalmars-d at puremagic.com
Sat Sep 12 23:17:26 PDT 2015
On Sunday, 13 September 2015 at 03:03:44 UTC, Andrei Alexandrescu
wrote:
> Yah, understood. Problem here is the approach is bound to run
> into walls at every few steps. Say you fix the comparisons to
> work. Then you have operators such as LIKE that are necessary
like(Person.Name,"peter%")
Person.Name == pattern("peter%")
> yet not representable in D. So more tricks are in order. This
> is what I've seen with ET in C++ - an endless collection of
> tricks to achieve modest outcomes at enormous costs.
FWIW, Guido wrote a similar query language to what Martin
proposes for Google App Engine called NDB:
https://cloud.google.com/appengine/docs/python/ndb/queries
They already had a string query language called GQL:
https://cloud.google.com/appengine/docs/python/datastore/gqlreference
I never use GQL, because the NDB solution is superior in every
way.
GQL is only for the REPL.
>>> 2. If you want to embed real SQL into D, use string-based
>>> DSLs.
>>
>> Strings don't capture context, aren't typechecked, and require
>> a complex
>> CTFE parser.
>>
>> db.get!Person.where!"age > 21 & name = ?"(name);
>
> Understood as well. I figure from the example you have binding
> in mind, which is good. At some point you need to bite the
> bullet and write a parser for the relational query language you
> want there.
No. D should stop abusing strings. Strings should never contain
references to type names. It makes it impossible to transpile D
in the general case.
Walter is unlikely to change his mind on opCmp, because he has
put a lot of emphasis on that restriction since D1, but I think
he overreacted on some C++ libraries being less than user
friendly.
The only thing you achieve is that people will create even uglier
hacks to get what they want, like using a thread local global AST
root pointer and build the AST as hidden side effects at runtime
instead.
More information about the Digitalmars-d
mailing list