In attachment the unified diff of the two lisp files generated, the
first with precise signatures, the second uses R in signatures.


Le dim. 22 déc. 2024 à 01:58, Grégory Vanuxem <[email protected]> a écrit :
>
> Hello folks,
>
> I am coding a sample package that performs operations on 32bit or
> 64bit floats using my Julia interface (using libjulia).
>
> I wonder what is the best way to do it, I can use parameterized
> signatures or more generically via a parameterized package. The latter
> is not really necessary.
> Here is a sample with a parameterized package:
>
> JuliaMachineFloatFunctions(R : JuliaMachineFloat) :
>     Exports == Implementation where
>   JF32      ==> JuliaFloat32
>   JF64      ==> JuliaFloat64
>   STR       ==> String
>   Exports ==> with
>     jlApplyFunction : (STR, R) -> R
>     ++ jlApplyFunction(func,x)
>     jlApplyFunction : (STR, R, R) -> R
>     ++ jlApplyFunction(func,x,y)
>     jlApplyFunction : (STR, R, R, R) -> R
>     ++ jlApplyFunction(func,x,y,z)
>
>   Implementation ==> add
>     import from String
>     if R is JF64 then
>       jlApplyFunction(func,a) ==
>         jl_dbl_function_dbl(func,a)$Lisp
>       jlApplyFunction(func,a, b) ==
>         jl_dbl_function_dbl_dbl(func,a,b)$Lisp
>       jlApplyFunction(func,a, b, c) ==
>         jl_dbl_function_dbl_dbl_dbl(func,a,b,c)$Lisp
>     else -- R is JF32
>       jlApplyFunction(func,a) ==
>         jl_flt_function_flt(func,a)$Lisp
>       jlApplyFunction(func,a, b) ==
>         jl_flt_function_flt_flt(func,a,b)$Lisp
>       jlApplyFunction(func,a, b, c) ==
>         jl_flt_function_flt_flt_flt(func,a,b,c)$Lisp
>
> But I  can of course do not parametrize the package and use signatures like:
>
>   jlApplyFunc : (STR, JF64) -> JF64
> or
>   jlApplyFunc : (STR, JF32) -> JF32
>
> and in the implementation:
>     jlApplyFunction(func, a : JF64) ==
>         jl_dbl_function_dbl(func,a)$Lisp
> etc.
>
> They are replaced (inlined) by the Lisp calls for the two coding styles.
>
> Example with the parameterized package above (Julia needs to perform
> some initialization tasks at first call):
>
> (1) -> a:=jf64(2)
>
>    (1)  2.0
>                                                            Type: JuliaFloat64
>                                                    Time: 4.03 (OT) = 4.03 sec
> (2) -> b:=jf32(2)
>
>    (2)  2.0
>                                                            Type: JuliaFloat32
>                                                    Time: 0.02 (OT) = 0.02 sec
> (3) -> jlApplyFunction("sqrt",a)
>
>    (3)  1.4142135623730951
>                                                            Type: JuliaFloat64
>                                                    Time: 0.02 (EV) = 0.03 sec
> (4) -> jlApplyFunction("sqrt",b)
>
>    (4)  1.4142135
>                                                            Type: JuliaFloat32
>                                                    Time: 0.01 (EV) = 0.01 sec
> (5) -> % pretend SEX
>
>    (5)  1.4142135f0
>                                                             Type: SExpression
>                                                                   Time: 0 sec
>
> Any idea of the "best" way to do this? And the advantages and/or
> inconveniences of those two coding styles?
>
> - Greg

-- 
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/fricas-devel/CAHnU2dazqWqRLwzOPdEBV3bi0h3ZY-p2C2MejXxKDDWskHztxg%40mail.gmail.com.

Attachment: JMFF.diff
Description: Binary data

Reply via email to