Code speed

Ary Borenszweig ary at esperanto.org.ar
Fri Apr 16 06:17:51 PDT 2010


Don wrote:
> Ary Borenszweig wrote:
>> Don wrote:
>>> Ary Borenszweig wrote:
>>>> Don wrote:
>>>>> Lars T. Kyllingstad wrote:
>>>>>> Don wrote:
>>>>>>> bearophile wrote:
>>>>>>>> So far I've just given a light reading of the code. Notes:
>>>>>>>
>>>>>>>> - pow(x, 2) and sqrt(y) can be written as x ^^ 2 and y ^^ 0.5 
>>>>>>>> (but you have to import std.math anyway, because of a bug).
>>>>>>>
>>>>>>> That's not a bug. It's intentional. x ^^ y will probably always 
>>>>>>> require import std.math, if y is a floating point number.
>>>>>>
>>>>>> Really?  Why is that?  I find that kind of disappointing, I always 
>>>>>> believed it to be a temporary solution.
>>>>>>
>>>>>> I think the inconsistency with the other operators will make this 
>>>>>> a major WTF for people new to the language.  Why should a^^b 
>>>>>> require an explicit import while a*b doesn't?
>>>>>
>>>>> Because pow() for floating point, when implemented properly, is a 
>>>>> HUGE function, that ends up dragging almost all of std.math into 
>>>>> the executable. And I think it's deceptive to do that silently.
>>>>> To make it completely built-in, basically all of std.math would 
>>>>> need to be moved into druntime. Feel free to try to change my mind, 
>>>>> of course.
>>>>
>>>> Is there a better way to do pow() for floating point numbers without 
>>>> importing std.math?
>>>>
>>>> I see this:
>>>>
>>>> 1. You want to do x ^^ fp.
>>>> 2. The compiler complains saying "if you want to do that, import 
>>>> std.math. I'm telling you this just to let you know you'll be 
>>>> importing the whole module".
>>>>
>>>> Alternative 1 for user:
>>>> User says "Ok, I import std.math"
>>>>
>>>> Alternative 2 for user:
>>>> User says "No way I'm importing std.math just to make a pow. But... 
>>>> I still *need* to make that pow... what is your advice, mr. compiler?"
>>>
>>> That's a good point, it should be possible to use a static import as 
>>> well. I do think it's pretty odd to be doing floating point without 
>>> importing std.math, though. I mean, abs() is absolutely fundamental.
>>
>> But if you do a static import the whole module gets linked in, right?
>>
>> My point is, if you are going to pow, you will need std.math, so it'll 
>> always be a burden to import it by hand when using it. ^^
> 
> But you're assuming that you're using ^^ without using anything else 
> from std.math. I think that's a very obscure case.
> For example, any code which is ported from C or C++, or D1, that uses 
> pow, will already be importing std.math. Cases where you see that you 
> could use ^^ that isn't already using pow() (eg, where you see z = x*x + 
> y*y), you will need to add an import.
> 

- Oh, hi Foo, I want to show you this great language D. You can doo blah 
and bleh.
- Cool, I will code something little to see how it is.
   ...
   Hey, WTF, I use the pow operand and it tells me I need to add an 
import? WTF??

You know, people program from scratch, they don't spend their life 
porting C and C++ code... ^^


More information about the Digitalmars-d-learn mailing list