これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の2日目の記事です。
Ruby だと実行時にエラーが発生すると、エラーが発生したプログラムの位置が出力されるのですが、
def hoge raise "hoge" end hoge
% ruby hoge.rb hoge.rb:2:in `hoge': hoge (RuntimeError) from hoge.rb:5:in `<main>'
Crystal だと、
% crystal hoge.cr hoge (Exception) [4336471] *CallStack::unwind:Array(Pointer(Void)) +87 [4336362] *CallStack#initialize<CallStack>:Array(Pointer(Void)) +10 [4336314] *CallStack::new:CallStack +42 [4339633] *Exception#initialize<Exception, String, Nil>:CallStack +33 [4339569] *Exception::new<String>:Exception +97 [4324214] *raise<String>:NoReturn +6 [4330992] *hoge:NoReturn +16 [4323848] ??? [4330784] main +32 [139889456572992] __libc_start_main +240 [4321241] _start +41 [0] ???
どこでエラーが発生したかわからなくてつらい。