codecin 5.9.0__tar.gz → 6.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. {codecin-5.9.0 → codecin-6.0.1}/CHANGELOG.md +71 -0
  2. {codecin-5.9.0/codecin.egg-info → codecin-6.0.1}/PKG-INFO +108 -23
  3. {codecin-5.9.0 → codecin-6.0.1}/README.md +107 -22
  4. {codecin-5.9.0 → codecin-6.0.1}/codecin/__init__.py +1 -1
  5. codecin-6.0.1/codecin/aot.py +1026 -0
  6. {codecin-5.9.0 → codecin-6.0.1}/codecin/assembler.py +75 -4
  7. {codecin-5.9.0 → codecin-6.0.1}/codecin/cin.py +128 -25
  8. {codecin-5.9.0 → codecin-6.0.1}/codecin/cli.py +135 -8
  9. {codecin-5.9.0 → codecin-6.0.1}/codecin/config.py +2 -0
  10. {codecin-5.9.0 → codecin-6.0.1}/codecin/cpu.py +20 -1
  11. {codecin-5.9.0 → codecin-6.0.1}/codecin/crom.py +171 -20
  12. codecin-6.0.1/codecin/native/engine/native.go +634 -0
  13. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/version_gen.go +1 -1
  14. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/vm.go +14 -0
  15. codecin-6.0.1/codecin/native_codegen.py +986 -0
  16. codecin-6.0.1/codecin/object.py +539 -0
  17. codecin-6.0.1/codecin/optimizer.py +236 -0
  18. {codecin-5.9.0 → codecin-6.0.1/codecin.egg-info}/PKG-INFO +108 -23
  19. {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/SOURCES.txt +7 -0
  20. {codecin-5.9.0 → codecin-6.0.1}/tests/test_aot.py +109 -0
  21. codecin-6.0.1/tests/test_bin_compat.py +195 -0
  22. codecin-6.0.1/tests/test_cli.py +221 -0
  23. codecin-6.0.1/tests/test_native_codegen.py +206 -0
  24. codecin-6.0.1/tests/test_object_link.py +322 -0
  25. {codecin-5.9.0 → codecin-6.0.1}/tests/test_version.py +5 -2
  26. codecin-5.9.0/codecin/aot.py +0 -499
  27. codecin-5.9.0/tests/test_cli.py +0 -82
  28. {codecin-5.9.0 → codecin-6.0.1}/LICENSE +0 -0
  29. {codecin-5.9.0 → codecin-6.0.1}/MANIFEST.in +0 -0
  30. {codecin-5.9.0 → codecin-6.0.1}/codecin/console.py +0 -0
  31. {codecin-5.9.0 → codecin-6.0.1}/codecin/disasm.py +0 -0
  32. {codecin-5.9.0 → codecin-6.0.1}/codecin/environment.py +0 -0
  33. {codecin-5.9.0 → codecin-6.0.1}/codecin/errors.py +0 -0
  34. {codecin-5.9.0 → codecin-6.0.1}/codecin/isa.py +0 -0
  35. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/array.cin +0 -0
  36. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/bigint.cin +0 -0
  37. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/bits.cin +0 -0
  38. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/bitset.cin +0 -0
  39. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/codec.cin +0 -0
  40. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/combin.cin +0 -0
  41. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/conv.cin +0 -0
  42. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/cppstd.cin +0 -0
  43. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/cstd.cin +0 -0
  44. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/csv.cin +0 -0
  45. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/dp.cin +0 -0
  46. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/ffi.cin +0 -0
  47. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/fmt.cin +0 -0
  48. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/frac.cin +0 -0
  49. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/gostd.cin +0 -0
  50. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/graph.cin +0 -0
  51. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/gui.cin +0 -0
  52. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/hash.cin +0 -0
  53. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/heap.cin +0 -0
  54. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/io.cin +0 -0
  55. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/json.cin +0 -0
  56. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/key.cin +0 -0
  57. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/math.cin +0 -0
  58. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/matrix.cin +0 -0
  59. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/net.cin +0 -0
  60. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/path.cin +0 -0
  61. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/queue.cin +0 -0
  62. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/rand.cin +0 -0
  63. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/set.cin +0 -0
  64. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/sort.cin +0 -0
  65. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/stat.cin +0 -0
  66. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/str.cin +0 -0
  67. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/termux.cin +0 -0
  68. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/test.cin +0 -0
  69. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/text.cin +0 -0
  70. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/time.cin +0 -0
  71. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/token.cin +0 -0
  72. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/tree.cin +0 -0
  73. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/unionfind.cin +0 -0
  74. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/validate.cin +0 -0
  75. {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/vec.cin +0 -0
  76. {codecin-5.9.0 → codecin-6.0.1}/codecin/logger.py +0 -0
  77. {codecin-5.9.0 → codecin-6.0.1}/codecin/memory.py +0 -0
  78. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/aot/aot.go +0 -0
  79. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/aot/stub_main.go.txt +0 -0
  80. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/build.ps1 +0 -0
  81. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/build.sh +0 -0
  82. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/codegen.go +0 -0
  83. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/compile_test.go +0 -0
  84. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/parser.go +0 -0
  85. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/syscalls.go +0 -0
  86. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/tokenizer.go +0 -0
  87. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/types.go +0 -0
  88. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/args.go +0 -0
  89. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/audio.go +0 -0
  90. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/audio_other.go +0 -0
  91. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/audio_test.go +0 -0
  92. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/audio_windows.go +0 -0
  93. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/canvas.go +0 -0
  94. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/console_other.go +0 -0
  95. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/console_windows.go +0 -0
  96. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/crom.go +0 -0
  97. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/encode.go +0 -0
  98. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/engine_test.go +0 -0
  99. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ffi_nocgo.go +0 -0
  100. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ffi_registry.go +0 -0
  101. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ffi_unix.go +0 -0
  102. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ffi_windows.go +0 -0
  103. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui.go +0 -0
  104. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui_stub.go +0 -0
  105. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui_test.go +0 -0
  106. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui_windows.go +0 -0
  107. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui_x11.go +0 -0
  108. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/host_test.go +0 -0
  109. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/hostcrypto.go +0 -0
  110. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/hostdesktop.go +0 -0
  111. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/hostnet.go +0 -0
  112. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/isa_gen.go +0 -0
  113. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard.go +0 -0
  114. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_other.go +0 -0
  115. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_stub.go +0 -0
  116. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_termios_darwin.go +0 -0
  117. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_termios_linux.go +0 -0
  118. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_test.go +0 -0
  119. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_windows.go +0 -0
  120. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_windows_test.go +0 -0
  121. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/mem_other.go +0 -0
  122. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/mem_windows.go +0 -0
  123. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/netsock.go +0 -0
  124. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ops_ext.go +0 -0
  125. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/stdin.go +0 -0
  126. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/stdin_other.go +0 -0
  127. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/stdin_windows.go +0 -0
  128. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/system.go +0 -0
  129. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/termux.go +0 -0
  130. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/go.mod +0 -0
  131. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/ir/ir.go +0 -0
  132. {codecin-5.9.0 → codecin-6.0.1}/codecin/native/main.go +0 -0
  133. {codecin-5.9.0 → codecin-6.0.1}/codecin/native.py +0 -0
  134. {codecin-5.9.0 → codecin-6.0.1}/codecin/registers.py +0 -0
  135. {codecin-5.9.0 → codecin-6.0.1}/codecin/stats.py +0 -0
  136. {codecin-5.9.0 → codecin-6.0.1}/codecin/stdlib.py +0 -0
  137. {codecin-5.9.0 → codecin-6.0.1}/codecin/version.py +0 -0
  138. {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/dependency_links.txt +0 -0
  139. {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/entry_points.txt +0 -0
  140. {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/requires.txt +0 -0
  141. {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/top_level.txt +0 -0
  142. {codecin-5.9.0 → codecin-6.0.1}/examples/args_demo.cin +0 -0
  143. {codecin-5.9.0 → codecin-6.0.1}/examples/asm_constants.asm +0 -0
  144. {codecin-5.9.0 → codecin-6.0.1}/examples/bitwise_builtins.cin +0 -0
  145. {codecin-5.9.0 → codecin-6.0.1}/examples/control_flow.cin +0 -0
  146. {codecin-5.9.0 → codecin-6.0.1}/examples/enum_range_for.cin +0 -0
  147. {codecin-5.9.0 → codecin-6.0.1}/examples/gui_demo.cin +0 -0
  148. {codecin-5.9.0 → codecin-6.0.1}/examples/literals_types.cin +0 -0
  149. {codecin-5.9.0 → codecin-6.0.1}/examples/local_audio.cin +0 -0
  150. {codecin-5.9.0 → codecin-6.0.1}/examples/modules_demo.cin +0 -0
  151. {codecin-5.9.0 → codecin-6.0.1}/examples/stdlib_demo.cin +0 -0
  152. {codecin-5.9.0 → codecin-6.0.1}/examples/system_interaction.cin +0 -0
  153. {codecin-5.9.0 → codecin-6.0.1}/misc/vim/ftdetect/codecin.vim +0 -0
  154. {codecin-5.9.0 → codecin-6.0.1}/misc/vim/syntax/cin.vim +0 -0
  155. {codecin-5.9.0 → codecin-6.0.1}/misc/vim/syntax/codecinasm.vim +0 -0
  156. {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/.vscodeignore +0 -0
  157. {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/README.md +0 -0
  158. {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/build.bat +0 -0
  159. {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/language-configuration.json +0 -0
  160. {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/package.json +0 -0
  161. {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/snippets/cin.json +0 -0
  162. {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/syntaxes/cin.tmLanguage.json +0 -0
  163. {codecin-5.9.0 → codecin-6.0.1}/pyproject.toml +0 -0
  164. {codecin-5.9.0 → codecin-6.0.1}/script/bump_version.py +0 -0
  165. {codecin-5.9.0 → codecin-6.0.1}/script/check_paths.py +0 -0
  166. {codecin-5.9.0 → codecin-6.0.1}/script/gen_isa_docs.py +0 -0
  167. {codecin-5.9.0 → codecin-6.0.1}/script/gen_native_isa.py +0 -0
  168. {codecin-5.9.0 → codecin-6.0.1}/setup.cfg +0 -0
  169. {codecin-5.9.0 → codecin-6.0.1}/setup.py +0 -0
  170. {codecin-5.9.0 → codecin-6.0.1}/tests/test_aggregate_and_const.py +0 -0
  171. {codecin-5.9.0 → codecin-6.0.1}/tests/test_all_libs_together.py +0 -0
  172. {codecin-5.9.0 → codecin-6.0.1}/tests/test_assembler_ext.py +0 -0
  173. {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_host.py +0 -0
  174. {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_host_ext.py +0 -0
  175. {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_new_features.py +0 -0
  176. {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_syntax.py +0 -0
  177. {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_syntax_ext.py +0 -0
  178. {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_system.py +0 -0
  179. {codecin-5.9.0 → codecin-6.0.1}/tests/test_compiler_errors.py +0 -0
  180. {codecin-5.9.0 → codecin-6.0.1}/tests/test_environment.py +0 -0
  181. {codecin-5.9.0 → codecin-6.0.1}/tests/test_examples.py +0 -0
  182. {codecin-5.9.0 → codecin-6.0.1}/tests/test_features_ab.py +0 -0
  183. {codecin-5.9.0 → codecin-6.0.1}/tests/test_features_import.py +0 -0
  184. {codecin-5.9.0 → codecin-6.0.1}/tests/test_features_importloc.py +0 -0
  185. {codecin-5.9.0 → codecin-6.0.1}/tests/test_ffi_net.py +0 -0
  186. {codecin-5.9.0 → codecin-6.0.1}/tests/test_gui.py +0 -0
  187. {codecin-5.9.0 → codecin-6.0.1}/tests/test_index_subscript_type.py +0 -0
  188. {codecin-5.9.0 → codecin-6.0.1}/tests/test_isa_single_source.py +0 -0
  189. {codecin-5.9.0 → codecin-6.0.1}/tests/test_issue_regress.py +0 -0
  190. {codecin-5.9.0 → codecin-6.0.1}/tests/test_keyboard.py +0 -0
  191. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_bigint.py +0 -0
  192. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_bitset.py +0 -0
  193. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_codec.py +0 -0
  194. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_combin.py +0 -0
  195. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_compat.py +0 -0
  196. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_csv.py +0 -0
  197. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_dp.py +0 -0
  198. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_fmt.py +0 -0
  199. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_frac.py +0 -0
  200. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_graph.py +0 -0
  201. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_heap.py +0 -0
  202. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_path.py +0 -0
  203. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_set.py +0 -0
  204. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_text.py +0 -0
  205. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_token.py +0 -0
  206. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_tree.py +0 -0
  207. {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_unionfind.py +0 -0
  208. {codecin-5.9.0 → codecin-6.0.1}/tests/test_libs.py +0 -0
  209. {codecin-5.9.0 → codecin-6.0.1}/tests/test_libs_ext.py +0 -0
  210. {codecin-5.9.0 → codecin-6.0.1}/tests/test_literals_and_bom.py +0 -0
  211. {codecin-5.9.0 → codecin-6.0.1}/tests/test_native_hardening.py +0 -0
  212. {codecin-5.9.0 → codecin-6.0.1}/tests/test_native_lib_lookup.py +0 -0
  213. {codecin-5.9.0 → codecin-6.0.1}/tests/test_nested_subscript_codegen.py +0 -0
  214. {codecin-5.9.0 → codecin-6.0.1}/tests/test_no_go_cli.py +0 -0
  215. {codecin-5.9.0 → codecin-6.0.1}/tests/test_p0_fixes.py +0 -0
  216. {codecin-5.9.0 → codecin-6.0.1}/tests/test_packaging.py +0 -0
  217. {codecin-5.9.0 → codecin-6.0.1}/tests/test_paths_consistency.py +0 -0
  218. {codecin-5.9.0 → codecin-6.0.1}/tests/test_sparse_memory.py +0 -0
  219. {codecin-5.9.0 → codecin-6.0.1}/tests/test_struct_value_semantics.py +0 -0
  220. {codecin-5.9.0 → codecin-6.0.1}/tests/test_switch_semantics.py +0 -0
  221. {codecin-5.9.0 → codecin-6.0.1}/tests/test_workflows.py +0 -0
@@ -5,6 +5,77 @@
5
5
 
6
6
  ---
7
7
 
8
+ ## [6.0.1] - 2026-10-18
9
+
10
+ ### 修复 (Fixed)
11
+
12
+ - **旧版 BIN v2 在 v5.9.0+ 内存布局下首条指令即误报栈溢出**:v2 头部只记录
13
+ `mem_size`/`sp`、不记录 `heap_base`,旧运行时固定按 `heap_base = mem_size // 2`
14
+ 布局。用 v6.0.0 默认 1 GiB 加载旧版 64 KiB BIN 时,SP(≈`0xfff0`)远低于新
15
+ `heap_base`(`0x20000000`),首条 `PUSH`/`SYS ALLOCFRAME` 报
16
+ `Stack overflow (collides with heap)`,看起来像真实栈溢出。现在 `load_bin()`
17
+ 在**加载阶段**检测到 v2 布局与当前 `--mem-size` 不一致时直接报
18
+ `CPUSimulatorError`(CLI 显示 `Load Error`),列出文件头/当前布局并提示
19
+ “用当前版本重新编译”或“使用 `--mem-size <文件头 mem_size>`”;原生引擎也会在
20
+ 执行前拒绝 `SP < heap_base` 的非法初始状态(`steps=0`)。
21
+ - BIN v2/v3 加载增加头部元数据校验:`mem_size` / `SP` / `heap_base` 越界、
22
+ 段地址越过声明内存、文件截断等损坏输入均在加载阶段给出明确错误,而不是
23
+ 执行到首条指令后才失败。
24
+ - 文档补充“格式可读 ≠ 内存布局兼容”:BIN v2 需匹配 `--mem-size`,v5.9.0 之前
25
+ 的旧 BIN 建议重新编译(见 `docs/runtime/formats.md`)。
26
+
27
+ ---
28
+
29
+ ## [6.0.0] - 2026-10-17
30
+
31
+ ### 新增 (Added)
32
+
33
+ - **恢复 `--debug` 调试模式**(native-only 架构下的等价能力):强制 `DEBUG`
34
+ 日志(优先于 `--log-level`)、执行结束输出寄存器/向量现场与执行统计表、
35
+ 未预期异常打印 rich 完整堆栈;`Config.debug_mode` 配置项同步回归。
36
+ - **native AOT 后端(第一阶段)**:新增 `--build-backend auto|native|vm`,默认
37
+ `auto` 在指令数 ≤ 20000 时走 `native`,把指令流直接展开为 Go 语句,核心
38
+ 整数/控制流/内存/SYS 指令不再经过 UCBC 解码与 opcode dispatch,由 Go 编译器
39
+ 产出 x86-64/ARM64 机器码;大程序自动回退 VM,避免大量指令让 `go build`
40
+ 极慢。ARM64/RISC-V 扩展整数、FP 与 Vector 指令也已直接降级;仅动态控制流/
41
+ 无法静态求值的操作数保留受控单指令回退。
42
+ - **大程序 native 基本块拆分**:超过 800 条指令自动按跳转目标/返回点切分
43
+ 为多个 Go 函数,避免单个函数过大导致 `go build` 极慢;`basic.cin`
44
+ (约 4500 条指令)现在可直接走 native 并产出与 VM 一致的输出。
45
+ - **AOT 支持 ASM/PL/BIN 输入**:`--build-exe` 不再只接受 `.cin`;汇编器/
46
+ `crom.load_bin` 装载的指令流同样可走 native 或 VM 后端并生成静态可执行文件。
47
+ - **AOT 增量构建缓存**:按源文件/import 闭包、目标平台、后端、优化级别、
48
+ 内存/步数以及 Python/Go 工具链指纹缓存产物;命中时跳过 `go build`,
49
+ `--no-build-cache` 可禁用,`CODECIN_AOT_CACHE` 可指定缓存目录。
50
+ 对象/归档链接同样按输入对象内容与链接选项缓存。
51
+ - **AOT 调试构建**:`--build-debug` 跳过 `-s -w`,保留 Go 符号表/DWARF,
52
+ 产物仍为独立静态可执行文件。
53
+ - **独立编译/链接 (CIN/ASM/PL)**:`--emit-object` 生成可重定位 `.co` 对象
54
+ (保留未解析标签、代码/数据符号、内存段),`--link` 合并多个对象、
55
+ 分配代码/数据基址并解析跨对象符号;链接结果可直接走 native/VM AOT,
56
+ 并支持链接期 `--optimize 0-3`。重定位覆盖 `NAME±N` 与
57
+ `DW/DD/DQ label` 数据指针。CIN 新增 `extern function` / `extern` 全局
58
+ 声明:无 `main` 的 CIN 文件可作为函数库对象参与链接,库内字符串/标量
59
+ 全局/struct 指针槽会按对象数据基址重定位。
60
+ - **`.colib` 静态库归档**:`--emit-archive` 把多个对象打包,`--link`
61
+ 按未定义符号只拉取需要的归档成员 (C 风格静态库语义)。
62
+ - **源文件直接链接**:`--link` 可直接接受 `.cin/.asm/.pl`,即时编译为
63
+ 对象后链接,省去显式 `--emit-object` 步骤。
64
+ - **链接期代码段 GC**:`--gc-sections` 从入口做保守控制流可达性分析,
65
+ 删除未调用的函数/桩;遇到动态 CALL/JMP 或代码指针时自动放弃以避免误删。
66
+ - **真实可用的 `--optimize 0-3`**:新增 IR 优化器(窥孔、常量折叠、不可达
67
+ 代码删除),同时作用于 VM 执行路径、`--compile` 与 native AOT;
68
+ 标签/入口在删除指令后自动重映射。
69
+ - 新增 `NativeRuntime`(Go 引擎侧)与 `native_codegen`/`optimizer`(Python
70
+ 侧),并补充 native AOT、优化器、交叉编译测试。
71
+
72
+ ### 修复 (Fixed)
73
+
74
+ - native 后端 `ASR rd, rn, shift` 三操作数形式被误当成两操作数 Base 形式,
75
+ 导致算术右移与复合赋值结果错误。
76
+
77
+ ---
78
+
8
79
  ## [5.9.0] - 2026-10-05
9
80
 
10
81
  一次「单引擎 + 大内存 + 系统能力」的架构发布:**纯 Python 解释器与 JIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codecin
3
- Version: 5.9.0
3
+ Version: 6.0.1
4
4
  Summary: Code CIN - 高级语言与运行时 (CIN/PL/ASM 工具链 + Go 原生 VM + ARM64/RISC-V/FP/Vector 指令集)
5
5
  Author: ByUsi Studio, 北啊呢
6
6
  License-Expression: MIT
@@ -32,7 +32,7 @@ Code CIN 是一门简洁的类 C 高级语言及其跨平台运行时(VM)。
32
32
 
33
33
  **已完成 Go 优先(v5.9.0)**:Go 是语言实现的核心(`codecin/native/` 下的 CIN 编译器、字节码 VM、CROM),**Go 侧不提供任何 CLI 入口**;Python 只作为唯一 CLI 外壳。支持 CIN/PL/ASM 三语言、ARM64 与 RISC-V 指令集扩展、默认 1 GiB 稀疏分页内存、FFI 与完整网络系统调用、性能分析。
34
34
 
35
- 模块化包结构(`codecin/`,Go 侧 `codecin/native/`),全线日志与错误输出基于 **rich**(彩色表格、面板、traceback),`--log-level DEBUG` 提供超详细追踪。
35
+ 模块化包结构(`codecin/`,Go 侧 `codecin/native/`),全线日志与错误输出基于 **rich**(彩色表格、面板、traceback),`--debug` / `--log-level DEBUG` 提供超详细诊断。
36
36
 
37
37
  ## 文档
38
38
 
@@ -137,10 +137,10 @@ graph LR
137
137
  | Go原生库 | c-shared (必需) | 整程序 VM 加速, 缺失时报 CPUSimulatorError 提示重建 |
138
138
  | FFI | SYS 140-144 | ffi_load/ffi_find/ffi_call/ffi_callf/lib_close, 标准 `lib/ffi.cin` |
139
139
  | 网络 | SYS 145-157 | HTTP/TCP/UDP/DNS, 标准 `lib/net.cin` |
140
- | 日志系统 | rich | 彩色日志/表格/面板/traceback, --log-level DEBUG 超详细追踪 |
140
+ | 日志系统 | rich | 彩色日志/表格/面板/traceback, --debug / --log-level DEBUG 超详细诊断 |
141
141
  | 性能分析 | 指令级 | CPI + 内存统计 + 热指令 |
142
142
  | CROM压缩 | zlib | 段式格式 (v4), 只保存已分配页 (Go/Python双实现) |
143
- | AOT 静态编译 | 独立可执行 | 编译为 Windows/Linux/macOS 静态可执行文件, 不需 Python/Go/动态库 |
143
+ | AOT 静态编译 | 独立可执行 | native 后端直接生成机器码 (VM 后端兼容), Windows/Linux/macOS 静态可执行 |
144
144
 
145
145
  ---
146
146
 
@@ -311,7 +311,8 @@ FADD, FSUB, FMUL, FDIV, FCMP, FCVT, FABS, FNEG, LDRS, STRS, VADD, VSUB, VMUL, VD
311
311
 
312
312
  CROM v4 采用**段式内存镜像**: 只保存已分配的 4 KiB 页, 镜像体积与实际使用的内存成正比
313
313
  (默认 1 GiB 逻辑空间也只会写出真正写入过的页); 旧版 v3 整块镜像仍可读取 (仅兼容)。
314
- `.bin` 字节码格式同步升级为 **BIN v3** (同样段式, 旧 v2 仅兼容读取)。
314
+ `.bin` 字节码格式同步升级为 **BIN v3** (同样段式, 旧 v2 仅兼容读取; v2 不记录 `heap_base`,
315
+ 需用 `--mem-size` 指定与文件头一致的内存布局, 否则加载阶段会报错并提示处理方式)。
315
316
 
316
317
  ```mermaid
317
318
  block-beta
@@ -455,18 +456,79 @@ v5.9.0 起**只有一条执行路径**: Python 完成 CIN/PL/ASM 编译后, 通
455
456
 
456
457
  ### 编译成独立可执行文件 (AOT)
457
458
 
458
- 把 CIN 程序编译成**静态链接的独立可执行文件** —— 产物内嵌字节码与初始内存镜像,
459
- 由内置 Go VM 执行, 运行时**不需要 Python、Go 工具链、libc 或任何动态库**。
460
- 构建时会解析 `import` 闭包做依赖完整性检查, 并把**全部依赖库在编译期展开嵌入产物**
461
- (产物不读取任何 `.cin` 文件):
459
+ 把 CIN/ASM/PL/BIN/CO 程序编译成**静态链接的独立可执行文件** —— 运行时**不需要
460
+ Python、Go 工具链、libc 或任何动态库**。CIN 构建时会解析 `import` 闭包做依赖
461
+ 完整性检查, 并把**全部依赖库在编译期展开嵌入产物** (产物不读取任何 `.cin` 文件)。
462
+
463
+ 默认使用 **auto 后端**: 指令数不超过 20000 时走 **native** (把编译后的指令流
464
+ 直接生成 Go 源码, 核心整数/控制流/内存/SYS 指令不再经过 UCBC 解码与 opcode
465
+ dispatch, 由 Go 编译器产出目标平台机器码); 超过阈值自动回退 **VM** (内嵌 UCBC
466
+ 字节码), 避免大量指令展开导致 `go build` 极慢。`--build-backend auto|native|vm`
467
+ 可强制指定。超过 800 条指令的 native 程序会自动按基本块拆分成多个 Go
468
+ 函数,进一步控制编译时间。
462
469
 
463
470
  ```bash
464
- # 本机平台
471
+ # 本机平台 (auto: 小程序 native, 大程序 VM)
465
472
  codecin program.cin --build-exe program # Windows 自动补 .exe
466
473
 
467
- # 交叉编译 (只需要安装 Go 工具链)
474
+ # 交叉编译 (只需要安装 Go 工具链; native/vm 后端都支持)
468
475
  codecin program.cin --build-exe app-linux --build-target linux/amd64
469
476
  codecin program.cin --build-exe app-mac --build-target darwin/arm64
477
+
478
+ # 强制某个后端 + 优化级别
479
+ codecin program.cin --build-exe app-native --build-backend native --optimize 2
480
+ codecin program.cin --build-exe app-vm --build-backend vm --optimize 2
481
+
482
+ # 独立编译 + 链接 (ASM/PL): 每个对象单独汇编, 再由链接器合并
483
+ codecin --emit-object main.asm -o main.co
484
+ codecin --emit-object lib.asm -o lib.co
485
+ codecin --link main.co --link lib.co -o app --optimize 3
486
+
487
+ # 也可以直接把源文件交给链接器 (即时编译为对象)
488
+ codecin --link main.cin --link lib.cin -o app
489
+
490
+ # CIN 库对象: 无 main 的文件作为函数库, 主文件用 extern 声明跨对象函数
491
+ codecin --emit-object lib.cin -o lib.co
492
+ codecin --emit-object main.cin -o main.co
493
+ codecin --link main.co --link lib.co -o app
494
+ ```
495
+
496
+ 静态库归档:
497
+
498
+ ```bash
499
+ codecin --emit-archive --link lib.co --link lib2.co -o lib.colib
500
+ codecin --link main.co --link lib.colib -o app
501
+ codecin --link main.co --link lib.colib -o app-gc --gc-sections
502
+ ```
503
+
504
+ 链接器按 C 风格静态库语义,只拉取能解决当前未定义符号的成员。
505
+
506
+ CIN 示例:
507
+
508
+ ```cin
509
+ // lib.cin
510
+ function helper() -> int {
511
+ return 7
512
+ }
513
+
514
+ // main.cin
515
+ extern function helper() -> int
516
+
517
+ function main() -> int {
518
+ println(int_to_str(helper()))
519
+ return 0
520
+ }
521
+ ```
522
+
523
+ 跨对象全局变量同样用 `extern` 声明:
524
+
525
+ ```cin
526
+ // lib.cin
527
+ int counter = 5
528
+
529
+ // main.cin
530
+ extern int counter
531
+ extern function bump()
470
532
  ```
471
533
 
472
534
  | 目标 | 说明 |
@@ -475,10 +537,15 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
475
537
  | `linux/amd64` `linux/arm64` | ELF, **无 PT_INTERP**, 不依赖 glibc |
476
538
  | `darwin/amd64` `darwin/arm64` | Mach-O, 静态 |
477
539
 
478
- 常见选项: `--build-target OS/ARCH`、`--build-keep-temp` (保留 `go build` 临时目录排错)。
540
+ 常见选项: `--build-target OS/ARCH`、`--build-backend auto|native|vm`、
541
+ `--optimize 0-3`、`--no-build-cache`、`--build-debug`、`--build-keep-temp`
542
+ (保留 `go build` 临时目录排错)。AOT 默认启用增量缓存 (源/依赖/工具链指纹命中时
543
+ 直接复用产物), 缓存目录可用 `CODECIN_AOT_CACHE` 覆盖。
544
+ `--optimize` 作用于 CIN IR (窥孔/常量折叠/不可达代码删除); native 后端最终
545
+ 机器码仍由 Go 编译器生成, 其自身优化由 Go 工具链决定。
479
546
  `import "math.cin"`(裸名字 = codecin 内置标准库 `codecin/lib/`)在**编译期**展开, 因此产物自带用到的标准库, 运行时不需要任何 `.cin` 文件。
480
547
  正常结束退出码 0, 运行期错误打印 stderr 并以 1 退出。
481
- 详见 [开发者编译文档 · AOT](docs/BUILDING.md#aot-编译独立可执行文件)。
548
+ 详见 [开发者编译文档 · AOT](docs/BUILDING.md)。
482
549
 
483
550
  ### 命令行选项
484
551
 
@@ -494,6 +561,7 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
494
561
  - `--libs` - 列出内置标准库并标注执行路径要求
495
562
 
496
563
  **日志与运行时行为**
564
+ - `--debug` - 调试模式 (强制 DEBUG 日志, 执行结束输出 CPU 状态与统计, 异常完整堆栈)
497
565
  - `--log-level DEBUG|INFO|WARNING|ERROR|CRITICAL` - 日志级别 (默认 INFO)
498
566
  - `--log-file <file>` - 日志输出到文件
499
567
  - `--sandbox` - 沙箱模式 (在 Go 引擎侧拦截全部宿主能力系统调用)
@@ -504,11 +572,22 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
504
572
 
505
573
  **编译选项**
506
574
  - `--compile` / `--compile-only` - 编译为 .bin 字节码
507
- - `--optimize 0-3` - 优化级别 (默认 0)
575
+ - `--optimize 0-3` - IR 优化级别 (0 关闭; 1 窥孔; 2 常量折叠; 3 不可达代码删除)
508
576
  - `--disasm` - 反汇编 .bin 字节码为文本清单后退出
509
577
  - `-o, --output <file>` - 输出文件名 (.crom/.bin)
510
578
  - `--strict` - 严格汇编模式
511
579
 
580
+ **AOT 选项 (`--build-exe`)**
581
+ - `--build-target OS/ARCH` - 交叉编译目标
582
+ - `--build-backend auto|native|vm` - auto 按指令数选 native/VM (默认) / 强制 native / 强制 VM
583
+ - `--no-build-cache` - 禁用 AOT 增量构建缓存 (含对象/归档链接缓存)
584
+ - `--build-debug` - 保留符号表/DWARF (不传 `-s -w`),便于调试
585
+ - `--build-keep-temp` - 保留 Go 构建临时目录
586
+ - `--emit-object` - 把 CIN/ASM/PL 编译为可重定位 `.co` 对象
587
+ - `--link INPUT` - 链接 `.cin/.asm/.pl/.co/.colib` 为可执行文件 (可重复)
588
+ - `--emit-archive` - 把 `--link` 输入打包为 `.colib` 静态库归档
589
+ - `--gc-sections` - 链接时删除从入口不可达的函数/代码段
590
+
512
591
  **CROM选项**
513
592
  - `--save` - 执行后保存 .crom 内存镜像 (v4 段式)
514
593
  - `--no-compress` - 禁用压缩
@@ -527,19 +606,25 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
527
606
  | `ERROR` | 仅错误面板 |
528
607
  | `WARNING` | + 警告与兼容降级提示 |
529
608
  | `INFO` (默认) | + 编译汇总、执行起止、统计表 |
530
- | `DEBUG` | **超详细**: 全部埋点 + 逐指令追踪 |
609
+ | `DEBUG` | **超详细**: 全部埋点 (CPU 初始化、编译标签、原生执行结果) |
610
+
611
+ ### 调试模式 (`--debug`)
612
+
613
+ `--debug` 是比 `--log-level DEBUG` 更高层的开关 (与旧版一致, 始终强制 DEBUG):
614
+
615
+ - **强制 DEBUG 日志**: 即使同时给出 `--log-level ERROR` 也按 DEBUG 输出
616
+ - **收尾现场**: 执行结束打印寄存器/向量状态与执行统计表
617
+ - **完整堆栈**: 未预期异常输出 rich 彩色完整 traceback
618
+
619
+ v5.9.0 起程序由 Go 原生引擎一次性执行, 不再有 Python 解释器级逐指令追踪;
620
+ 逐指令/内存/SYS 级调试需在 Go 引擎侧扩展。
531
621
 
532
622
  ### 超详细输出 (`--log-level DEBUG`)
533
623
 
534
624
  - **CPU 初始化 dump**: 内存大小、SP 初值、堆基址
535
- - **逐指令追踪**: 每条指令输出 PC、全局序号、操作数值、SP 与执行后 NZCV 标志
536
- ```
537
- PC=0x0004 #00000002 ADD X1=0x0(0) X2=0x1(1) SP=0xfff8
538
- => pc=0x0005 N=0 Z=0 C=0 V=0
539
- ```
540
- - **内存读写追踪**: `MEM WR @0x000c w=1 value=0x0`, 覆盖全部加载/存储指令
541
- - **SYS 系统调用** (功能号+参数, 含 FFI/网络调用)
542
- - **编译埋点**: CIN tokenize/parse 统计、原生库调用参数
625
+ - **编译/装载**: 指令数与汇编标签表
626
+ - **原生执行结果**: 状态、步数、PC、耗时、错误
627
+ - **错误处理**: 加载/汇编/编译/运行错误统一 rich 面板, 未预期异常输出完整 traceback
543
628
 
544
629
  ### 错误处理
545
630
 
@@ -14,7 +14,7 @@ Code CIN 是一门简洁的类 C 高级语言及其跨平台运行时(VM)。
14
14
 
15
15
  **已完成 Go 优先(v5.9.0)**:Go 是语言实现的核心(`codecin/native/` 下的 CIN 编译器、字节码 VM、CROM),**Go 侧不提供任何 CLI 入口**;Python 只作为唯一 CLI 外壳。支持 CIN/PL/ASM 三语言、ARM64 与 RISC-V 指令集扩展、默认 1 GiB 稀疏分页内存、FFI 与完整网络系统调用、性能分析。
16
16
 
17
- 模块化包结构(`codecin/`,Go 侧 `codecin/native/`),全线日志与错误输出基于 **rich**(彩色表格、面板、traceback),`--log-level DEBUG` 提供超详细追踪。
17
+ 模块化包结构(`codecin/`,Go 侧 `codecin/native/`),全线日志与错误输出基于 **rich**(彩色表格、面板、traceback),`--debug` / `--log-level DEBUG` 提供超详细诊断。
18
18
 
19
19
  ## 文档
20
20
 
@@ -119,10 +119,10 @@ graph LR
119
119
  | Go原生库 | c-shared (必需) | 整程序 VM 加速, 缺失时报 CPUSimulatorError 提示重建 |
120
120
  | FFI | SYS 140-144 | ffi_load/ffi_find/ffi_call/ffi_callf/lib_close, 标准 `lib/ffi.cin` |
121
121
  | 网络 | SYS 145-157 | HTTP/TCP/UDP/DNS, 标准 `lib/net.cin` |
122
- | 日志系统 | rich | 彩色日志/表格/面板/traceback, --log-level DEBUG 超详细追踪 |
122
+ | 日志系统 | rich | 彩色日志/表格/面板/traceback, --debug / --log-level DEBUG 超详细诊断 |
123
123
  | 性能分析 | 指令级 | CPI + 内存统计 + 热指令 |
124
124
  | CROM压缩 | zlib | 段式格式 (v4), 只保存已分配页 (Go/Python双实现) |
125
- | AOT 静态编译 | 独立可执行 | 编译为 Windows/Linux/macOS 静态可执行文件, 不需 Python/Go/动态库 |
125
+ | AOT 静态编译 | 独立可执行 | native 后端直接生成机器码 (VM 后端兼容), Windows/Linux/macOS 静态可执行 |
126
126
 
127
127
  ---
128
128
 
@@ -293,7 +293,8 @@ FADD, FSUB, FMUL, FDIV, FCMP, FCVT, FABS, FNEG, LDRS, STRS, VADD, VSUB, VMUL, VD
293
293
 
294
294
  CROM v4 采用**段式内存镜像**: 只保存已分配的 4 KiB 页, 镜像体积与实际使用的内存成正比
295
295
  (默认 1 GiB 逻辑空间也只会写出真正写入过的页); 旧版 v3 整块镜像仍可读取 (仅兼容)。
296
- `.bin` 字节码格式同步升级为 **BIN v3** (同样段式, 旧 v2 仅兼容读取)。
296
+ `.bin` 字节码格式同步升级为 **BIN v3** (同样段式, 旧 v2 仅兼容读取; v2 不记录 `heap_base`,
297
+ 需用 `--mem-size` 指定与文件头一致的内存布局, 否则加载阶段会报错并提示处理方式)。
297
298
 
298
299
  ```mermaid
299
300
  block-beta
@@ -437,18 +438,79 @@ v5.9.0 起**只有一条执行路径**: Python 完成 CIN/PL/ASM 编译后, 通
437
438
 
438
439
  ### 编译成独立可执行文件 (AOT)
439
440
 
440
- 把 CIN 程序编译成**静态链接的独立可执行文件** —— 产物内嵌字节码与初始内存镜像,
441
- 由内置 Go VM 执行, 运行时**不需要 Python、Go 工具链、libc 或任何动态库**。
442
- 构建时会解析 `import` 闭包做依赖完整性检查, 并把**全部依赖库在编译期展开嵌入产物**
443
- (产物不读取任何 `.cin` 文件):
441
+ 把 CIN/ASM/PL/BIN/CO 程序编译成**静态链接的独立可执行文件** —— 运行时**不需要
442
+ Python、Go 工具链、libc 或任何动态库**。CIN 构建时会解析 `import` 闭包做依赖
443
+ 完整性检查, 并把**全部依赖库在编译期展开嵌入产物** (产物不读取任何 `.cin` 文件)。
444
+
445
+ 默认使用 **auto 后端**: 指令数不超过 20000 时走 **native** (把编译后的指令流
446
+ 直接生成 Go 源码, 核心整数/控制流/内存/SYS 指令不再经过 UCBC 解码与 opcode
447
+ dispatch, 由 Go 编译器产出目标平台机器码); 超过阈值自动回退 **VM** (内嵌 UCBC
448
+ 字节码), 避免大量指令展开导致 `go build` 极慢。`--build-backend auto|native|vm`
449
+ 可强制指定。超过 800 条指令的 native 程序会自动按基本块拆分成多个 Go
450
+ 函数,进一步控制编译时间。
444
451
 
445
452
  ```bash
446
- # 本机平台
453
+ # 本机平台 (auto: 小程序 native, 大程序 VM)
447
454
  codecin program.cin --build-exe program # Windows 自动补 .exe
448
455
 
449
- # 交叉编译 (只需要安装 Go 工具链)
456
+ # 交叉编译 (只需要安装 Go 工具链; native/vm 后端都支持)
450
457
  codecin program.cin --build-exe app-linux --build-target linux/amd64
451
458
  codecin program.cin --build-exe app-mac --build-target darwin/arm64
459
+
460
+ # 强制某个后端 + 优化级别
461
+ codecin program.cin --build-exe app-native --build-backend native --optimize 2
462
+ codecin program.cin --build-exe app-vm --build-backend vm --optimize 2
463
+
464
+ # 独立编译 + 链接 (ASM/PL): 每个对象单独汇编, 再由链接器合并
465
+ codecin --emit-object main.asm -o main.co
466
+ codecin --emit-object lib.asm -o lib.co
467
+ codecin --link main.co --link lib.co -o app --optimize 3
468
+
469
+ # 也可以直接把源文件交给链接器 (即时编译为对象)
470
+ codecin --link main.cin --link lib.cin -o app
471
+
472
+ # CIN 库对象: 无 main 的文件作为函数库, 主文件用 extern 声明跨对象函数
473
+ codecin --emit-object lib.cin -o lib.co
474
+ codecin --emit-object main.cin -o main.co
475
+ codecin --link main.co --link lib.co -o app
476
+ ```
477
+
478
+ 静态库归档:
479
+
480
+ ```bash
481
+ codecin --emit-archive --link lib.co --link lib2.co -o lib.colib
482
+ codecin --link main.co --link lib.colib -o app
483
+ codecin --link main.co --link lib.colib -o app-gc --gc-sections
484
+ ```
485
+
486
+ 链接器按 C 风格静态库语义,只拉取能解决当前未定义符号的成员。
487
+
488
+ CIN 示例:
489
+
490
+ ```cin
491
+ // lib.cin
492
+ function helper() -> int {
493
+ return 7
494
+ }
495
+
496
+ // main.cin
497
+ extern function helper() -> int
498
+
499
+ function main() -> int {
500
+ println(int_to_str(helper()))
501
+ return 0
502
+ }
503
+ ```
504
+
505
+ 跨对象全局变量同样用 `extern` 声明:
506
+
507
+ ```cin
508
+ // lib.cin
509
+ int counter = 5
510
+
511
+ // main.cin
512
+ extern int counter
513
+ extern function bump()
452
514
  ```
453
515
 
454
516
  | 目标 | 说明 |
@@ -457,10 +519,15 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
457
519
  | `linux/amd64` `linux/arm64` | ELF, **无 PT_INTERP**, 不依赖 glibc |
458
520
  | `darwin/amd64` `darwin/arm64` | Mach-O, 静态 |
459
521
 
460
- 常见选项: `--build-target OS/ARCH`、`--build-keep-temp` (保留 `go build` 临时目录排错)。
522
+ 常见选项: `--build-target OS/ARCH`、`--build-backend auto|native|vm`、
523
+ `--optimize 0-3`、`--no-build-cache`、`--build-debug`、`--build-keep-temp`
524
+ (保留 `go build` 临时目录排错)。AOT 默认启用增量缓存 (源/依赖/工具链指纹命中时
525
+ 直接复用产物), 缓存目录可用 `CODECIN_AOT_CACHE` 覆盖。
526
+ `--optimize` 作用于 CIN IR (窥孔/常量折叠/不可达代码删除); native 后端最终
527
+ 机器码仍由 Go 编译器生成, 其自身优化由 Go 工具链决定。
461
528
  `import "math.cin"`(裸名字 = codecin 内置标准库 `codecin/lib/`)在**编译期**展开, 因此产物自带用到的标准库, 运行时不需要任何 `.cin` 文件。
462
529
  正常结束退出码 0, 运行期错误打印 stderr 并以 1 退出。
463
- 详见 [开发者编译文档 · AOT](docs/BUILDING.md#aot-编译独立可执行文件)。
530
+ 详见 [开发者编译文档 · AOT](docs/BUILDING.md)。
464
531
 
465
532
  ### 命令行选项
466
533
 
@@ -476,6 +543,7 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
476
543
  - `--libs` - 列出内置标准库并标注执行路径要求
477
544
 
478
545
  **日志与运行时行为**
546
+ - `--debug` - 调试模式 (强制 DEBUG 日志, 执行结束输出 CPU 状态与统计, 异常完整堆栈)
479
547
  - `--log-level DEBUG|INFO|WARNING|ERROR|CRITICAL` - 日志级别 (默认 INFO)
480
548
  - `--log-file <file>` - 日志输出到文件
481
549
  - `--sandbox` - 沙箱模式 (在 Go 引擎侧拦截全部宿主能力系统调用)
@@ -486,11 +554,22 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
486
554
 
487
555
  **编译选项**
488
556
  - `--compile` / `--compile-only` - 编译为 .bin 字节码
489
- - `--optimize 0-3` - 优化级别 (默认 0)
557
+ - `--optimize 0-3` - IR 优化级别 (0 关闭; 1 窥孔; 2 常量折叠; 3 不可达代码删除)
490
558
  - `--disasm` - 反汇编 .bin 字节码为文本清单后退出
491
559
  - `-o, --output <file>` - 输出文件名 (.crom/.bin)
492
560
  - `--strict` - 严格汇编模式
493
561
 
562
+ **AOT 选项 (`--build-exe`)**
563
+ - `--build-target OS/ARCH` - 交叉编译目标
564
+ - `--build-backend auto|native|vm` - auto 按指令数选 native/VM (默认) / 强制 native / 强制 VM
565
+ - `--no-build-cache` - 禁用 AOT 增量构建缓存 (含对象/归档链接缓存)
566
+ - `--build-debug` - 保留符号表/DWARF (不传 `-s -w`),便于调试
567
+ - `--build-keep-temp` - 保留 Go 构建临时目录
568
+ - `--emit-object` - 把 CIN/ASM/PL 编译为可重定位 `.co` 对象
569
+ - `--link INPUT` - 链接 `.cin/.asm/.pl/.co/.colib` 为可执行文件 (可重复)
570
+ - `--emit-archive` - 把 `--link` 输入打包为 `.colib` 静态库归档
571
+ - `--gc-sections` - 链接时删除从入口不可达的函数/代码段
572
+
494
573
  **CROM选项**
495
574
  - `--save` - 执行后保存 .crom 内存镜像 (v4 段式)
496
575
  - `--no-compress` - 禁用压缩
@@ -509,19 +588,25 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
509
588
  | `ERROR` | 仅错误面板 |
510
589
  | `WARNING` | + 警告与兼容降级提示 |
511
590
  | `INFO` (默认) | + 编译汇总、执行起止、统计表 |
512
- | `DEBUG` | **超详细**: 全部埋点 + 逐指令追踪 |
591
+ | `DEBUG` | **超详细**: 全部埋点 (CPU 初始化、编译标签、原生执行结果) |
592
+
593
+ ### 调试模式 (`--debug`)
594
+
595
+ `--debug` 是比 `--log-level DEBUG` 更高层的开关 (与旧版一致, 始终强制 DEBUG):
596
+
597
+ - **强制 DEBUG 日志**: 即使同时给出 `--log-level ERROR` 也按 DEBUG 输出
598
+ - **收尾现场**: 执行结束打印寄存器/向量状态与执行统计表
599
+ - **完整堆栈**: 未预期异常输出 rich 彩色完整 traceback
600
+
601
+ v5.9.0 起程序由 Go 原生引擎一次性执行, 不再有 Python 解释器级逐指令追踪;
602
+ 逐指令/内存/SYS 级调试需在 Go 引擎侧扩展。
513
603
 
514
604
  ### 超详细输出 (`--log-level DEBUG`)
515
605
 
516
606
  - **CPU 初始化 dump**: 内存大小、SP 初值、堆基址
517
- - **逐指令追踪**: 每条指令输出 PC、全局序号、操作数值、SP 与执行后 NZCV 标志
518
- ```
519
- PC=0x0004 #00000002 ADD X1=0x0(0) X2=0x1(1) SP=0xfff8
520
- => pc=0x0005 N=0 Z=0 C=0 V=0
521
- ```
522
- - **内存读写追踪**: `MEM WR @0x000c w=1 value=0x0`, 覆盖全部加载/存储指令
523
- - **SYS 系统调用** (功能号+参数, 含 FFI/网络调用)
524
- - **编译埋点**: CIN tokenize/parse 统计、原生库调用参数
607
+ - **编译/装载**: 指令数与汇编标签表
608
+ - **原生执行结果**: 状态、步数、PC、耗时、错误
609
+ - **错误处理**: 加载/汇编/编译/运行错误统一 rich 面板, 未预期异常输出完整 traceback
525
610
 
526
611
  ### 错误处理
527
612
 
@@ -1,4 +1,4 @@
1
- __version__ = "5.9.0"
1
+ __version__ = "6.0.1"
2
2
  __author__ = "ByUsi Studio"
3
3
 
4
4
  from .config import Config