forlang的增强版（重构了forlang的代码并增加了相关功能）