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.
- {codecin-5.9.0 → codecin-6.0.1}/CHANGELOG.md +71 -0
- {codecin-5.9.0/codecin.egg-info → codecin-6.0.1}/PKG-INFO +108 -23
- {codecin-5.9.0 → codecin-6.0.1}/README.md +107 -22
- {codecin-5.9.0 → codecin-6.0.1}/codecin/__init__.py +1 -1
- codecin-6.0.1/codecin/aot.py +1026 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/assembler.py +75 -4
- {codecin-5.9.0 → codecin-6.0.1}/codecin/cin.py +128 -25
- {codecin-5.9.0 → codecin-6.0.1}/codecin/cli.py +135 -8
- {codecin-5.9.0 → codecin-6.0.1}/codecin/config.py +2 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/cpu.py +20 -1
- {codecin-5.9.0 → codecin-6.0.1}/codecin/crom.py +171 -20
- codecin-6.0.1/codecin/native/engine/native.go +634 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/version_gen.go +1 -1
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/vm.go +14 -0
- codecin-6.0.1/codecin/native_codegen.py +986 -0
- codecin-6.0.1/codecin/object.py +539 -0
- codecin-6.0.1/codecin/optimizer.py +236 -0
- {codecin-5.9.0 → codecin-6.0.1/codecin.egg-info}/PKG-INFO +108 -23
- {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/SOURCES.txt +7 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_aot.py +109 -0
- codecin-6.0.1/tests/test_bin_compat.py +195 -0
- codecin-6.0.1/tests/test_cli.py +221 -0
- codecin-6.0.1/tests/test_native_codegen.py +206 -0
- codecin-6.0.1/tests/test_object_link.py +322 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_version.py +5 -2
- codecin-5.9.0/codecin/aot.py +0 -499
- codecin-5.9.0/tests/test_cli.py +0 -82
- {codecin-5.9.0 → codecin-6.0.1}/LICENSE +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/MANIFEST.in +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/console.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/disasm.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/environment.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/errors.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/isa.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/array.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/bigint.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/bits.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/bitset.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/codec.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/combin.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/conv.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/cppstd.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/cstd.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/csv.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/dp.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/ffi.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/fmt.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/frac.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/gostd.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/graph.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/gui.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/hash.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/heap.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/io.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/json.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/key.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/math.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/matrix.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/net.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/path.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/queue.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/rand.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/set.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/sort.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/stat.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/str.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/termux.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/test.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/text.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/time.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/token.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/tree.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/unionfind.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/validate.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/lib/vec.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/logger.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/memory.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/aot/aot.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/aot/stub_main.go.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/build.ps1 +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/build.sh +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/codegen.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/compile_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/parser.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/syscalls.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/tokenizer.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/compiler/types.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/args.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/audio.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/audio_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/audio_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/audio_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/canvas.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/console_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/console_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/crom.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/encode.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/engine_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ffi_nocgo.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ffi_registry.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ffi_unix.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ffi_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui_stub.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/gui_x11.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/host_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/hostcrypto.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/hostdesktop.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/hostnet.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/isa_gen.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_stub.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_termios_darwin.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_termios_linux.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/keyboard_windows_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/mem_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/mem_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/netsock.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/ops_ext.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/stdin.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/stdin_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/stdin_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/system.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/engine/termux.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/go.mod +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/ir/ir.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native/main.go +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/native.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/registers.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/stats.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/stdlib.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin/version.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/dependency_links.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/entry_points.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/requires.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/codecin.egg-info/top_level.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/args_demo.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/asm_constants.asm +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/bitwise_builtins.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/control_flow.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/enum_range_for.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/gui_demo.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/literals_types.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/local_audio.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/modules_demo.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/stdlib_demo.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/examples/system_interaction.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vim/ftdetect/codecin.vim +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vim/syntax/cin.vim +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vim/syntax/codecinasm.vim +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/.vscodeignore +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/README.md +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/build.bat +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/language-configuration.json +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/package.json +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/snippets/cin.json +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/misc/vscode-cin/syntaxes/cin.tmLanguage.json +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/pyproject.toml +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/script/bump_version.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/script/check_paths.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/script/gen_isa_docs.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/script/gen_native_isa.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/setup.cfg +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/setup.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_aggregate_and_const.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_all_libs_together.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_assembler_ext.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_host.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_host_ext.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_new_features.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_syntax.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_syntax_ext.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_cin_system.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_compiler_errors.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_environment.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_examples.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_features_ab.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_features_import.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_features_importloc.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_ffi_net.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_gui.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_index_subscript_type.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_isa_single_source.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_issue_regress.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_keyboard.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_bigint.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_bitset.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_codec.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_combin.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_compat.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_csv.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_dp.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_fmt.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_frac.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_graph.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_heap.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_path.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_set.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_text.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_token.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_tree.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_lib_unionfind.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_libs.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_libs_ext.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_literals_and_bom.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_native_hardening.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_native_lib_lookup.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_nested_subscript_codegen.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_no_go_cli.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_p0_fixes.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_packaging.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_paths_consistency.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_sparse_memory.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_struct_value_semantics.py +0 -0
- {codecin-5.9.0 → codecin-6.0.1}/tests/test_switch_semantics.py +0 -0
- {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:
|
|
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 静态编译 | 独立可执行 |
|
|
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
|
-
|
|
460
|
-
|
|
461
|
-
|
|
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-
|
|
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
|
|
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` - 优化级别 (
|
|
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
|
-
-
|
|
536
|
-
|
|
537
|
-
|
|
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 静态编译 | 独立可执行 |
|
|
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
|
-
|
|
442
|
-
|
|
443
|
-
|
|
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-
|
|
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
|
|
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` - 优化级别 (
|
|
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
|
-
-
|
|
518
|
-
|
|
519
|
-
|
|
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
|
|