codecin 5.8.2__tar.gz → 6.0.0__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 (237) hide show
  1. {codecin-5.8.2 → codecin-6.0.0}/CHANGELOG.md +129 -0
  2. {codecin-5.8.2/codecin.egg-info → codecin-6.0.0}/PKG-INFO +222 -250
  3. {codecin-5.8.2 → codecin-6.0.0}/README.md +221 -249
  4. {codecin-5.8.2 → codecin-6.0.0}/codecin/__init__.py +1 -1
  5. codecin-6.0.0/codecin/aot.py +1026 -0
  6. {codecin-5.8.2 → codecin-6.0.0}/codecin/assembler.py +75 -4
  7. {codecin-5.8.2 → codecin-6.0.0}/codecin/cin.py +154 -28
  8. {codecin-5.8.2 → codecin-6.0.0}/codecin/cli.py +143 -58
  9. {codecin-5.8.2 → codecin-6.0.0}/codecin/config.py +14 -26
  10. codecin-6.0.0/codecin/cpu.py +292 -0
  11. codecin-6.0.0/codecin/crom.py +275 -0
  12. codecin-6.0.0/codecin/disasm.py +145 -0
  13. {codecin-5.8.2 → codecin-6.0.0}/codecin/environment.py +4 -4
  14. {codecin-5.8.2 → codecin-6.0.0}/codecin/errors.py +1 -5
  15. {codecin-5.8.2 → codecin-6.0.0}/codecin/isa.py +28 -2
  16. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/codec.cin +2 -2
  17. codecin-6.0.0/codecin/lib/ffi.cin +163 -0
  18. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/gui.cin +1 -1
  19. codecin-6.0.0/codecin/lib/net.cin +171 -0
  20. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/path.cin +1 -1
  21. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/text.cin +1 -1
  22. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/token.cin +1 -1
  23. codecin-6.0.0/codecin/memory.py +306 -0
  24. codecin-6.0.0/codecin/native/aot/aot.go +110 -0
  25. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/aot/stub_main.go.txt +5 -4
  26. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/compiler/codegen.go +23 -0
  27. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/compiler/syscalls.go +18 -0
  28. codecin-6.0.0/codecin/native/engine/ffi_nocgo.go +20 -0
  29. codecin-6.0.0/codecin/native/engine/ffi_registry.go +69 -0
  30. codecin-6.0.0/codecin/native/engine/ffi_unix.go +109 -0
  31. codecin-6.0.0/codecin/native/engine/ffi_windows.go +117 -0
  32. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/hostnet.go +50 -0
  33. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/isa_gen.go +181 -1
  34. codecin-6.0.0/codecin/native/engine/native.go +634 -0
  35. codecin-6.0.0/codecin/native/engine/netsock.go +321 -0
  36. codecin-6.0.0/codecin/native/engine/ops_ext.go +515 -0
  37. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/version_gen.go +1 -1
  38. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/vm.go +285 -40
  39. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/main.go +196 -0
  40. {codecin-5.8.2 → codecin-6.0.0}/codecin/native.py +72 -40
  41. codecin-6.0.0/codecin/native_codegen.py +986 -0
  42. codecin-6.0.0/codecin/object.py +539 -0
  43. codecin-6.0.0/codecin/optimizer.py +236 -0
  44. {codecin-5.8.2 → codecin-6.0.0}/codecin/stats.py +2 -7
  45. {codecin-5.8.2 → codecin-6.0.0}/codecin/stdlib.py +4 -5
  46. {codecin-5.8.2 → codecin-6.0.0}/codecin/version.py +4 -18
  47. {codecin-5.8.2 → codecin-6.0.0/codecin.egg-info}/PKG-INFO +222 -250
  48. {codecin-5.8.2 → codecin-6.0.0}/codecin.egg-info/SOURCES.txt +16 -12
  49. {codecin-5.8.2 → codecin-6.0.0}/script/gen_native_isa.py +7 -1
  50. {codecin-5.8.2 → codecin-6.0.0}/tests/test_aggregate_and_const.py +11 -59
  51. {codecin-5.8.2 → codecin-6.0.0}/tests/test_all_libs_together.py +8 -12
  52. {codecin-5.8.2 → codecin-6.0.0}/tests/test_aot.py +108 -32
  53. {codecin-5.8.2 → codecin-6.0.0}/tests/test_assembler_ext.py +1 -13
  54. {codecin-5.8.2 → codecin-6.0.0}/tests/test_cin_host.py +3 -48
  55. {codecin-5.8.2 → codecin-6.0.0}/tests/test_cin_host_ext.py +7 -60
  56. {codecin-5.8.2 → codecin-6.0.0}/tests/test_cin_new_features.py +4 -24
  57. {codecin-5.8.2 → codecin-6.0.0}/tests/test_cin_syntax.py +2 -24
  58. {codecin-5.8.2 → codecin-6.0.0}/tests/test_cin_syntax_ext.py +12 -28
  59. {codecin-5.8.2 → codecin-6.0.0}/tests/test_cin_system.py +5 -11
  60. codecin-6.0.0/tests/test_cli.py +221 -0
  61. {codecin-5.8.2 → codecin-6.0.0}/tests/test_compiler_errors.py +0 -8
  62. {codecin-5.8.2 → codecin-6.0.0}/tests/test_environment.py +3 -7
  63. {codecin-5.8.2 → codecin-6.0.0}/tests/test_examples.py +0 -3
  64. {codecin-5.8.2 → codecin-6.0.0}/tests/test_features_ab.py +0 -14
  65. {codecin-5.8.2 → codecin-6.0.0}/tests/test_features_import.py +1 -20
  66. {codecin-5.8.2 → codecin-6.0.0}/tests/test_features_importloc.py +0 -5
  67. codecin-6.0.0/tests/test_ffi_net.py +426 -0
  68. {codecin-5.8.2 → codecin-6.0.0}/tests/test_gui.py +14 -28
  69. {codecin-5.8.2 → codecin-6.0.0}/tests/test_index_subscript_type.py +6 -20
  70. {codecin-5.8.2 → codecin-6.0.0}/tests/test_isa_single_source.py +0 -7
  71. {codecin-5.8.2 → codecin-6.0.0}/tests/test_issue_regress.py +19 -72
  72. {codecin-5.8.2 → codecin-6.0.0}/tests/test_keyboard.py +12 -31
  73. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_bigint.py +18 -37
  74. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_bitset.py +2 -6
  75. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_codec.py +6 -22
  76. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_combin.py +4 -12
  77. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_compat.py +20 -57
  78. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_csv.py +4 -11
  79. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_dp.py +2 -6
  80. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_fmt.py +4 -11
  81. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_frac.py +12 -25
  82. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_graph.py +4 -12
  83. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_heap.py +4 -12
  84. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_path.py +5 -15
  85. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_set.py +2 -6
  86. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_text.py +12 -25
  87. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_token.py +8 -17
  88. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_tree.py +2 -6
  89. {codecin-5.8.2 → codecin-6.0.0}/tests/test_lib_unionfind.py +2 -6
  90. {codecin-5.8.2 → codecin-6.0.0}/tests/test_libs.py +3 -15
  91. {codecin-5.8.2 → codecin-6.0.0}/tests/test_libs_ext.py +0 -8
  92. {codecin-5.8.2 → codecin-6.0.0}/tests/test_literals_and_bom.py +3 -16
  93. codecin-6.0.0/tests/test_native_codegen.py +206 -0
  94. {codecin-5.8.2 → codecin-6.0.0}/tests/test_native_hardening.py +8 -21
  95. {codecin-5.8.2 → codecin-6.0.0}/tests/test_native_lib_lookup.py +0 -4
  96. {codecin-5.8.2 → codecin-6.0.0}/tests/test_nested_subscript_codegen.py +3 -12
  97. {codecin-5.8.2 → codecin-6.0.0}/tests/test_no_go_cli.py +0 -4
  98. codecin-6.0.0/tests/test_object_link.py +322 -0
  99. {codecin-5.8.2 → codecin-6.0.0}/tests/test_p0_fixes.py +31 -78
  100. {codecin-5.8.2 → codecin-6.0.0}/tests/test_packaging.py +0 -9
  101. {codecin-5.8.2 → codecin-6.0.0}/tests/test_paths_consistency.py +0 -1
  102. codecin-6.0.0/tests/test_sparse_memory.py +167 -0
  103. {codecin-5.8.2 → codecin-6.0.0}/tests/test_struct_value_semantics.py +12 -82
  104. {codecin-5.8.2 → codecin-6.0.0}/tests/test_switch_semantics.py +6 -22
  105. {codecin-5.8.2 → codecin-6.0.0}/tests/test_version.py +7 -38
  106. {codecin-5.8.2 → codecin-6.0.0}/tests/test_workflows.py +0 -13
  107. codecin-5.8.2/codecin/aot.py +0 -473
  108. codecin-5.8.2/codecin/cache.py +0 -71
  109. codecin-5.8.2/codecin/cpu.py +0 -1717
  110. codecin-5.8.2/codecin/crom.py +0 -222
  111. codecin-5.8.2/codecin/debugger.py +0 -691
  112. codecin-5.8.2/codecin/disasm.py +0 -86
  113. codecin-5.8.2/codecin/jit.py +0 -276
  114. codecin-5.8.2/codecin/memory.py +0 -370
  115. codecin-5.8.2/codecin/native/aot/aot.go +0 -59
  116. codecin-5.8.2/tests/test_cache.py +0 -40
  117. codecin-5.8.2/tests/test_cli.py +0 -97
  118. codecin-5.8.2/tests/test_cpu_interpreted.py +0 -89
  119. codecin-5.8.2/tests/test_debugger.py +0 -82
  120. codecin-5.8.2/tests/test_features_crom_mmu.py +0 -82
  121. codecin-5.8.2/tests/test_features_mmu.py +0 -123
  122. codecin-5.8.2/tests/test_features_remote.py +0 -152
  123. codecin-5.8.2/tests/test_isa_dispatch.py +0 -68
  124. codecin-5.8.2/tests/test_memory_protection.py +0 -62
  125. codecin-5.8.2/tests/test_three_paths.py +0 -86
  126. {codecin-5.8.2 → codecin-6.0.0}/LICENSE +0 -0
  127. {codecin-5.8.2 → codecin-6.0.0}/MANIFEST.in +0 -0
  128. {codecin-5.8.2 → codecin-6.0.0}/codecin/console.py +0 -0
  129. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/array.cin +0 -0
  130. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/bigint.cin +0 -0
  131. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/bits.cin +0 -0
  132. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/bitset.cin +0 -0
  133. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/combin.cin +0 -0
  134. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/conv.cin +0 -0
  135. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/cppstd.cin +0 -0
  136. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/cstd.cin +0 -0
  137. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/csv.cin +0 -0
  138. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/dp.cin +0 -0
  139. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/fmt.cin +0 -0
  140. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/frac.cin +0 -0
  141. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/gostd.cin +0 -0
  142. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/graph.cin +0 -0
  143. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/hash.cin +0 -0
  144. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/heap.cin +0 -0
  145. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/io.cin +0 -0
  146. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/json.cin +0 -0
  147. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/key.cin +0 -0
  148. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/math.cin +0 -0
  149. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/matrix.cin +0 -0
  150. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/queue.cin +0 -0
  151. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/rand.cin +0 -0
  152. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/set.cin +0 -0
  153. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/sort.cin +0 -0
  154. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/stat.cin +0 -0
  155. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/str.cin +0 -0
  156. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/termux.cin +0 -0
  157. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/test.cin +0 -0
  158. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/time.cin +0 -0
  159. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/tree.cin +0 -0
  160. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/unionfind.cin +0 -0
  161. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/validate.cin +0 -0
  162. {codecin-5.8.2 → codecin-6.0.0}/codecin/lib/vec.cin +0 -0
  163. {codecin-5.8.2 → codecin-6.0.0}/codecin/logger.py +0 -0
  164. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/build.ps1 +0 -0
  165. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/build.sh +0 -0
  166. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/compiler/compile_test.go +0 -0
  167. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/compiler/parser.go +0 -0
  168. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/compiler/tokenizer.go +0 -0
  169. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/compiler/types.go +0 -0
  170. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/args.go +0 -0
  171. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/audio.go +0 -0
  172. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/audio_other.go +0 -0
  173. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/audio_test.go +0 -0
  174. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/audio_windows.go +0 -0
  175. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/canvas.go +0 -0
  176. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/console_other.go +0 -0
  177. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/console_windows.go +0 -0
  178. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/crom.go +0 -0
  179. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/encode.go +0 -0
  180. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/engine_test.go +0 -0
  181. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/gui.go +0 -0
  182. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/gui_stub.go +0 -0
  183. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/gui_test.go +0 -0
  184. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/gui_windows.go +0 -0
  185. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/gui_x11.go +0 -0
  186. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/host_test.go +0 -0
  187. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/hostcrypto.go +0 -0
  188. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/hostdesktop.go +0 -0
  189. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/keyboard.go +0 -0
  190. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/keyboard_other.go +0 -0
  191. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/keyboard_stub.go +0 -0
  192. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/keyboard_termios_darwin.go +0 -0
  193. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/keyboard_termios_linux.go +0 -0
  194. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/keyboard_test.go +0 -0
  195. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/keyboard_windows.go +0 -0
  196. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/keyboard_windows_test.go +0 -0
  197. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/mem_other.go +0 -0
  198. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/mem_windows.go +0 -0
  199. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/stdin.go +0 -0
  200. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/stdin_other.go +0 -0
  201. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/stdin_windows.go +0 -0
  202. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/system.go +0 -0
  203. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/engine/termux.go +0 -0
  204. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/go.mod +0 -0
  205. {codecin-5.8.2 → codecin-6.0.0}/codecin/native/ir/ir.go +0 -0
  206. {codecin-5.8.2 → codecin-6.0.0}/codecin/registers.py +0 -0
  207. {codecin-5.8.2 → codecin-6.0.0}/codecin.egg-info/dependency_links.txt +0 -0
  208. {codecin-5.8.2 → codecin-6.0.0}/codecin.egg-info/entry_points.txt +0 -0
  209. {codecin-5.8.2 → codecin-6.0.0}/codecin.egg-info/requires.txt +0 -0
  210. {codecin-5.8.2 → codecin-6.0.0}/codecin.egg-info/top_level.txt +0 -0
  211. {codecin-5.8.2 → codecin-6.0.0}/examples/args_demo.cin +0 -0
  212. {codecin-5.8.2 → codecin-6.0.0}/examples/asm_constants.asm +0 -0
  213. {codecin-5.8.2 → codecin-6.0.0}/examples/bitwise_builtins.cin +0 -0
  214. {codecin-5.8.2 → codecin-6.0.0}/examples/control_flow.cin +0 -0
  215. {codecin-5.8.2 → codecin-6.0.0}/examples/enum_range_for.cin +0 -0
  216. {codecin-5.8.2 → codecin-6.0.0}/examples/gui_demo.cin +0 -0
  217. {codecin-5.8.2 → codecin-6.0.0}/examples/literals_types.cin +0 -0
  218. {codecin-5.8.2 → codecin-6.0.0}/examples/local_audio.cin +0 -0
  219. {codecin-5.8.2 → codecin-6.0.0}/examples/modules_demo.cin +0 -0
  220. {codecin-5.8.2 → codecin-6.0.0}/examples/stdlib_demo.cin +0 -0
  221. {codecin-5.8.2 → codecin-6.0.0}/examples/system_interaction.cin +0 -0
  222. {codecin-5.8.2 → codecin-6.0.0}/misc/vim/ftdetect/codecin.vim +0 -0
  223. {codecin-5.8.2 → codecin-6.0.0}/misc/vim/syntax/cin.vim +0 -0
  224. {codecin-5.8.2 → codecin-6.0.0}/misc/vim/syntax/codecinasm.vim +0 -0
  225. {codecin-5.8.2 → codecin-6.0.0}/misc/vscode-cin/.vscodeignore +0 -0
  226. {codecin-5.8.2 → codecin-6.0.0}/misc/vscode-cin/README.md +0 -0
  227. {codecin-5.8.2 → codecin-6.0.0}/misc/vscode-cin/build.bat +0 -0
  228. {codecin-5.8.2 → codecin-6.0.0}/misc/vscode-cin/language-configuration.json +0 -0
  229. {codecin-5.8.2 → codecin-6.0.0}/misc/vscode-cin/package.json +0 -0
  230. {codecin-5.8.2 → codecin-6.0.0}/misc/vscode-cin/snippets/cin.json +0 -0
  231. {codecin-5.8.2 → codecin-6.0.0}/misc/vscode-cin/syntaxes/cin.tmLanguage.json +0 -0
  232. {codecin-5.8.2 → codecin-6.0.0}/pyproject.toml +0 -0
  233. {codecin-5.8.2 → codecin-6.0.0}/script/bump_version.py +0 -0
  234. {codecin-5.8.2 → codecin-6.0.0}/script/check_paths.py +0 -0
  235. {codecin-5.8.2 → codecin-6.0.0}/script/gen_isa_docs.py +0 -0
  236. {codecin-5.8.2 → codecin-6.0.0}/setup.cfg +0 -0
  237. {codecin-5.8.2 → codecin-6.0.0}/setup.py +0 -0
@@ -5,6 +5,135 @@
5
5
 
6
6
  ---
7
7
 
8
+ ## [6.0.0] - 2026-10-17
9
+
10
+ ### 新增 (Added)
11
+
12
+ - **恢复 `--debug` 调试模式**(native-only 架构下的等价能力):强制 `DEBUG`
13
+ 日志(优先于 `--log-level`)、执行结束输出寄存器/向量现场与执行统计表、
14
+ 未预期异常打印 rich 完整堆栈;`Config.debug_mode` 配置项同步回归。
15
+ - **native AOT 后端(第一阶段)**:新增 `--build-backend auto|native|vm`,默认
16
+ `auto` 在指令数 ≤ 20000 时走 `native`,把指令流直接展开为 Go 语句,核心
17
+ 整数/控制流/内存/SYS 指令不再经过 UCBC 解码与 opcode dispatch,由 Go 编译器
18
+ 产出 x86-64/ARM64 机器码;大程序自动回退 VM,避免大量指令让 `go build`
19
+ 极慢。ARM64/RISC-V 扩展整数、FP 与 Vector 指令也已直接降级;仅动态控制流/
20
+ 无法静态求值的操作数保留受控单指令回退。
21
+ - **大程序 native 基本块拆分**:超过 800 条指令自动按跳转目标/返回点切分
22
+ 为多个 Go 函数,避免单个函数过大导致 `go build` 极慢;`basic.cin`
23
+ (约 4500 条指令)现在可直接走 native 并产出与 VM 一致的输出。
24
+ - **AOT 支持 ASM/PL/BIN 输入**:`--build-exe` 不再只接受 `.cin`;汇编器/
25
+ `crom.load_bin` 装载的指令流同样可走 native 或 VM 后端并生成静态可执行文件。
26
+ - **AOT 增量构建缓存**:按源文件/import 闭包、目标平台、后端、优化级别、
27
+ 内存/步数以及 Python/Go 工具链指纹缓存产物;命中时跳过 `go build`,
28
+ `--no-build-cache` 可禁用,`CODECIN_AOT_CACHE` 可指定缓存目录。
29
+ 对象/归档链接同样按输入对象内容与链接选项缓存。
30
+ - **AOT 调试构建**:`--build-debug` 跳过 `-s -w`,保留 Go 符号表/DWARF,
31
+ 产物仍为独立静态可执行文件。
32
+ - **独立编译/链接 (CIN/ASM/PL)**:`--emit-object` 生成可重定位 `.co` 对象
33
+ (保留未解析标签、代码/数据符号、内存段),`--link` 合并多个对象、
34
+ 分配代码/数据基址并解析跨对象符号;链接结果可直接走 native/VM AOT,
35
+ 并支持链接期 `--optimize 0-3`。重定位覆盖 `NAME±N` 与
36
+ `DW/DD/DQ label` 数据指针。CIN 新增 `extern function` / `extern` 全局
37
+ 声明:无 `main` 的 CIN 文件可作为函数库对象参与链接,库内字符串/标量
38
+ 全局/struct 指针槽会按对象数据基址重定位。
39
+ - **`.colib` 静态库归档**:`--emit-archive` 把多个对象打包,`--link`
40
+ 按未定义符号只拉取需要的归档成员 (C 风格静态库语义)。
41
+ - **源文件直接链接**:`--link` 可直接接受 `.cin/.asm/.pl`,即时编译为
42
+ 对象后链接,省去显式 `--emit-object` 步骤。
43
+ - **链接期代码段 GC**:`--gc-sections` 从入口做保守控制流可达性分析,
44
+ 删除未调用的函数/桩;遇到动态 CALL/JMP 或代码指针时自动放弃以避免误删。
45
+ - **真实可用的 `--optimize 0-3`**:新增 IR 优化器(窥孔、常量折叠、不可达
46
+ 代码删除),同时作用于 VM 执行路径、`--compile` 与 native AOT;
47
+ 标签/入口在删除指令后自动重映射。
48
+ - 新增 `NativeRuntime`(Go 引擎侧)与 `native_codegen`/`optimizer`(Python
49
+ 侧),并补充 native AOT、优化器、交叉编译测试。
50
+
51
+ ### 修复 (Fixed)
52
+
53
+ - native 后端 `ASR rd, rn, shift` 三操作数形式被误当成两操作数 Base 形式,
54
+ 导致算术右移与复合赋值结果错误。
55
+
56
+ ---
57
+
58
+ ## [5.9.0] - 2026-10-05
59
+
60
+ 一次「单引擎 + 大内存 + 系统能力」的架构发布:**纯 Python 解释器与 JIT
61
+ 被移除**,全部程序统一由 Go 原生引擎执行;内存默认从 64 KB 提升到
62
+ **1 GiB(稀疏分页, 按需提交)**;新增 **FFI 动态库调用**与**完整网络**
63
+ (HTTP 扩展 / TCP / UDP / DNS)系统调用。持久化格式升级为段式
64
+ (CROM v4 / BIN v3),只保存实际使用的内存页。
65
+
66
+ ### 变更 (Changed)
67
+
68
+ #### 删除 Python 解释器与 JIT (native-only)
69
+ - **`jit.py` / `debugger.py` / `cache.py` 整体删除**,`CPU` 重构为
70
+ native-only 执行编排:编译/装载 (.cin/.asm/.pl/.bin/.crom) + 结果回传。
71
+ 动态库缺失时抛 `CPUSimulatorError` 并附重建指引(不再有解释器回退)。
72
+ - 引擎 ABI 升级为 **v2**(`codecin_run_v2`):一次调用回传寄存器/向量/
73
+ NZCV/脏内存段/输出,Python 侧无逐条解释开销。
74
+ - 相关 CLI 选项与配置项(`use_native` / JIT 统计 / 调试器等)随之移除,
75
+ `--stats` 只保留原生引擎数据。
76
+ - 新 ABI 下原生库版本不匹配(缺 `codecin_run_v2` 导出)会被识别并提示
77
+ 重建,而非静默失败。
78
+
79
+ #### 内存默认 64 KB -> 1 GiB (动态分配)
80
+ - **逻辑 1 GiB, 4 KiB 稀疏分页**:Python 侧 `FastMemory` 重写为按需分配页
81
+ 的稀疏字典,`resident_bytes` 只统计已触碰页——1 GiB 地址空间常驻内存
82
+ 只有实际写入的几 KB。
83
+ - Go 引擎侧配合 `make([]byte, memSize)`(OS 懒提交)+ **脏页位图**:执行
84
+ 结束只回传被写过的 4 KiB 页(段式),整程序执行后写回稀疏内存。
85
+ - 大数组/大缓冲不再需要 `--mem-size`:默认即可 `int a[1000000]`。
86
+
87
+ #### 持久化格式: 段式 CROM v4 / BIN v3
88
+ - CROM v4(16 B 头 + zlib 可选压缩段表)与 BIN v3(50 B 头 + 段表 +
89
+ bytecode)只保存已分配页;`.pytest_tmp` 内 1 GiB 镜像实测仅数 KB。
90
+ - 旧 BIN v2(34 B 头)仍可读;反汇编器(`disasm.py`)同步支持两种头。
91
+
92
+ ### 新增 (Added)
93
+
94
+ #### FFI: 动态库调用 (SYS 140-144)
95
+ - `ffi_load(path)` / `ffi_find(handle, symbol)` / `ffi_call(fn, argbuf, n)` /
96
+ `ffi_callf(fn, argbuf, n)` / `lib_close(handle)`:Windows
97
+ (LoadLibrary/GetProcAddress) 与 Unix (dlopen/dlsym) 双实现,最多 8 个
98
+ int64/IEEE754 位参数(浮点经 Windows x64 XMM0-3 / SysV XMM0-7 正确传参)。
99
+ - 标准库 `lib/ffi.cin`:`ffi_call0..ffi_call8` / `ffi_callf1..ffi_callf4`
100
+ 便捷封装(局部数组作参数缓冲)。
101
+ - 无效句柄/参数越界报明确错误信息;`dlopen`/`dlsym` 失败返回 0 不抛异常。
102
+
103
+ #### 网络: HTTP 扩展 / TCP / UDP / DNS (SYS 145-157)
104
+ - **HTTP**:`http_req(method, url, headers, body)`(自定义方法与
105
+ `Key: Value\n` 头)+ `http_code()` 状态码查询;既有 `http_get`/`http_post`
106
+ 同样记录状态码。15 s 超时,响应体上限 8 MiB。
107
+ - **TCP**:`tcp_dial` / `tcp_send` / `tcp_recv` / `tcp_close` /
108
+ `tcp_listen` / `tcp_accept`(10 s 连接超时;收发上限 4/8 MiB)。
109
+ - **UDP**:`udp_open` / `udp_sendto` / `udp_recvfrom`(源地址回填
110
+ "ip:port")/ `udp_close`。
111
+ - **DNS**:`dns_lookup(host)` 返回 IP 字符串(偏好 IPv4 —— Windows 下
112
+ `localhost` 常先返回 ::1,对端只听 IPv4 时不再丢包)。
113
+ - 主机名参数统一支持(`tcp_dial("example.com", 80)`、
114
+ `udp_sendto(fd, "localhost", ...)`)。
115
+ - 标准库 `lib/net.cin`:字符串收发(`tcp_send_str`/`tcp_recv_line`/
116
+ `udp_send_str` 等)、`http_get_headers`/`http_post_headers`/`http_ok`、
117
+ `tcp_roundtrip`/`tcp_server`、`dns_resolve`/`dns_ok`。
118
+
119
+ ### 修复 (Fixed)
120
+ - **`http_get`/`http_post` 不记录状态码**:`http_code()` 此前对这两个内建
121
+ 恒返回 0(只有 `http_req` 更新 `lastHTTPSt`),现在三者语义一致。
122
+ - **FFI 浮点传参走错寄存器**:C 桥此前把函数指针声明为整型参数,Windows
123
+ x64/SysV 下目标函数从 XMM 读到垃圾——`ffi_callf2(pow, 3.0, 4.0)` 实际算出
124
+ `pow(x, 0) = 1`。现按 double 类型传参(位模式经 memcpy 保持不变)。
125
+ - `udp_sendto` 主机名解析只取第一个地址(可能为 IPv6),现偏好 IPv4。
126
+
127
+ ### 移除 (Removed)
128
+ - `codecin/jit.py`、`codecin/debugger.py`、`codecin/cache.py` 及对应测试
129
+ (9 个废弃测试文件删除;`use_native` 参数化全部收敛为单路径)。
130
+ - `PageFaultError`(并入 `MemoryAccessError`)。
131
+ - 沙箱语义不变:`--sandbox` 下仅放行 ALLOCFRAME/TIMEUS/TIMENS,
132
+ 其余宿主 SYS(网络/FFI/音频/画布等)报
133
+ `Host capability disabled in sandbox mode`。
134
+
135
+ ---
136
+
8
137
  ## [5.8.2] - 2026-10-04
9
138
 
10
139
  一次以「真实压测程序暴露的错误信息与栈安全」为主线的修复发布。核心结论: