Operator overloading -- lets collect some use cases

Don nospam at nospam.com
Mon Dec 29 22:28:53 PST 2008


aarti_pl wrote:
> Don pisze:
>> aarti_pl wrote:
>>>>> DSL support in mother language. As an example I can give SQL in D 
>>>>> or mockup tests description language (usually also in D - not as a 
>>>>> separate script language).
>>>>
>>>> Could you be more specific about this? For SQL, arithmetic and 
>>>> logical operators don't seem to be involved. 
>>>
>>> In fact they both can be involved. Below are operators which are 
>>> understood by SQLite - one of the simplest databases:
>>>
>>> Binary:
>>>     ||
>>>     *    /    %
>>>     +    -
>>>     <<   >>   &    |
>>>     <    <=   >    >=
>>>     =    ==   !=   <>   IN  LIKE  GLOB  MATCH  REGEXP
>>>     AND
>>>     OR
>>>
>>> Unary:
>>>     -    +    ~    NOT
>>>
>>> As you see there are arithmetic operators and as well logical 
>>> operators, which are used in SQL expressions.
>>>
>>>
>>>> The example you gave showed (if I understand correctly) a wish to 
>>>> make expression templates involving comparison operators, a task 
>>>> which is currently impossible.
>>>>
>>>
>>> Why do you mention expression templates? Its not necessary to use 
>>> them in my opinion. Operator overloading should be just right for 
>>> this task.
>>
>> It seems to be the same concept: the == operator does not perform an 
>> == comparison, rather the return value records the operands which were 
>> used, and records the fact that an equality comparison needs to be 
>> made. The actual equality comparison is done later, when the complete 
>> expression is known (it is done in the SQL statement).
>>
>>> I see built-in operators overloading as a part of wider category of 
>>> defining infix functions (eventually also postfix functions).
>>
>> It seems to be a case where you want an abstract syntax tree.
> 
> Abstract syntax tree can be quite easily created using concepts already 
> existing in D.
[snip]

Of course they can. My point is simply: creating syntax trees is what 
you're using operator overloading for. You're actually not creating 
operations.

>>> Also I would like to add a word to my latest post regarding string 
>>> mixins as I see I was not clear enough about it. It should be 
>>> possible to construct queries itself on runtime like below:
>>>
>>> DbTable Person = ....; //In my case DbTable keeps table columns and 
>>> few other informations
>>>
>>> DbMatrix getPersons(SQLExpression exp) {
>>>     Query query = Select(Person).Where(exp);
>>>     return Database.execute(query);
>>> }
>>>
>>> void main() {
>>>   SQLExpression exp = (Person.Name == "John");
>>>   DbMatrix res = getPersons(exp);
>>> }
>>>
>>> This is what I mean by constructing queries on runtime. With string 
>>> mixins you will have to do not only mixin(SQL("SELECT ....")) but 
>>> also mixin(SQLExpression()), what gets really complicated in the end.
>>
>> No. You can always move the complexity into the mixin string parser.
>> (since you can get full type information of everything mentioned in 
>> the string).
> 
> I don't think it is possible. Imagine that you have additionally 
> OrderByExpression and few others expressions like GroupByExpression etc. 
> Now you parser will have to guess what you need just using one method 
> SQL():
> 
> mixin(SQL("SELECT * FROM a;"));      // result: SelectQuery
> mixin(SQL("Person.Name == i + 5"));  // result: WhereExpression
> mixin(SQL("Person.Surname ASC"));    // result: OrderByExpression
> 
> I wouldn't want to write such a parser. And additionally probably some 
> expressions would be ambiguous.
> 
> But it is possible that I miss something here, so if possible please 
> provide usage examples. You can take e.g. above snippet with passing 
> SQLExpression into function.

You're right, I misunderstood what you were doing.

>> BTW, the string mixin is just a temporary evil -- it's a way of 
>> getting an abstract syntax tree using existing D. It's severely 
>> lacking syntax sugar.
> 
> I don't know much about what will be cooked in future for D. But 
> listening to proposed features would be definitely interesting  :-)
> 
> BR
> Marcin Kuszczak
> (aarti_pl)



More information about the Digitalmars-d mailing list