表題の通りだけど、Rubyコミュニティのことをよく知らないのでここに書いてみることにします。
誰か見てくれると嬉しいな。
動的型チェック(型に限らないけど)
Rubyに型チェックがほしいという人はそこそこいるみたいだけど、現状のRubyと静的解析は相性がよくないので、
だったら動的に使いやすい仕組みにしたい。
def foo(t1 value1, t2 value2)
end
これが
def foo(value1, value2)
raise TypeError, "#{value1} must be #{t1}" unless t1 === value1
raise TypeError, "#{value2} must be #{t2}" unless t2 === value2
end
こんな風に変換されるのを期待したい。
そう展開するルールであれば、
def foo(String str, Integer num)
# ...
end
という想像通りの使い方の他にも
def get_content(/^https?:/ url)
# ...
end
のように正規表現を書くことができる。
===
という演算はcase-when
で使われるのでRubyらしいと思う。
自動end
ブロック
Rubyのdo-end
はとても良いのだけど、ネストが深くなりがちだと思う。
例えばファイルを読み書きするとReadとWriteで2段になるし、たいてい中でeach
するのでもう一段必要。
なので
Dir.chdir(some_path) do
autoend src = File.open(src_path, 'r')
autoend dst = File.open(dst_path, 'w')
autoend line = src.each
dst.print line unless /^#/ =~ line
end
こう書けて
Dir.chdir(some_path) do
File.open(src_path, 'r') do |src|
File.open(dst_path, 'w') do |dst|
src.each |line|
dst.print line unless /^#/ =~ line
end
end
end
end
こんな風に変換してほしい。
具体的には autoend
が出てきたら次の式からend
が来るまでを一つのブロックとして最初の式に渡す。
ブロックを開くタイミングはバラバラな事も多いけど、閉じるのはたいてい最後にまとめて行うことが多いので都合がよい。
ただし適当なキーワード(ここではautoend
)を使うと確実に既存のコードとぶつかるので、どうにかしないといけない。
これができるとC++erのデストラクタによるRAIIが好きな人とかJavaScripterでコールバックが嫌いな人とかC#erでawait
好きな人とかScalaユーザでfor
式が好きな人が喜ぶはず。
最後に
Rubyでは「短いが正義」だと思う