added yaxception:$~ for keeping performance
eval-when-compile require cl
turn to use cl