Alternative title: the sound, the hacky, the mathy
Mathieu Besançon
20-09-2018 - LilleFP meetup
Doctorant @ INRIA Lille & Polytechnique Montréal
Optimisation mathématique (programmation mathématique) pour les smart grids
Code au quotidien: créer des modèles, manipuler des données, lancer des calculs, connecter des solveurs
Ex-Equisense @ Euratech --> data science, traitement de signal, back-end
Autres langages utilisés: Rust, Python, R, Go
Twitter/Github @matbesancon
(Demo live)
Un compilateur c'est bien...
Mais avec des cas d'usage dynamiques, feedback rapide essentiel
function line(x; a = 3.0, b = π)
return a*x + b
end
line (generic function with 1 method)
@time line(42)
0.009094 seconds (22.09 k allocations: 1.216 MiB)
129.14159265358978
@time line(42)
0.000003 seconds (5 allocations: 176 bytes)
129.14159265358978
@time line(4//3)
0.054816 seconds (79.88 k allocations: 4.005 MiB)
7.141592653589793
@time line(4//3)
0.000004 seconds (6 allocations: 208 bytes)
7.141592653589793
abstract type ValueWrapper{T} end
struct FloatWrapper <: ValueWrapper{Float64}
v::Float64
end
struct NumWrapper{T<:Number} <: ValueWrapper{T}
v::T
end
const 😱 = "one inheritence == one bullet";
Type abstrait nécéssaire pour peu de cas.
SimpleTraits.jl permet la création de traits hors de la hiérarchie des types.
import Plots: plot
struct Line
a::Float64
b::Float64
end
function plot(l::Line)
xs = 0.0:0.01:10.0
ys = map(xs) do x
l.a * x + l.b
end
plot(xs,ys)
end