@@ -354,6 +354,7 @@ fn execute_bytecode_file(file_path: &str, vm_debug: bool, vm_tip: bool) -> Resul
354354 main_function : "main" . to_string ( ) ,
355355 global_constants : bytecode_file. global_constants . into_iter ( ) . map ( |v| v. into ( ) ) . collect ( ) ,
356356 classes : HashMap :: new ( ) ,
357+ interfaces : HashMap :: new ( ) ,
357358 imported_libraries : HashMap :: new ( ) , // 暂时为空,后续可以重新加载库
358359 function_indices,
359360 } ;
@@ -429,6 +430,11 @@ fn main() {
429430 println ! ( " --cn-vm-tip 显示VM执行提示信息" ) ;
430431 println ! ( " --cn-vm-build 编译为字节码文件(.comcn)并打包库依赖" ) ;
431432 println ! ( "" ) ;
433+ println ! ( "📊 优化统计选项:" ) ;
434+ println ! ( " --cn-memo-stats 显示记忆化缓存统计(默认隐藏)" ) ;
435+ println ! ( " --cn-tail-stats 显示尾递归优化报告(默认隐藏)" ) ;
436+ println ! ( " --cn-no-memo 临时禁用记忆化缓存优化" ) ;
437+ println ! ( "" ) ;
432438 println ! ( "示例:" ) ;
433439 println ! ( " {} hello.cn" , args[ 0 ] ) ;
434440 println ! ( " {} hello.cn --cn-time" , args[ 0 ] ) ;
@@ -444,20 +450,61 @@ fn main() {
444450
445451 let file_path = & args[ 1 ] ;
446452
453+ // 解析所有命令行参数(在检查文件类型之前)
454+ let debug_parser = args. iter ( ) . any ( |arg| arg == "--cn-parser" ) ;
455+ let debug_lexer = args. iter ( ) . any ( |arg| arg == "--cn-lexer" ) ;
456+ let debug_mode = args. iter ( ) . any ( |arg| arg == "--cn-debug" ) ;
457+ let show_return = args. iter ( ) . any ( |arg| arg == "--cn-return" ) ;
458+ let query_jit = args. iter ( ) . any ( |arg| arg == "--cn-query-jit" ) ;
459+ let jit_debug = args. iter ( ) . any ( |arg| arg == "--cn-jit-debug" ) ;
460+ let jit_stats = args. iter ( ) . any ( |arg| arg == "--cn-jit-stats" ) ;
461+ let show_time = args. iter ( ) . any ( |arg| arg == "--cn-time" ) ;
462+ let show_rwlock = args. iter ( ) . any ( |arg| arg == "--cn-rwlock" ) ;
463+ let show_memory_stats = args. iter ( ) . any ( |arg| arg == "--cn-memory-stats" ) ;
464+ let memory_debug = args. iter ( ) . any ( |arg| arg == "--cn-memory-debug" ) ;
465+ let show_loop_stats = args. iter ( ) . any ( |arg| arg == "--cn-loop-stats" ) ;
466+ let loop_debug = args. iter ( ) . any ( |arg| arg == "--cn-loop-debug" ) ;
467+ let auto_namespace = args. iter ( ) . any ( |arg| arg == "--cn-auto-ns" ) ;
468+ let check_timeout = args. iter ( ) . any ( |arg| arg == "--cn-check-timeout" ) ;
469+ let use_vm = args. iter ( ) . any ( |arg| arg == "--cn-vm" ) ;
470+ let vm_debug = args. iter ( ) . any ( |arg| arg == "--cn-vm-debug" ) ;
471+ let vm_tip = args. iter ( ) . any ( |arg| arg == "--cn-vm-tip" ) ;
472+ let vm_build = args. iter ( ) . any ( |arg| arg == "--cn-vm-build" ) ;
473+
474+ // 新增:统计报告和记忆化控制选项
475+ let show_memo_stats = args. iter ( ) . any ( |arg| arg == "--cn-memo-stats" ) ;
476+ let show_tail_stats = args. iter ( ) . any ( |arg| arg == "--cn-tail-stats" ) ;
477+ let disable_memo = args. iter ( ) . any ( |arg| arg == "--cn-no-memo" ) ;
478+
479+ // 🚀 初始化记忆化缓存(最大缓存1000个函数调用结果)
480+ interpreter:: init_memoization_cache ( 1000 ) ;
481+
482+ // 🚀 初始化记忆化函数集合
483+ interpreter:: init_memoized_functions ( ) ;
484+
485+ // 如果指定了禁用记忆化参数,则禁用记忆化缓存
486+ if disable_memo {
487+ interpreter:: disable_memoization ( ) ;
488+ }
489+
490+ // 🚀 初始化尾递归优化器
491+ interpreter:: init_tail_recursion_optimizer ( ) ;
492+
447493 // 检查是否是.comcn文件(字节码文件)
448494 let is_bytecode_file = file_path. ends_with ( ".comcn" ) ;
449495
450496 if is_bytecode_file {
451497 // 直接执行字节码文件
452- let show_return = args. iter ( ) . any ( |arg| arg == "--cn-return" ) ;
453- let show_time = args. iter ( ) . any ( |arg| arg == "--cn-time" ) ;
454- let vm_debug = args. iter ( ) . any ( |arg| arg == "--cn-vm-debug" ) ;
455- let vm_tip = args. iter ( ) . any ( |arg| arg == "--cn-vm-tip" ) ;
456498
457499 if vm_tip {
458500 println ! ( "🚀 检测到字节码文件,使用VM模式执行..." ) ;
459501 }
460502
503+ // 如果指定了禁用记忆化参数,则禁用记忆化缓存
504+ if disable_memo {
505+ interpreter:: disable_memoization ( ) ;
506+ }
507+
461508 let start_time = if show_time {
462509 Some ( std:: time:: Instant :: now ( ) )
463510 } else {
@@ -473,6 +520,18 @@ fn main() {
473520 if show_return {
474521 println ! ( "程序执行结果: {:?}" , result) ;
475522 }
523+
524+ // 🚀 显示记忆化缓存统计信息(仅在指定参数时显示)
525+ if show_memo_stats {
526+ if let Some ( memo_stats) = interpreter:: get_memo_stats ( ) {
527+ memo_stats. print ( ) ;
528+ }
529+ }
530+
531+ // 🚀 显示尾递归优化报告(仅在指定参数时显示)
532+ if show_tail_stats {
533+ interpreter:: print_tail_recursion_report ( ) ;
534+ }
476535 } ,
477536 Err ( err) => {
478537 eprintln ! ( "字节码执行错误: {}" , err) ;
@@ -482,25 +541,7 @@ fn main() {
482541 return ;
483542 }
484543
485- let debug_parser = args. iter ( ) . any ( |arg| arg == "--cn-parser" ) ;
486- let debug_lexer = args. iter ( ) . any ( |arg| arg == "--cn-lexer" ) ;
487- let debug_mode = args. iter ( ) . any ( |arg| arg == "--cn-debug" ) ;
488- let show_return = args. iter ( ) . any ( |arg| arg == "--cn-return" ) ;
489- let query_jit = args. iter ( ) . any ( |arg| arg == "--cn-query-jit" ) ;
490- let jit_debug = args. iter ( ) . any ( |arg| arg == "--cn-jit-debug" ) ;
491- let jit_stats = args. iter ( ) . any ( |arg| arg == "--cn-jit-stats" ) ;
492- let show_time = args. iter ( ) . any ( |arg| arg == "--cn-time" ) ;
493- let show_rwlock = args. iter ( ) . any ( |arg| arg == "--cn-rwlock" ) ;
494- let show_memory_stats = args. iter ( ) . any ( |arg| arg == "--cn-memory-stats" ) ;
495- let memory_debug = args. iter ( ) . any ( |arg| arg == "--cn-memory-debug" ) ;
496- let show_loop_stats = args. iter ( ) . any ( |arg| arg == "--cn-loop-stats" ) ;
497- let loop_debug = args. iter ( ) . any ( |arg| arg == "--cn-loop-debug" ) ;
498- let auto_namespace = args. iter ( ) . any ( |arg| arg == "--cn-auto-ns" ) ;
499- let check_timeout = args. iter ( ) . any ( |arg| arg == "--cn-check-timeout" ) ;
500- let use_vm = args. iter ( ) . any ( |arg| arg == "--cn-vm" ) ;
501- let vm_debug = args. iter ( ) . any ( |arg| arg == "--cn-vm-debug" ) ;
502- let vm_tip = args. iter ( ) . any ( |arg| arg == "--cn-vm-tip" ) ;
503- let vm_build = args. iter ( ) . any ( |arg| arg == "--cn-vm-build" ) ;
544+
504545
505546 // v0.7.5新增:初始化内存池
506547 if memory_debug {
@@ -666,6 +707,18 @@ fn main() {
666707 if show_loop_stats {
667708 loop_memory:: print_loop_performance_stats ( ) ;
668709 }
710+
711+ // 🚀 显示记忆化缓存统计信息(仅在指定参数时显示)
712+ if show_memo_stats {
713+ if let Some ( memo_stats) = interpreter:: get_memo_stats ( ) {
714+ memo_stats. print ( ) ;
715+ }
716+ }
717+
718+ // 🚀 显示尾递归优化报告(仅在指定参数时显示)
719+ if show_tail_stats {
720+ interpreter:: print_tail_recursion_report ( ) ;
721+ }
669722 } ,
670723 Err ( errors) => {
671724 // 显示所有错误信息
0 commit comments