Thread overview | ||||||
---|---|---|---|---|---|---|
|
September 18, 2011 Functions, intrinsics, flexibility | ||||
---|---|---|---|---|
| ||||
I don't know what is the right design in this case. Intrinsics are useful because they sometimes give more performance, but normal functions are sometimes more handy because they allow more flexibility, like taking their address ("first class functions"): import std.math; void main() { auto a = [&sin, &cos]; } DMD 2.055: OPTLINK (R) for Win32 Release 8.00.12 Copyright (C) Digital Mars 1989-2010 All rights reserved. http://www.digitalmars.com/ctg/optlink.html test.obj(test) Error 42: Symbol Undefined _D3std4math3sinFNaNbNfeZe test.obj(test) Error 42: Symbol Undefined _D3std4math3cosFNaNbNfeZe Isn't it possible to find some middle way that allows me to use std.math.sin as true functions, while keeping the advantages of intrinsics? (Currently I define wrapper functions like mysin, mycos, etc). Bye, bearophile |
September 18, 2011 Re: Functions, intrinsics, flexibility | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 09/18/2011 08:57 PM, bearophile wrote:
> I don't know what is the right design in this case. Intrinsics are useful because they sometimes give more performance, but normal functions are sometimes more handy because they allow more flexibility, like taking their address ("first class functions"):
>
>
> import std.math;
> void main() {
> auto a = [&sin,&cos];
> }
>
>
> DMD 2.055:
>
> OPTLINK (R) for Win32 Release 8.00.12
> Copyright (C) Digital Mars 1989-2010 All rights reserved.
> http://www.digitalmars.com/ctg/optlink.html
> test.obj(test)
> Error 42: Symbol Undefined _D3std4math3sinFNaNbNfeZe
> test.obj(test)
> Error 42: Symbol Undefined _D3std4math3cosFNaNbNfeZe
>
> Isn't it possible to find some middle way that allows me to use std.math.sin as true functions, while keeping the advantages of intrinsics?
>
> (Currently I define wrapper functions like mysin, mycos, etc).
>
> Bye,
> bearophile
+1, the compiler should just rewrite your example so that it 'just works'. An alternative to your fix is to create an object file that contains the appropriate symbols.
|
September 19, 2011 Re: Functions, intrinsics, flexibility | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | On 18-09-2011 21:47, Timon Gehr wrote:
> On 09/18/2011 08:57 PM, bearophile wrote:
>> I don't know what is the right design in this case. Intrinsics are
>> useful because they sometimes give more performance, but normal
>> functions are sometimes more handy because they allow more
>> flexibility, like taking their address ("first class functions"):
>>
>>
>> import std.math;
>> void main() {
>> auto a = [&sin,&cos];
>> }
>>
>>
>> DMD 2.055:
>>
>> OPTLINK (R) for Win32 Release 8.00.12
>> Copyright (C) Digital Mars 1989-2010 All rights reserved.
>> http://www.digitalmars.com/ctg/optlink.html
>> test.obj(test)
>> Error 42: Symbol Undefined _D3std4math3sinFNaNbNfeZe
>> test.obj(test)
>> Error 42: Symbol Undefined _D3std4math3cosFNaNbNfeZe
>>
>> Isn't it possible to find some middle way that allows me to use
>> std.math.sin as true functions, while keeping the advantages of
>> intrinsics?
>>
>> (Currently I define wrapper functions like mysin, mycos, etc).
>>
>> Bye,
>> bearophile
>
> +1, the compiler should just rewrite your example so that it 'just
> works'. An alternative to your fix is to create an object file that
> contains the appropriate symbols.
You could write a wrapper function that calls the intrinsic, but I suppose this defeats the purpose...
- Alex
|
September 19, 2011 Re: Functions, intrinsics, flexibility | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex Rønne Petersen | On 9/19/11 3:32 PM, Alex Rønne Petersen wrote:
> On 18-09-2011 21:47, Timon Gehr wrote:
>> On 09/18/2011 08:57 PM, bearophile wrote:
>>> I don't know what is the right design in this case. Intrinsics are
>>> useful because they sometimes give more performance, but normal
>>> functions are sometimes more handy because they allow more
>>> flexibility, like taking their address ("first class functions"):
>>>
>>>
>>> import std.math;
>>> void main() {
>>> auto a = [&sin,&cos];
>>> }
>>>
>>>
>>> DMD 2.055:
>>>
>>> OPTLINK (R) for Win32 Release 8.00.12
>>> Copyright (C) Digital Mars 1989-2010 All rights reserved.
>>> http://www.digitalmars.com/ctg/optlink.html
>>> test.obj(test)
>>> Error 42: Symbol Undefined _D3std4math3sinFNaNbNfeZe
>>> test.obj(test)
>>> Error 42: Symbol Undefined _D3std4math3cosFNaNbNfeZe
>>>
>>> Isn't it possible to find some middle way that allows me to use
>>> std.math.sin as true functions, while keeping the advantages of
>>> intrinsics?
>>>
>>> (Currently I define wrapper functions like mysin, mycos, etc).
>>>
>>> Bye,
>>> bearophile
>>
>> +1, the compiler should just rewrite your example so that it 'just
>> works'. An alternative to your fix is to create an object file that
>> contains the appropriate symbols.
>
> You could write a wrapper function that calls the intrinsic, but I
> suppose this defeats the purpose...
>
> - Alex
Or maybe you could define a wrapper function that calls the intrinsic...
|
Copyright © 1999-2021 by the D Language Foundation