「ダミー実行」(2)
• ダミー実行は良し悪し
• ゴミ情報が波及することも
31
#ao.rb抜粋
class Vec
# このメソッドは使われない
def vadd(b) # b: any
Vec.new(
@x + b.x, # any
@y + b.y, # any
@z + b.z, # any
)
end
end
class Vec
@x: Float | any
@y: Float | any
@z: Float | any
# 今はチートコードを追加(広義の型注釈?)
if _ = false
v = Vec.new(0.0,0.0,0.0)
v.vadd(v)
end
vaddをanyで呼び出すので
@xにanyが記録される
記録されない特殊な
anyで解決できる?
32.
解析の診断機能
• pで型をrevealできる
• 「ここにどんな型が来ると思ってる?」とか調べる
•解析到達経路をバックトレース風に表示する機能
32
def foo(n)
p n
end
foo(1)
foo("str")
# Revealed types
# reveal.rb:2 #=> Integer | String
# Classes
class Object
foo : (Integer | String) -> (Integer | String)
end
型プロファイラの開発体験?
• ずるくないpolyglot
• 普通の実行に加え、型レベル実行を意識して書く
•別言語ではないのでそこまでつらくないと思う
• それでもメリットはある(はず)
• 型注釈なしの記述は疑いなくシンプル
• 型プロファイラが解析できる≒素直な良いコード?
37
def foo(n: Integer | String) : Integer | String
p n
end
foo(1)
foo("str")
def foo(n)
p n
end
foo(1)
foo("str")
vs.