codecin 6.4.0__tar.gz → 7.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 (297) hide show
  1. {codecin-6.4.0 → codecin-7.0.0}/CHANGELOG.md +161 -0
  2. {codecin-6.4.0 → codecin-7.0.0}/MANIFEST.in +1 -1
  3. {codecin-6.4.0/codecin.egg-info → codecin-7.0.0}/PKG-INFO +34 -13
  4. {codecin-6.4.0 → codecin-7.0.0}/README.md +33 -12
  5. {codecin-6.4.0 → codecin-7.0.0}/codecin/__init__.py +1 -1
  6. {codecin-6.4.0 → codecin-7.0.0}/codecin/aot.py +35 -17
  7. codecin-7.0.0/codecin/cbackend.py +2287 -0
  8. {codecin-6.4.0 → codecin-7.0.0}/codecin/cin.py +29 -4
  9. {codecin-6.4.0 → codecin-7.0.0}/codecin/cli.py +20 -10
  10. {codecin-6.4.0 → codecin-7.0.0}/codecin/config.py +4 -3
  11. {codecin-6.4.0 → codecin-7.0.0}/codecin/cpu.py +3 -2
  12. {codecin-6.4.0 → codecin-7.0.0}/codecin/crom.py +37 -14
  13. {codecin-6.4.0 → codecin-7.0.0}/codecin/cvm.py +111 -42
  14. {codecin-6.4.0 → codecin-7.0.0}/codecin/disasm.py +4 -0
  15. codecin-7.0.0/codecin/lib/array/pic.toml +10 -0
  16. codecin-7.0.0/codecin/lib/bigint/pic.toml +10 -0
  17. codecin-7.0.0/codecin/lib/bits/pic.toml +10 -0
  18. codecin-7.0.0/codecin/lib/bitset/pic.toml +10 -0
  19. codecin-7.0.0/codecin/lib/codec/pic.toml +10 -0
  20. codecin-7.0.0/codecin/lib/combin/pic.toml +10 -0
  21. codecin-7.0.0/codecin/lib/conv/pic.toml +10 -0
  22. codecin-7.0.0/codecin/lib/cppstd/pic.toml +10 -0
  23. codecin-7.0.0/codecin/lib/cstd/pic.toml +10 -0
  24. codecin-7.0.0/codecin/lib/csv/pic.toml +10 -0
  25. codecin-7.0.0/codecin/lib/dp/pic.toml +10 -0
  26. codecin-7.0.0/codecin/lib/ffi/pic.toml +10 -0
  27. codecin-7.0.0/codecin/lib/fmt/pic.toml +10 -0
  28. codecin-7.0.0/codecin/lib/frac/pic.toml +10 -0
  29. codecin-7.0.0/codecin/lib/gostd/pic.toml +10 -0
  30. codecin-7.0.0/codecin/lib/graph/pic.toml +10 -0
  31. codecin-7.0.0/codecin/lib/gui/pic.toml +10 -0
  32. codecin-7.0.0/codecin/lib/hash/pic.toml +10 -0
  33. codecin-7.0.0/codecin/lib/heap/pic.toml +10 -0
  34. codecin-7.0.0/codecin/lib/io/pic.toml +10 -0
  35. codecin-7.0.0/codecin/lib/json/pic.toml +10 -0
  36. codecin-7.0.0/codecin/lib/key/pic.toml +10 -0
  37. codecin-7.0.0/codecin/lib/math/pic.toml +10 -0
  38. codecin-7.0.0/codecin/lib/matrix/pic.toml +10 -0
  39. codecin-7.0.0/codecin/lib/net/pic.toml +10 -0
  40. codecin-7.0.0/codecin/lib/path/pic.toml +10 -0
  41. codecin-7.0.0/codecin/lib/queue/pic.toml +10 -0
  42. codecin-7.0.0/codecin/lib/rand/pic.toml +10 -0
  43. codecin-7.0.0/codecin/lib/set/pic.toml +10 -0
  44. codecin-7.0.0/codecin/lib/sort/pic.toml +10 -0
  45. codecin-7.0.0/codecin/lib/stat/pic.toml +10 -0
  46. codecin-7.0.0/codecin/lib/str/pic.toml +10 -0
  47. codecin-7.0.0/codecin/lib/termux/pic.toml +10 -0
  48. codecin-7.0.0/codecin/lib/test/pic.toml +10 -0
  49. codecin-7.0.0/codecin/lib/text/pic.toml +10 -0
  50. codecin-7.0.0/codecin/lib/time/pic.toml +10 -0
  51. codecin-7.0.0/codecin/lib/token/pic.toml +10 -0
  52. codecin-7.0.0/codecin/lib/tree/pic.toml +10 -0
  53. codecin-7.0.0/codecin/lib/unionfind/pic.toml +10 -0
  54. codecin-7.0.0/codecin/lib/validate/pic.toml +10 -0
  55. codecin-7.0.0/codecin/lib/vec/pic.toml +10 -0
  56. {codecin-6.4.0 → codecin-7.0.0}/codecin/mkn.py +44 -7
  57. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/version_gen.go +1 -1
  58. {codecin-6.4.0 → codecin-7.0.0}/codecin/native.py +5 -1
  59. {codecin-6.4.0 → codecin-7.0.0}/codecin/native_codegen.py +1 -1
  60. {codecin-6.4.0 → codecin-7.0.0}/codecin/packaging/vcs.py +11 -2
  61. codecin-7.0.0/codecin/sdgcc.py +394 -0
  62. {codecin-6.4.0 → codecin-7.0.0}/codecin/stdlib.py +20 -4
  63. codecin-7.0.0/codecin/toolchain.py +392 -0
  64. {codecin-6.4.0 → codecin-7.0.0/codecin.egg-info}/PKG-INFO +34 -13
  65. {codecin-6.4.0 → codecin-7.0.0}/codecin.egg-info/SOURCES.txt +89 -41
  66. {codecin-6.4.0 → codecin-7.0.0}/pyproject.toml +1 -1
  67. codecin-7.0.0/script/sync_stdlib_packages.py +194 -0
  68. {codecin-6.4.0 → codecin-7.0.0}/setup.py +41 -4
  69. {codecin-6.4.0 → codecin-7.0.0}/tests/test_all_libs_together.py +5 -3
  70. codecin-7.0.0/tests/test_cbackend.py +978 -0
  71. {codecin-6.4.0 → codecin-7.0.0}/tests/test_cli.py +15 -5
  72. {codecin-6.4.0 → codecin-7.0.0}/tests/test_libs.py +1 -1
  73. {codecin-6.4.0 → codecin-7.0.0}/tests/test_packaging.py +17 -1
  74. codecin-7.0.0/tests/test_sdgcc.py +187 -0
  75. codecin-7.0.0/tests/test_toolchain.py +104 -0
  76. {codecin-6.4.0 → codecin-7.0.0}/tests/test_v620_cvm.py +3 -1
  77. {codecin-6.4.0 → codecin-7.0.0}/tests/test_v620_mkn.py +1 -1
  78. {codecin-6.4.0 → codecin-7.0.0}/LICENSE +0 -0
  79. {codecin-6.4.0 → codecin-7.0.0}/codecin/assembler.py +0 -0
  80. {codecin-6.4.0 → codecin-7.0.0}/codecin/console.py +0 -0
  81. {codecin-6.4.0 → codecin-7.0.0}/codecin/environment.py +0 -0
  82. {codecin-6.4.0 → codecin-7.0.0}/codecin/errors.py +0 -0
  83. {codecin-6.4.0 → codecin-7.0.0}/codecin/isa.py +0 -0
  84. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/array/src}/array.cin +0 -0
  85. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/bigint/src}/bigint.cin +0 -0
  86. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/bits/src}/bits.cin +0 -0
  87. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/bitset/src}/bitset.cin +0 -0
  88. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/codec/src}/codec.cin +0 -0
  89. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/combin/src}/combin.cin +0 -0
  90. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/conv/src}/conv.cin +0 -0
  91. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/cppstd/src}/cppstd.cin +0 -0
  92. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/cstd/src}/cstd.cin +0 -0
  93. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/csv/src}/csv.cin +0 -0
  94. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/dp/src}/dp.cin +0 -0
  95. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/ffi/src}/ffi.cin +0 -0
  96. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/fmt/src}/fmt.cin +0 -0
  97. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/frac/src}/frac.cin +0 -0
  98. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/gostd/src}/gostd.cin +0 -0
  99. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/graph/src}/graph.cin +0 -0
  100. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/gui/src}/gui.cin +0 -0
  101. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/hash/src}/hash.cin +0 -0
  102. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/heap/src}/heap.cin +0 -0
  103. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/io/src}/io.cin +0 -0
  104. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/json/src}/json.cin +0 -0
  105. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/key/src}/key.cin +0 -0
  106. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/math/src}/math.cin +0 -0
  107. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/matrix/src}/matrix.cin +0 -0
  108. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/net/src}/net.cin +0 -0
  109. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/path/src}/path.cin +0 -0
  110. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/queue/src}/queue.cin +0 -0
  111. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/rand/src}/rand.cin +0 -0
  112. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/set/src}/set.cin +0 -0
  113. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/sort/src}/sort.cin +0 -0
  114. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/stat/src}/stat.cin +0 -0
  115. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/str/src}/str.cin +0 -0
  116. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/termux/src}/termux.cin +0 -0
  117. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/test/src}/test.cin +0 -0
  118. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/text/src}/text.cin +0 -0
  119. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/time/src}/time.cin +0 -0
  120. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/token/src}/token.cin +0 -0
  121. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/tree/src}/tree.cin +0 -0
  122. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/unionfind/src}/unionfind.cin +0 -0
  123. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/validate/src}/validate.cin +0 -0
  124. {codecin-6.4.0/codecin/lib → codecin-7.0.0/codecin/lib/vec/src}/vec.cin +0 -0
  125. {codecin-6.4.0 → codecin-7.0.0}/codecin/logger.py +0 -0
  126. {codecin-6.4.0 → codecin-7.0.0}/codecin/memory.py +0 -0
  127. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/aot/aot.go +0 -0
  128. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/aot/stub_main.go.txt +0 -0
  129. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/build.ps1 +0 -0
  130. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/build.sh +0 -0
  131. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/compiler/codegen.go +0 -0
  132. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/compiler/compile_test.go +0 -0
  133. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/compiler/parser.go +0 -0
  134. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/compiler/syscalls.go +0 -0
  135. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/compiler/tokenizer.go +0 -0
  136. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/compiler/types.go +0 -0
  137. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/args.go +0 -0
  138. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/audio.go +0 -0
  139. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/audio_other.go +0 -0
  140. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/audio_test.go +0 -0
  141. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/audio_windows.go +0 -0
  142. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/canvas.go +0 -0
  143. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/console_other.go +0 -0
  144. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/console_windows.go +0 -0
  145. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/crom.go +0 -0
  146. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/encode.go +0 -0
  147. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/engine_test.go +0 -0
  148. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/ffi_nocgo.go +0 -0
  149. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/ffi_registry.go +0 -0
  150. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/ffi_unix.go +0 -0
  151. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/ffi_windows.go +0 -0
  152. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/gui.go +0 -0
  153. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/gui_stub.go +0 -0
  154. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/gui_test.go +0 -0
  155. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/gui_windows.go +0 -0
  156. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/gui_x11.go +0 -0
  157. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/host_test.go +0 -0
  158. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/hostcrypto.go +0 -0
  159. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/hostdesktop.go +0 -0
  160. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/hostnet.go +0 -0
  161. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/isa_gen.go +0 -0
  162. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/keyboard.go +0 -0
  163. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/keyboard_other.go +0 -0
  164. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/keyboard_stub.go +0 -0
  165. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/keyboard_termios_darwin.go +0 -0
  166. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/keyboard_termios_linux.go +0 -0
  167. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/keyboard_test.go +0 -0
  168. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/keyboard_windows.go +0 -0
  169. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/keyboard_windows_test.go +0 -0
  170. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/lineedit.go +0 -0
  171. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/lineedit_test.go +0 -0
  172. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/lineint_unix.go +0 -0
  173. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/lineint_windows.go +0 -0
  174. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/mem_other.go +0 -0
  175. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/mem_windows.go +0 -0
  176. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/native.go +0 -0
  177. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/netsock.go +0 -0
  178. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/ops_ext.go +0 -0
  179. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/stdin.go +0 -0
  180. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/stdin_other.go +0 -0
  181. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/stdin_windows.go +0 -0
  182. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/system.go +0 -0
  183. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/termux.go +0 -0
  184. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/vkb_darwin.go +0 -0
  185. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/vkb_linux.go +0 -0
  186. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/vkb_stub.go +0 -0
  187. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/engine/vm.go +0 -0
  188. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/go.mod +0 -0
  189. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/ir/ir.go +0 -0
  190. {codecin-6.4.0 → codecin-7.0.0}/codecin/native/main.go +0 -0
  191. {codecin-6.4.0 → codecin-7.0.0}/codecin/object.py +0 -0
  192. {codecin-6.4.0 → codecin-7.0.0}/codecin/optimizer.py +0 -0
  193. {codecin-6.4.0 → codecin-7.0.0}/codecin/packaging/__init__.py +0 -0
  194. {codecin-6.4.0 → codecin-7.0.0}/codecin/packaging/archive.py +0 -0
  195. {codecin-6.4.0 → codecin-7.0.0}/codecin/packaging/model.py +0 -0
  196. {codecin-6.4.0 → codecin-7.0.0}/codecin/packaging/spec.py +0 -0
  197. {codecin-6.4.0 → codecin-7.0.0}/codecin/packaging/store.py +0 -0
  198. {codecin-6.4.0 → codecin-7.0.0}/codecin/packaging/toml.py +0 -0
  199. {codecin-6.4.0 → codecin-7.0.0}/codecin/pic.py +0 -0
  200. {codecin-6.4.0 → codecin-7.0.0}/codecin/pic_api.py +0 -0
  201. {codecin-6.4.0 → codecin-7.0.0}/codecin/pic_login.py +0 -0
  202. {codecin-6.4.0 → codecin-7.0.0}/codecin/pic_registry.py +0 -0
  203. {codecin-6.4.0 → codecin-7.0.0}/codecin/registers.py +0 -0
  204. {codecin-6.4.0 → codecin-7.0.0}/codecin/stats.py +0 -0
  205. {codecin-6.4.0 → codecin-7.0.0}/codecin/toolkit.py +0 -0
  206. {codecin-6.4.0 → codecin-7.0.0}/codecin/version.py +0 -0
  207. {codecin-6.4.0 → codecin-7.0.0}/codecin.egg-info/dependency_links.txt +0 -0
  208. {codecin-6.4.0 → codecin-7.0.0}/codecin.egg-info/entry_points.txt +0 -0
  209. {codecin-6.4.0 → codecin-7.0.0}/codecin.egg-info/requires.txt +0 -0
  210. {codecin-6.4.0 → codecin-7.0.0}/codecin.egg-info/top_level.txt +0 -0
  211. {codecin-6.4.0 → codecin-7.0.0}/examples/args_demo.cin +0 -0
  212. {codecin-6.4.0 → codecin-7.0.0}/examples/asm_constants.asm +0 -0
  213. {codecin-6.4.0 → codecin-7.0.0}/examples/bitwise_builtins.cin +0 -0
  214. {codecin-6.4.0 → codecin-7.0.0}/examples/control_flow.cin +0 -0
  215. {codecin-6.4.0 → codecin-7.0.0}/examples/enum_range_for.cin +0 -0
  216. {codecin-6.4.0 → codecin-7.0.0}/examples/gui_demo.cin +0 -0
  217. {codecin-6.4.0 → codecin-7.0.0}/examples/literals_types.cin +0 -0
  218. {codecin-6.4.0 → codecin-7.0.0}/examples/local_audio.cin +0 -0
  219. {codecin-6.4.0 → codecin-7.0.0}/examples/modules_demo.cin +0 -0
  220. {codecin-6.4.0 → codecin-7.0.0}/examples/stdlib_demo.cin +0 -0
  221. {codecin-6.4.0 → codecin-7.0.0}/examples/system_interaction.cin +0 -0
  222. {codecin-6.4.0 → codecin-7.0.0}/examples/terminal_cache_demo.cin +0 -0
  223. {codecin-6.4.0 → codecin-7.0.0}/misc/vim/ftdetect/codecin.vim +0 -0
  224. {codecin-6.4.0 → codecin-7.0.0}/misc/vim/syntax/cin.vim +0 -0
  225. {codecin-6.4.0 → codecin-7.0.0}/misc/vim/syntax/codecinasm.vim +0 -0
  226. {codecin-6.4.0 → codecin-7.0.0}/misc/vscode-cin/.vscodeignore +0 -0
  227. {codecin-6.4.0 → codecin-7.0.0}/misc/vscode-cin/README.md +0 -0
  228. {codecin-6.4.0 → codecin-7.0.0}/misc/vscode-cin/build.bat +0 -0
  229. {codecin-6.4.0 → codecin-7.0.0}/misc/vscode-cin/language-configuration.json +0 -0
  230. {codecin-6.4.0 → codecin-7.0.0}/misc/vscode-cin/package.json +0 -0
  231. {codecin-6.4.0 → codecin-7.0.0}/misc/vscode-cin/snippets/cin.json +0 -0
  232. {codecin-6.4.0 → codecin-7.0.0}/misc/vscode-cin/syntaxes/cin.tmLanguage.json +0 -0
  233. {codecin-6.4.0 → codecin-7.0.0}/script/bump_version.py +0 -0
  234. {codecin-6.4.0 → codecin-7.0.0}/script/check_paths.py +0 -0
  235. {codecin-6.4.0 → codecin-7.0.0}/script/gen_isa_docs.py +0 -0
  236. {codecin-6.4.0 → codecin-7.0.0}/script/gen_native_isa.py +0 -0
  237. {codecin-6.4.0 → codecin-7.0.0}/setup.cfg +0 -0
  238. {codecin-6.4.0 → codecin-7.0.0}/tests/test_aggregate_and_const.py +0 -0
  239. {codecin-6.4.0 → codecin-7.0.0}/tests/test_aot.py +0 -0
  240. {codecin-6.4.0 → codecin-7.0.0}/tests/test_assembler_ext.py +0 -0
  241. {codecin-6.4.0 → codecin-7.0.0}/tests/test_bin_compat.py +0 -0
  242. {codecin-6.4.0 → codecin-7.0.0}/tests/test_cin_host.py +0 -0
  243. {codecin-6.4.0 → codecin-7.0.0}/tests/test_cin_host_ext.py +0 -0
  244. {codecin-6.4.0 → codecin-7.0.0}/tests/test_cin_new_features.py +0 -0
  245. {codecin-6.4.0 → codecin-7.0.0}/tests/test_cin_syntax.py +0 -0
  246. {codecin-6.4.0 → codecin-7.0.0}/tests/test_cin_syntax_ext.py +0 -0
  247. {codecin-6.4.0 → codecin-7.0.0}/tests/test_cin_system.py +0 -0
  248. {codecin-6.4.0 → codecin-7.0.0}/tests/test_compiler_errors.py +0 -0
  249. {codecin-6.4.0 → codecin-7.0.0}/tests/test_environment.py +0 -0
  250. {codecin-6.4.0 → codecin-7.0.0}/tests/test_examples.py +0 -0
  251. {codecin-6.4.0 → codecin-7.0.0}/tests/test_features_ab.py +0 -0
  252. {codecin-6.4.0 → codecin-7.0.0}/tests/test_features_import.py +0 -0
  253. {codecin-6.4.0 → codecin-7.0.0}/tests/test_features_importloc.py +0 -0
  254. {codecin-6.4.0 → codecin-7.0.0}/tests/test_ffi_net.py +0 -0
  255. {codecin-6.4.0 → codecin-7.0.0}/tests/test_gui.py +0 -0
  256. {codecin-6.4.0 → codecin-7.0.0}/tests/test_index_subscript_type.py +0 -0
  257. {codecin-6.4.0 → codecin-7.0.0}/tests/test_isa_single_source.py +0 -0
  258. {codecin-6.4.0 → codecin-7.0.0}/tests/test_issue_regress.py +0 -0
  259. {codecin-6.4.0 → codecin-7.0.0}/tests/test_keyboard.py +0 -0
  260. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_bigint.py +0 -0
  261. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_bitset.py +0 -0
  262. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_codec.py +0 -0
  263. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_combin.py +0 -0
  264. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_compat.py +0 -0
  265. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_csv.py +0 -0
  266. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_dp.py +0 -0
  267. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_fmt.py +0 -0
  268. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_frac.py +0 -0
  269. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_graph.py +0 -0
  270. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_heap.py +0 -0
  271. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_path.py +0 -0
  272. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_set.py +0 -0
  273. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_text.py +0 -0
  274. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_token.py +0 -0
  275. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_tree.py +0 -0
  276. {codecin-6.4.0 → codecin-7.0.0}/tests/test_lib_unionfind.py +0 -0
  277. {codecin-6.4.0 → codecin-7.0.0}/tests/test_libs_ext.py +0 -0
  278. {codecin-6.4.0 → codecin-7.0.0}/tests/test_literals_and_bom.py +0 -0
  279. {codecin-6.4.0 → codecin-7.0.0}/tests/test_native_codegen.py +0 -0
  280. {codecin-6.4.0 → codecin-7.0.0}/tests/test_native_hardening.py +0 -0
  281. {codecin-6.4.0 → codecin-7.0.0}/tests/test_native_lib_lookup.py +0 -0
  282. {codecin-6.4.0 → codecin-7.0.0}/tests/test_nested_subscript_codegen.py +0 -0
  283. {codecin-6.4.0 → codecin-7.0.0}/tests/test_no_go_cli.py +0 -0
  284. {codecin-6.4.0 → codecin-7.0.0}/tests/test_object_link.py +0 -0
  285. {codecin-6.4.0 → codecin-7.0.0}/tests/test_p0_fixes.py +0 -0
  286. {codecin-6.4.0 → codecin-7.0.0}/tests/test_paths_consistency.py +0 -0
  287. {codecin-6.4.0 → codecin-7.0.0}/tests/test_sparse_memory.py +0 -0
  288. {codecin-6.4.0 → codecin-7.0.0}/tests/test_struct_value_semantics.py +0 -0
  289. {codecin-6.4.0 → codecin-7.0.0}/tests/test_switch_semantics.py +0 -0
  290. {codecin-6.4.0 → codecin-7.0.0}/tests/test_v620_import.py +0 -0
  291. {codecin-6.4.0 → codecin-7.0.0}/tests/test_v620_packaging.py +0 -0
  292. {codecin-6.4.0 → codecin-7.0.0}/tests/test_v620_pic.py +0 -0
  293. {codecin-6.4.0 → codecin-7.0.0}/tests/test_v620_pic_git.py +0 -0
  294. {codecin-6.4.0 → codecin-7.0.0}/tests/test_v620_pic_registry.py +0 -0
  295. {codecin-6.4.0 → codecin-7.0.0}/tests/test_v640_pic_import.py +0 -0
  296. {codecin-6.4.0 → codecin-7.0.0}/tests/test_version.py +0 -0
  297. {codecin-6.4.0 → codecin-7.0.0}/tests/test_workflows.py +0 -0
@@ -5,6 +5,167 @@
5
5
 
6
6
  ---
7
7
 
8
+ ## [7.0.0] - 2026-11-01
9
+
10
+ 一次以「编译产物格式统一 + AOT 去 Go 化」为主题的大版本:默认产物从 `.bin`
11
+ 切换为可自描述的 `.sdgcc`(内部 `CODE` 段仍与 BIN v3 逐字节一致),`cvm`
12
+ 改为读取 `mkn.toml` 驱动多文件编译,AOT 新增纯 C 后端(GCC/Clang/Zig),
13
+ 不再依赖 Go 工具链即可产出 Windows PE 与 Linux ELF(x86-64 / AArch64)。
14
+
15
+ ### 新增 (Added)
16
+
17
+ - **`.sdgcc` 编译产物容器**(`codecin/sdgcc.py`):28 字节头 + 24 字节/段的
18
+ 定长段表,`CODE` 段逐字节保存 BIN v3,另附 `META`(TOML)、`SYMS`(标签)、
19
+ `SRCS`(源码清单)。`CODE` 与旧 `.bin` 完全同构,旧读取器可直接消费。
20
+ - **单文件 / 多文件模式**:容器内记录 `mode` 与源码清单;`cvm build` 对 mkn
21
+ 项目默认**多文件**(入口 + `import` 闭包),`--single` 切换单文件模式。
22
+ - `cvm` 模块(CVM format 2)改为 `code/program.sdgcc` 成员,仍可读取旧
23
+ `code/program.bin`(format 1);`cvm build` 接受 `.sdgcc` / `.bin` 混合输入,
24
+ 旧 `.bin` 输入会被原样封装。
25
+ - **AOT 工具链层**(`codecin/toolchain.py`):为去除 Go 依赖后的 C 后端提供
26
+ 编译器发现与交叉编译支持——三个目标(`x86_64-windows` / `x86_64-linux` /
27
+ `aarch64-linux`)、`CODECIN_CC_<TARGET>` 覆盖、自带工具链目录、
28
+ `-dumpmachine` 目标校验,以及 `python -m codecin.toolchain install` 从镜像
29
+ 下载/校验/解包(含路径穿越防护)。
30
+ - **AOT C 后端**(`codecin/cbackend.py`):把 UCBC 指令逐条展开成 C(寄存器
31
+ 数组 + 显式 NZCV + 扁平内存 + 栈/call-ret),由 GCC/Clang 生成机器码;
32
+ 不再经过 Go。已覆盖整数运算、比较跳转、`B`/`CBZ` 条件分支、内存读写、
33
+ `PUSH/POP/CALL/RET`、`OUT` 与核心 syscall(ALLOCFRAME/TIME/RAND/MALLOC/
34
+ ITOA/FTOA/PRINT_STR/ABORT 等),未实现指令在运行期以明确信息退出(码 1)。
35
+ 与 VM 对同一 CIN 程序的输出已做逐字节比对。
36
+ - **C 后端 syscall 覆盖 0-38**:浮点数学(`sqrt/pow/sin/cos/tan/FADD…/FCMP/
37
+ FTOI/ITOF`)、整数/字符串(`abs/strlen/strcmp/strcpy/strcat/malloc/itoa/
38
+ ftoa/str_concat/bool_str/substr/indexof/upper/lower/trim/ltrim/rtrim/atoi`)
39
+ 与 `floor/ceil/round`、`time/rand/srand`、`abort`,全部按 VM 语义实现
40
+ (含 `malloc` 16 字节对齐、`itoa` 有符号、`strcmp` 字节差、`substr` 越界裁剪)。
41
+ - **C 后端文件 I/O(SYS 51-57)**:`file_read/file_write/file_append/
42
+ file_exists/file_delete/file_size/mkdir`,返回值与 VM 对齐(失败 -1、
43
+ `file_read` 失败返回空串、`mkdir` 递归建目录),并与 VM 做了同一程序
44
+ 的输出对拍。
45
+ - **C 后端系统层(SYS 58/61-67)**:`dirlist`(有序、目录带 `/`)、
46
+ `getenv/setenv`、`osname/hostname/username/cwd/homedir`;Windows 的
47
+ `username` 与 Go `user.Current()` 对齐为 `DOMAIN\user`。
48
+ - **C 后端网络(SYS 147-150/157)**:`tcp_dial/tcp_send/tcp_recv/tcp_close`
49
+ 与 `dns_lookup`,Windows 走 Winsock(`-lws2_32`)、POSIX 走 BSD socket;
50
+ 与 VM 在本地 echo 服务器上做了同程序对拍(收发字节数、退出码一致)。
51
+ - **C 后端 HTTP(SYS 97/98/145/146)**:`http_get`/`http_post`/`http_req` 与
52
+ `http_code`;URL 解析(host/port/path)、`Connection: close` 读尽响应、
53
+ 8 MiB 上限、状态码记录,GET 与 POST 均与 VM 在本地 HTTP 服务上对拍。
54
+ - **C 后端 TCP 服务端(SYS 151/152)**:`tcp_listen/tcp_accept`,与
55
+ `tcp_recv/tcp_send/tcp_close` 组合可让 AOT 产物直接对外提供 TCP 服务;
56
+ 已用 Python 客户端对 VM 与 AOT 两个版本做同一协议对拍。
57
+ - **C 后端 UDP(SYS 153-156)**:`udp_open/udp_sendto/udp_recvfrom/
58
+ udp_close`(可选 `ip:port` 回填),与 VM 在本地 UDP echo 对端上完成
59
+ 收发字节数对拍。
60
+ - **C 后端 Base64(SYS 101/102)**:`base64_encode/base64_decode`
61
+ (标准字母表、`=` 填充、解码忽略空白与非法字符),与 VM 对拍一致。
62
+ - **C 后端 SHA-256(SYS 100)**:`sha256` 返回小写十六进制摘要(自实现
63
+ 压缩函数,无第三方依赖),`"abc"` 与空串摘要均与 VM 一致。
64
+ - **C 后端画布(SYS 43-46/48/49)**:`canvas/set_color/fill_rect/
65
+ fill_circle/draw_line/save_png`,白底 RGBA8、坐标裁剪、Bresenham 直线,
66
+ PNG 用 zlib stored 块 + CRC32 手写输出;用例解码像素后校验红块/蓝圆/
67
+ 绿线与白底,并与 VM 产物尺寸对齐。
68
+ - **C 后端 `download`(SYS 99)**:GET → 仅 2xx 落盘(非 2xx 或网络错误
69
+ 返回 -1),与 VM 的 0/-1 语义一致,并有用例校验落盘内容。
70
+ - **C 后端 `show_canvas`(SYS 50)**:无窗口环境下明确返回 `-1`(不静默成功、
71
+ 也不崩溃),画布内容仍可 `save_png` 落盘。
72
+ - **C 后端路径/环境补充(SYS 87/89/90)**:`is_dir`、`temp_dir`、`chdir`
73
+ (Windows 走 `_chdir`),与 VM 输出对拍一致。
74
+ - **C 后端 `dir_remove`(SYS 86)**:递归删除(`rm -rf` 语义),与 VM 对拍
75
+ 一致,用例额外断言目录确实不存在。
76
+ - **C 后端 `file_copy`/`file_move`/`file_mtime`(SYS 84/85/88)**:复制、
77
+ 重命名(跨盘回退为复制+删除)、mtime(unix 秒,失败 -1),与 VM 对拍一致。
78
+ - **C 后端 `path_join`/`path_basename`/`path_dirname`(SYS 80-82)**:
79
+ 按平台分隔符归一化(Windows `\`,POSIX `/`)、折叠重复分隔符,与
80
+ `filepath.Join/Base/Dir` 输出一致。
81
+ - **C 后端 `path_abs`(SYS 83)**:Windows 用 `_fullpath`、POSIX 用
82
+ `realpath`(失败回退 `getcwd + 拼接`),输出与 `filepath.Abs` 一致。
83
+ - **C 后端不支持项提示更精确**:`supports()` 报错从「未实现的 SYS 47」升级为
84
+ 「未实现的 SYS 47 (CANVASTEXT)」,`auto` 回退/`c` 报错时可直接看出缺什么。
85
+ 对应端到端用例改为用 `draw_text` 触发,验证报错含 syscall 名。
86
+ - **C 后端时间/平台信息(SYS 91-94)**:`time_ms`(单调时钟)、
87
+ `sleep_ms`(上限 600s)、`cpu_count`、`arch_name`(amd64/arm64/x86),
88
+ 与 VM 语义一致,并有用例验证计时单调与休眠生效。
89
+ - **C 后端 `mem_info`/`is_android`(SYS 95/96)**:`mem_info` 输出
90
+ `{"total_kb":N,"free_kb":M}`(Windows `GlobalMemoryStatusEx`、Linux 解析
91
+ `/proc/meminfo`);`is_android` 以 `/system/build.prop` 判定。
92
+ - **C 后端交叉编译打通(Zig 兜底)**:`toolchain.find_zig()` 自动发现
93
+ `~/.codecin/zig/**/zig` 或 `CODECIN_ZIG`,在缺少目标 GCC 时改用
94
+ `zig cc -target <triple>`(自带 libc,无需 sysroot)。已实测同一份指令流
95
+ 交叉编译为 `x86_64-linux`(ELF e_machine 0x3E)与 `aarch64-linux`
96
+ (0xB7),并加入自动跳过式用例 `test_cross_compile_elf_targets`。
97
+ - **测试稳定性**:网络用例改用 `ThreadingTCPServer` + `daemon_threads`
98
+ 并在 `finally` 里 `server_close()`;TCP 服务端用例改为按需重新分配端口
99
+ 重试;`tcp_echo` 的对端在 accept 超时后直接退出。`tests/test_cbackend.py`
100
+ 全量从偶发挂起恢复到 ~78s 稳定通过。
101
+
102
+ ### 变更 (Changed)
103
+
104
+ - **AOT 默认走 C 后端**:`--build-backend auto` 在指令流可被 C 后端完整翻译时
105
+ 使用「C → GCC/Clang」管线(不再经过 Go),遇到未覆盖的指令/syscall 才回退
106
+ 旧的 Go 后端;新增 `--build-backend c` 可强制 C 后端(不支持时直接报出
107
+ 具体指令/SYS 号,不静默换后端)。`--build-target windows/amd64`、
108
+ `linux/amd64`、`linux/arm64` 映射到 `x86_64-windows` / `x86_64-linux` /
109
+ `aarch64-linux`;AOT 输入新增 `.sdgcc`。
110
+ - `mkn build` / `codecin --compile-only` 默认产物由 `.bin` 改为 `.sdgcc`;
111
+ 显式 `-o *.bin` 仍产出旧格式,`.bin` 作为**兼容输入**继续受支持。
112
+ - `crom.dump_bin()` 抽出序列化逻辑供容器复用,`cvm` 单文件编译不再落临时
113
+ `.bin`;`cvm build` 读取 `mkn.toml` 的 `[build] optimize/mem_size` 与
114
+ `entry`,产物元数据随之记录。
115
+ - **弃用 `--max-instructions`,默认不限制指令数**:`Config.max_instructions`
116
+ 默认改为 `0`(0 = 不限),`aot`/`native_codegen` 的步数上限默认同步改为
117
+ 0(引擎侧 `maxSteps <= 0` 即不限);`codecin`/`cvm` 的帮助中不再展示该
118
+ 参数(保留为隐藏参数以兼容旧脚本)。死循环请用 `Ctrl+C` 中断。
119
+
120
+ ### 修复 (Fixed)
121
+
122
+ - **安装提示仍在承诺纯 Python 回退**:`setup.py` 在 PATH 缺 `go` 时输出
123
+ 「本次安装回退纯 Python 解释执行」,而 v5.9.0 起解释器与 JIT 已整体删除,
124
+ 缺少 `codecin-native` 时程序根本无法执行。现改为说明真实后果与两条修复路径
125
+ (安装 Go 后重装 / 从 Release 取预编译库),并在安装收尾打印
126
+ `原生引擎: 可用/不可用` 汇总,避免 `pip install` 静默成功、首次运行才暴露。
127
+ - `codecin/native.py:get_engine()` 的 docstring 改为「无纯 Python 回退」,
128
+ 与 `cpu.py` 的 native-only 语义一致。
129
+
130
+ ### 已知限制 (Known limitations)
131
+
132
+ - **C 后端运行时尚未覆盖**:`draw_text`(47)(缺内嵌点阵字体)、音频
133
+ (39–42)、GUI 与键盘类 SYS。含这些调用的程序在 `--build-backend auto`
134
+ 下会回退旧的 Go 后端,`--build-backend c` 会明确报出 `SYS 47
135
+ (CANVASTEXT)` 之类的功能号,不会静默产出错误结果。
136
+ - **交叉编译产物未在目标机执行验证**:`x86_64-linux` / `aarch64-linux`
137
+ 已能产出合法 ELF(e_machine 0x3E / 0xB7),但本机为 Windows,未在
138
+ Linux 真机或 WSL 中运行过。
139
+ - **旧 Go 后端仍保留**:`--build-backend native|vm` 作为回退路径存在,
140
+ 待 C 后端覆盖足够后再移除。
141
+
142
+ ---
143
+
144
+ ## [6.4.2] - 2026-10-31
145
+
146
+ 一次以「内置标准库 pic 包化 / 注册表文档补全」为主题的维护发布。
147
+
148
+ ### 新增 (Added)
149
+
150
+ - `codecin/lib/<name>/`:41 个内置标准库改为 pic 包目录(`pic.toml` +
151
+ `src/<name>.cin`),可独立 `pic build` / `pic install`;新增
152
+ `script/sync_stdlib_packages.py` 负责生成、`--check` 校验与 `--build` 构建,
153
+ CI 校验包结构一致性。
154
+
155
+ ### 变更 (Changed)
156
+
157
+ - 内置标准库改为 `codecin/lib/<name>/` 包目录,运行时直接解析
158
+ `codecin/lib/<name>/src/<name>.cin`;`import "math.cin"` / `import "lib/math.cin"`
159
+ 写法不变,`import "math"` 也可用。
160
+ - 版本号提升至 **6.4.2**(`codecin/__init__.py` 单一真源,Go 侧
161
+ `version_gen.go` 与 registry 服务端同步)。
162
+ - registry README 补全发布字段、搜索参数、下载 ETag/Range、错误码、认证缓存、
163
+ 后台 UI 与 Docker/nginx/备份说明;Dockerfile 增加健康检查。
164
+ - 41 个内置库已发布到中央注册表 `package.codecin.org.cn`(6.4.2),`repo` 统一为
165
+ `https://gitee.com/codecin/internal-libraries`。
166
+
167
+ ---
168
+
8
169
  ## [6.4.0] - 2026-10-30
9
170
 
10
171
  一次以「pic 搜索 / 版本管理 / 分块导入」为主题的发布:CIN 的 `import` 现在可以
@@ -3,7 +3,7 @@
3
3
 
4
4
  include README.md CHANGELOG.md LICENSE
5
5
  include pyproject.toml setup.py
6
- recursive-include codecin/lib *.cin
6
+ recursive-include codecin/lib *.cin *.toml
7
7
  recursive-include codecin/native *.go *.txt go.mod go.sum build.sh build.ps1
8
8
  # 注: 不 include 预编译原生库 (*.dll/*.so/*.dylib) —— 它们在用户安装时由
9
9
  # setup.py 现场编译, 见 pyproject.toml 的 package-data 说明。
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codecin
3
- Version: 6.4.0
3
+ Version: 7.0.0
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
@@ -196,7 +196,7 @@ graph LR
196
196
  | 日志系统 | rich | 彩色日志/表格/面板/traceback, --debug / --log-level DEBUG 超详细诊断 |
197
197
  | 性能分析 | 指令级 | CPI + 内存统计 + 热指令 |
198
198
  | CROM压缩 | zlib | 段式格式 (v4), 只保存已分配页 (Go/Python双实现) |
199
- | AOT 静态编译 | 独立可执行 | native 后端直接生成机器码 (VM 后端兼容), Windows/Linux/macOS 静态可执行 |
199
+ | AOT 静态编译 | 独立可执行 | C 后端把指令逐条翻译成 C, 由 GCC/Clang 生成机器码 (Windows/Linux, x86-64/AArch64); 未覆盖指令回退 Go 后端 |
200
200
 
201
201
  ---
202
202
 
@@ -454,7 +454,7 @@ flowchart TD
454
454
  **安装(pip)**
455
455
 
456
456
  ```bash
457
- pip install codecin # 安装 (内置标准库 codecin/lib/*.cin 随包分发)
457
+ pip install codecin # 安装 (内置标准库 codecin/lib/<name>/src/*.cin 随包分发)
458
458
  pip install -U codecin # 升级到最新版 (不要锁定版本号)
459
459
  codecin --version
460
460
  ```
@@ -516,24 +516,45 @@ v5.9.0 起**只有一条执行路径**: Python 完成 CIN/PL/ASM 编译后, 通
516
516
  Python、Go 工具链、libc 或任何动态库**。CIN 构建时会解析 `import` 闭包做依赖
517
517
  完整性检查, 并把**全部依赖库在编译期展开嵌入产物** (产物不读取任何 `.cin` 文件)。
518
518
 
519
- 默认使用 **auto 后端**: 指令数不超过 20000 时走 **native** (把编译后的指令流
520
- 直接生成 Go 源码, 核心整数/控制流/内存/SYS 指令不再经过 UCBC 解码与 opcode
521
- dispatch, 由 Go 编译器产出目标平台机器码); 超过阈值自动回退 **VM** (内嵌 UCBC
522
- 字节码), 避免大量指令展开导致 `go build` 极慢。`--build-backend auto|native|vm`
523
- 可强制指定。超过 800 条指令的 native 程序会自动按基本块拆分成多个 Go
524
- 函数,进一步控制编译时间。
519
+ 默认使用 **auto 后端**: 指令流能被 **C 后端**(`codecin/cbackend.py`)完整翻译时,
520
+ 逐条展开成 C,再由本机或交叉 **GCC/Clang** 编译成机器码——**不再依赖 Go 工具链**;
521
+ 遇到尚未覆盖的指令或 syscall 时回退到旧的 Go 后端(`native`/`vm`)。
522
+ `--build-backend auto|c|native|vm` 可强制指定,`c` 遇到不支持的程序会直接报出
523
+ 具体指令/syscall,不会静默换后端。
524
+
525
+ C 后端的目标:`x86_64-windows`(PE)、`x86_64-linux`(ELF)、`aarch64-linux`
526
+ (ELF),与 `--build-target windows/amd64` 等写法一一对应。缺少交叉编译器时按
527
+ 提示安装,或 `python -m codecin.toolchain install <target> --url <压缩包>` 安装
528
+ 自带工具链。
529
+
530
+ C 后端当前覆盖的 syscall(未列出的会让 `auto` 回退 Go 后端,`c` 则报错):
531
+
532
+ | 范围 | 能力 |
533
+ |------|------|
534
+ | 0–38 | 浮点/整数/字符串/`itoa`/`ftoa`/`malloc`/`substr`/`trim`/`atoi` 等 |
535
+ | 43–46, 48–50 | 画布:新建、颜色、矩形、圆、直线、`save_png`;`show_canvas` 无窗口环境下返回 -1 |
536
+ | 51–58 | 文件读写/追加/存在/删除/大小/建目录、`dirlist` |
537
+ | 61–67 | 环境变量、`osname/hostname/username/cwd/homedir` |
538
+ | 80–90 | `path_join/basename/dirname/abs`、`file_copy`/`file_move`/`dir_remove`/`is_dir`/`file_mtime`/`temp_dir`/`chdir` |
539
+ | 91–94 | `time_ms`、`sleep_ms`、`cpu_count`、`arch_name` |
540
+ | 97–102 | `http_get`/`http_post`/`download`/`sha256`/`base64` |
541
+ | 137, 145–157 | `ALLOCFRAME`、`http_req`/`http_code`、TCP 客户端与服务端、UDP、DNS |
542
+
543
+ 未覆盖:`draw_text`(47)、音频(39–42)、GUI/键盘。这些 syscall 会让 `auto`
544
+ 回退 Go 后端;用 `--build-backend c` 强制时会明确报出功能号。
525
545
 
526
546
  ```bash
527
- # 本机平台 (auto: 小程序 native, 大程序 VM)
547
+ # 本机平台 (auto: 能走 C 后端就走 C, 否则回退 Go 后端)
528
548
  codecin program.cin --build-exe program # Windows 自动补 .exe
529
549
 
530
- # 交叉编译 (只需要安装 Go 工具链; native/vm 后端都支持)
550
+ # 交叉编译 (C 后端需要对应目标的 GCC/Clang; Go 后端只需 Go 工具链)
531
551
  codecin program.cin --build-exe app-linux --build-target linux/amd64
532
- codecin program.cin --build-exe app-mac --build-target darwin/arm64
552
+ codecin program.cin --build-exe app-arm --build-target linux/arm64
533
553
 
534
554
  # 强制某个后端 + 优化级别
555
+ codecin program.cin --build-exe app-c --build-backend c --optimize 2
535
556
  codecin program.cin --build-exe app-native --build-backend native --optimize 2
536
- codecin program.cin --build-exe app-vm --build-backend vm --optimize 2
557
+ codecin program.cin --build-exe app-vm --build-backend vm --optimize 2
537
558
 
538
559
  # 独立编译 + 链接 (ASM/PL): 每个对象单独汇编, 再由链接器合并
539
560
  codecin --emit-object main.asm -o main.co
@@ -178,7 +178,7 @@ graph LR
178
178
  | 日志系统 | rich | 彩色日志/表格/面板/traceback, --debug / --log-level DEBUG 超详细诊断 |
179
179
  | 性能分析 | 指令级 | CPI + 内存统计 + 热指令 |
180
180
  | CROM压缩 | zlib | 段式格式 (v4), 只保存已分配页 (Go/Python双实现) |
181
- | AOT 静态编译 | 独立可执行 | native 后端直接生成机器码 (VM 后端兼容), Windows/Linux/macOS 静态可执行 |
181
+ | AOT 静态编译 | 独立可执行 | C 后端把指令逐条翻译成 C, 由 GCC/Clang 生成机器码 (Windows/Linux, x86-64/AArch64); 未覆盖指令回退 Go 后端 |
182
182
 
183
183
  ---
184
184
 
@@ -436,7 +436,7 @@ flowchart TD
436
436
  **安装(pip)**
437
437
 
438
438
  ```bash
439
- pip install codecin # 安装 (内置标准库 codecin/lib/*.cin 随包分发)
439
+ pip install codecin # 安装 (内置标准库 codecin/lib/<name>/src/*.cin 随包分发)
440
440
  pip install -U codecin # 升级到最新版 (不要锁定版本号)
441
441
  codecin --version
442
442
  ```
@@ -498,24 +498,45 @@ v5.9.0 起**只有一条执行路径**: Python 完成 CIN/PL/ASM 编译后, 通
498
498
  Python、Go 工具链、libc 或任何动态库**。CIN 构建时会解析 `import` 闭包做依赖
499
499
  完整性检查, 并把**全部依赖库在编译期展开嵌入产物** (产物不读取任何 `.cin` 文件)。
500
500
 
501
- 默认使用 **auto 后端**: 指令数不超过 20000 时走 **native** (把编译后的指令流
502
- 直接生成 Go 源码, 核心整数/控制流/内存/SYS 指令不再经过 UCBC 解码与 opcode
503
- dispatch, 由 Go 编译器产出目标平台机器码); 超过阈值自动回退 **VM** (内嵌 UCBC
504
- 字节码), 避免大量指令展开导致 `go build` 极慢。`--build-backend auto|native|vm`
505
- 可强制指定。超过 800 条指令的 native 程序会自动按基本块拆分成多个 Go
506
- 函数,进一步控制编译时间。
501
+ 默认使用 **auto 后端**: 指令流能被 **C 后端**(`codecin/cbackend.py`)完整翻译时,
502
+ 逐条展开成 C,再由本机或交叉 **GCC/Clang** 编译成机器码——**不再依赖 Go 工具链**;
503
+ 遇到尚未覆盖的指令或 syscall 时回退到旧的 Go 后端(`native`/`vm`)。
504
+ `--build-backend auto|c|native|vm` 可强制指定,`c` 遇到不支持的程序会直接报出
505
+ 具体指令/syscall,不会静默换后端。
506
+
507
+ C 后端的目标:`x86_64-windows`(PE)、`x86_64-linux`(ELF)、`aarch64-linux`
508
+ (ELF),与 `--build-target windows/amd64` 等写法一一对应。缺少交叉编译器时按
509
+ 提示安装,或 `python -m codecin.toolchain install <target> --url <压缩包>` 安装
510
+ 自带工具链。
511
+
512
+ C 后端当前覆盖的 syscall(未列出的会让 `auto` 回退 Go 后端,`c` 则报错):
513
+
514
+ | 范围 | 能力 |
515
+ |------|------|
516
+ | 0–38 | 浮点/整数/字符串/`itoa`/`ftoa`/`malloc`/`substr`/`trim`/`atoi` 等 |
517
+ | 43–46, 48–50 | 画布:新建、颜色、矩形、圆、直线、`save_png`;`show_canvas` 无窗口环境下返回 -1 |
518
+ | 51–58 | 文件读写/追加/存在/删除/大小/建目录、`dirlist` |
519
+ | 61–67 | 环境变量、`osname/hostname/username/cwd/homedir` |
520
+ | 80–90 | `path_join/basename/dirname/abs`、`file_copy`/`file_move`/`dir_remove`/`is_dir`/`file_mtime`/`temp_dir`/`chdir` |
521
+ | 91–94 | `time_ms`、`sleep_ms`、`cpu_count`、`arch_name` |
522
+ | 97–102 | `http_get`/`http_post`/`download`/`sha256`/`base64` |
523
+ | 137, 145–157 | `ALLOCFRAME`、`http_req`/`http_code`、TCP 客户端与服务端、UDP、DNS |
524
+
525
+ 未覆盖:`draw_text`(47)、音频(39–42)、GUI/键盘。这些 syscall 会让 `auto`
526
+ 回退 Go 后端;用 `--build-backend c` 强制时会明确报出功能号。
507
527
 
508
528
  ```bash
509
- # 本机平台 (auto: 小程序 native, 大程序 VM)
529
+ # 本机平台 (auto: 能走 C 后端就走 C, 否则回退 Go 后端)
510
530
  codecin program.cin --build-exe program # Windows 自动补 .exe
511
531
 
512
- # 交叉编译 (只需要安装 Go 工具链; native/vm 后端都支持)
532
+ # 交叉编译 (C 后端需要对应目标的 GCC/Clang; Go 后端只需 Go 工具链)
513
533
  codecin program.cin --build-exe app-linux --build-target linux/amd64
514
- codecin program.cin --build-exe app-mac --build-target darwin/arm64
534
+ codecin program.cin --build-exe app-arm --build-target linux/arm64
515
535
 
516
536
  # 强制某个后端 + 优化级别
537
+ codecin program.cin --build-exe app-c --build-backend c --optimize 2
517
538
  codecin program.cin --build-exe app-native --build-backend native --optimize 2
518
- codecin program.cin --build-exe app-vm --build-backend vm --optimize 2
539
+ codecin program.cin --build-exe app-vm --build-backend vm --optimize 2
519
540
 
520
541
  # 独立编译 + 链接 (ASM/PL): 每个对象单独汇编, 再由链接器合并
521
542
  codecin --emit-object main.asm -o main.co
@@ -1,4 +1,4 @@
1
- __version__ = "6.4.0"
1
+ __version__ = "7.0.0"
2
2
  __author__ = "ByUsi Studio"
3
3
 
4
4
  from .config import Config
@@ -835,10 +835,10 @@ def _compile_program(program_file: str,
835
835
  'deps': [program_file],
836
836
  }
837
837
 
838
- if ext not in ('.asm', '.pl', '.bin'):
838
+ if ext not in ('.asm', '.pl', '.bin', '.sdgcc'):
839
839
  raise AotError(f'不支持 AOT 输入格式: {ext or "(无扩展名)"}')
840
840
 
841
- # ASM/PL 由 Assembler 装载; BIN 由 crom.load_bin 解码。
841
+ # ASM/PL 由 Assembler 装载; BIN/SDGCC 由 crom.load_bin 解码。
842
842
  from . import Config
843
843
  from .cpu import CPU
844
844
  from .errors import CPUSimulatorError
@@ -871,7 +871,7 @@ def build_from_ir(instructions,
871
871
  out: str,
872
872
  target: Optional[str] = None,
873
873
  backend: str = 'auto',
874
- max_instructions: int = 100_000_000,
874
+ max_instructions: int = 0,
875
875
  optimize: int = 0,
876
876
  program_name: str = 'linked',
877
877
  keep_temp: bool = False,
@@ -902,23 +902,41 @@ def build_from_ir(instructions,
902
902
  if use_cache and cache_key and _cache_lookup(cache_key, goos, out, logger):
903
903
  return os.path.abspath(out)
904
904
 
905
- effective = resolve_backend(backend, len(instructions))
906
- if effective != backend and logger:
907
- logger.info(
908
- f'AOT: 指令数 {len(instructions)} 超过 native 自动阈值 '
909
- f'{NATIVE_INSTRUCTION_LIMIT}, 使用 VM 后端')
910
- elif backend == 'native' and len(instructions) > NATIVE_INSTRUCTION_LIMIT \
911
- and logger:
912
- logger.warning(
913
- f'AOT: 指令数 {len(instructions)} 超过 native 自动阈值 '
914
- f'{NATIVE_INSTRUCTION_LIMIT}, 强制 native 可能编译较慢')
915
-
916
- if effective == 'vm':
905
+ from . import cbackend
906
+ c_ok, c_reason = cbackend.supports(instructions)
907
+ if backend == 'c':
908
+ if not c_ok:
909
+ raise AotError(f'C 后端不支持该程序: {c_reason}')
910
+ effective = 'c'
911
+ elif backend == 'auto':
912
+ effective = 'c' if c_ok else resolve_backend('auto',
913
+ len(instructions))
914
+ if not c_ok and logger:
915
+ logger.info(f'AOT: C 后端不适用 ({c_reason}), '
916
+ f'改走 {effective} 后端')
917
+ else:
918
+ effective = resolve_backend(backend, len(instructions))
919
+
920
+ if effective == 'c':
921
+ goos2, goarch2 = parse_target(target) if target else \
922
+ parse_target(host_target())
923
+ try:
924
+ cname = cbackend.c_target(goos2, goarch2)
925
+ except cbackend.CBackendError as e:
926
+ raise AotError(str(e)) from e
927
+ try:
928
+ built = cbackend.compile_instructions(
929
+ instructions, labels, segments, entry_pc, mem_size, sp,
930
+ heap_base, out, target=cname, optimize=optimize)
931
+ except cbackend.CBackendError as e:
932
+ raise AotError(f'C 后端编译失败: {e}') from e
933
+ elif effective == 'vm':
917
934
  built = build(bytes(bytecode), seg_file, out, target=target,
918
935
  keep_temp=keep_temp, debug=debug, logger=logger)
919
936
  else:
920
937
  if effective != 'native':
921
- raise AotError(f'未知 AOT 后端: {backend} (可选 auto / native / vm)')
938
+ raise AotError(
939
+ f'未知 AOT 后端: {backend} (可选 auto / c / native / vm)')
922
940
 
923
941
  from .native_codegen import NativeCodegenError, generate_go_source
924
942
  try:
@@ -948,7 +966,7 @@ def build_program(program_file: str,
948
966
  keep_temp: bool = False,
949
967
  mem_size: Optional[int] = None,
950
968
  backend: str = 'auto',
951
- max_instructions: int = 100_000_000,
969
+ max_instructions: int = 0,
952
970
  optimize: int = 0,
953
971
  use_cache: bool = True,
954
972
  debug: bool = False,