Oh, I should mention, the c = a*b => mul(c, a, b) problem is probably 
soluble in D with a much cleaner and easier to compile solution than C++ 
offers. D metaprogramming is strictly more powerful than that of C++.

On Thursday, 21 August 2014 18:59:39 UTC+2, Bill Hart wrote:
>
>
>
> On Thursday, 21 August 2014 18:23:48 UTC+2, Volker Braun wrote:
>>
>> Incidentally, the whole argument type-dependent function dispatch is at 
>> the core of the GAP language (though you have to recompile the GAP kernel 
>> to change it). And GAP predates K&R C. 
>>
>
> There are other languages which have used it. That's not particularly 
> novel.
>
> It's just the "other" way of doing object orientation.
>
> There is one significant issue with it. To do arithmetic efficiently on 
> composite types, you need to be able to replace c = a*b with mul(c, a, b).
>
> Using the class based approach, this is possible using metaprogramming. We 
> do this in flint. Unfortunately, the flint C++ module takes minutes per 
> file to compile and blows up many version of gcc and all versions of MSVC 
> (internal errors).
>
> So it's not such a huge loss that you can't use template class 
> metaprogramming in a language like Julia (template class metaprogramming 
> has other major issues which make it essentially unusable in practice 
> anyway, such as needing to recompile to change anything).
>
> I don't know a solution to the c = a*b => mul(c, a, b) problem. Nimrod 
> claims to have found some sort of solution, called term rewriting macros. 
> But I really don't know enough about them to evaluate their effectiveness 
> as a solution to this problem.
>
> Julia will have to solve the problem some day, though it will be hard.
>
> In my language I (theoretically) get around it by defining two kinds of 
> type. One is an arithmetic type, which has the above semantics. The other 
> is a usual type which has the usual semantics. But I've not fully 
> implemented the solution, so I don't know to what extent it can really be a 
> solution to the problem. Either way, it will be really, really hard to 
> implement in the "compiler".
>
> Bill.
>
>
>> On Thursday, August 21, 2014 4:56:12 PM UTC+1, Bill Hart wrote:
>>>
>>> Thus the language is formally extensible at no cost and in an extremely 
>>> simple way that the user can easily do themselves. 
>>>
>>  
>> Depends on your point of view. If you want to tie together different 
>> third-party libraries then it can quickly become a liability that you can 
>> just redefine everything. 
>>
>> julia> getindex(a::Array{Int, 1}, b::Int) = print("test")
>>> getindex (generic function with 140 methods)
>>>
>>
>> Type this into the REPL on your colleague's computer who just left to get 
>> a coffee and see if he ever figures that one out. My bet would be that he's 
>> not going to get any work done until the next restart ;-)
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to