Short list with things to finish for D2

aarti_pl aarti at interia.pl
Mon Nov 23 11:49:18 PST 2009


yigal chripun pisze:
> aarti_pl Wrote:
> 
>> Walter Bright pisze:
>>> Don wrote:
>>>> There's not many sensible operators anyway. opPow is the only missing 
>>>> one that's present in many other general-purpose languages. The only 
>>>> other ones I think are remotely interesting are dot and cross product.
>>> Yup.
>>>
>>>> Anything beyond that, you generally want a full DSL, probably with 
>>>> different precendence and associativity rules. Eg, for regexp, you'd 
>>>> want postfix * and + operators. There are examples of clever things 
>>>> done in C++  with operator overloading, but I think that's just 
>>>> because it's the only way to do DSLs in C++.
>>> I was enthralled with the way C++ did it for regex for a while, but when 
>>> I think more about it, it's just too clever. I think it's more operator 
>>> overloading abuse now.
>>>
>>>> I don't think the applications are there.
>>> I agree.
>> Well, I can understand your fear about operator abuse. And I agree that 
>> code might be awful when operator overloading will be abused.
>>
>> But I have in mind one very convincing example. I defined in D/Java SQL 
>> syntax. They are also other frameworks which do the same.
>>
>> What can I say about my experiences with using such framework: it is 
>> very, very powerful concept. It cuts time necessary to develop 
>> application, makes sql statements type safe and allows to pass around 
>> parts of sql statements inside application. It also makes easy 
>> refactoring of sql statement (especially in Java). Its huge win 
>> comparing it to defining DSL as strings.
>>
>> It's hard to explain just in few sentences all details. I have already 
>> done it long time ago, and in my first post I provided links.
>>
>> Problem with current approach is that I have to define SQL in D/Java in 
>> following way:
>>
>> auto statement = Select(visitcars.name).Where(And(More(visitcards.id, 
>> 100), Like(visitcards.surname, "A*")));
>>
>> Please look at code in Where(). It's so awfuuuuulllllll!
>>
>> It would be so much better to write:
>> auto statement = Select(visitcars.name).Where((visitcards.id `>` 100) 
>> `AND` (visitcards.surname `Like` "A*"));
>>
>> I used here syntax which you have proposed with delimiter ``. I think it 
>> is good enough solution for such purpose.
>>
>> But please, don't underestimate problem! Many DSL languages would never 
>> appear if languages would be good enough.
>>
>> As I said solution with delimiter is good enough for me. It has another 
>> advantage that it clearly shows in code that you have overloaded 
>> operator here, so no surprises here. Additionally when you implement 
>> template function:
>> opInfix('AND')(val0, val1);
>> you pass string into template. So I see it quite intuitive that you use 
>> string as operator: ``. Maybe there will be not necessary to change 
>> current behavior that `` defines string.
>>
>> I think we have good possibility to  open this door now. It can be even 
>> implemented later, but I would wish just not to close this door now :-)
>>
>> BR
>> Marcin Kuszczak
>> (aarti_pl)
> 
> There's nothing more hideous than all those frameworks in Java/C++ that try to re-enginer SQL into functions, templates, LINQ, whatever.
> SQL *is* a perfectly designed language for its purpose and it doesn't need to be redisnged! The only problem with this is the type-safety when embedding sql as string in a host language. 
> the solution is two-phased: 
> 
> phase a is simple, look at the C# API for postgres (I think). The query is one string like:

> "select * from table where :a > 42", the :name is a place holder for the host-language variable, and you call an API to bind those :names to variables in a type-safe way. the downside is that it's verbose. 
>  
> phase b is what Nemerle does with the above - it has an AST macro to wrap the above so you can write your query directly and it is checked as compile-time. 
> 
> No operators were abused in implementing this. 

Please see for my comments into answer to Lutger post.

BR
Marcin Kuszczak
(aarti_pl)



More information about the Digitalmars-d mailing list