codecin 5.9.0__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.
- {codecin-5.9.0 → codecin-6.0.0}/CHANGELOG.md +50 -0
- {codecin-5.9.0/codecin.egg-info → codecin-6.0.0}/PKG-INFO +106 -22
- {codecin-5.9.0 → codecin-6.0.0}/README.md +105 -21
- {codecin-5.9.0 → codecin-6.0.0}/codecin/__init__.py +1 -1
- codecin-6.0.0/codecin/aot.py +1026 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/assembler.py +75 -4
- {codecin-5.9.0 → codecin-6.0.0}/codecin/cin.py +128 -25
- {codecin-5.9.0 → codecin-6.0.0}/codecin/cli.py +135 -8
- {codecin-5.9.0 → codecin-6.0.0}/codecin/config.py +2 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/cpu.py +20 -1
- codecin-6.0.0/codecin/native/engine/native.go +634 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/version_gen.go +1 -1
- codecin-6.0.0/codecin/native_codegen.py +986 -0
- codecin-6.0.0/codecin/object.py +539 -0
- codecin-6.0.0/codecin/optimizer.py +236 -0
- {codecin-5.9.0 → codecin-6.0.0/codecin.egg-info}/PKG-INFO +106 -22
- {codecin-5.9.0 → codecin-6.0.0}/codecin.egg-info/SOURCES.txt +6 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_aot.py +109 -0
- codecin-6.0.0/tests/test_cli.py +221 -0
- codecin-6.0.0/tests/test_native_codegen.py +206 -0
- codecin-6.0.0/tests/test_object_link.py +322 -0
- {codecin-5.9.0 → codecin-6.0.0}/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.0}/LICENSE +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/MANIFEST.in +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/console.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/crom.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/disasm.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/environment.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/errors.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/isa.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/array.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/bigint.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/bits.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/bitset.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/codec.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/combin.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/conv.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/cppstd.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/cstd.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/csv.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/dp.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/ffi.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/fmt.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/frac.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/gostd.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/graph.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/gui.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/hash.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/heap.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/io.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/json.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/key.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/math.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/matrix.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/net.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/path.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/queue.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/rand.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/set.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/sort.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/stat.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/str.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/termux.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/test.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/text.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/time.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/token.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/tree.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/unionfind.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/validate.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/lib/vec.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/logger.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/memory.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/aot/aot.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/aot/stub_main.go.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/build.ps1 +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/build.sh +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/compiler/codegen.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/compiler/compile_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/compiler/parser.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/compiler/syscalls.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/compiler/tokenizer.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/compiler/types.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/args.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/audio.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/audio_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/audio_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/audio_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/canvas.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/console_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/console_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/crom.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/encode.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/engine_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/ffi_nocgo.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/ffi_registry.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/ffi_unix.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/ffi_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/gui.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/gui_stub.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/gui_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/gui_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/gui_x11.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/host_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/hostcrypto.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/hostdesktop.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/hostnet.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/isa_gen.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/keyboard.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/keyboard_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/keyboard_stub.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/keyboard_termios_darwin.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/keyboard_termios_linux.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/keyboard_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/keyboard_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/keyboard_windows_test.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/mem_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/mem_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/netsock.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/ops_ext.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/stdin.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/stdin_other.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/stdin_windows.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/system.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/termux.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/engine/vm.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/go.mod +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/ir/ir.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native/main.go +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/native.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/registers.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/stats.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/stdlib.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin/version.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin.egg-info/dependency_links.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin.egg-info/entry_points.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin.egg-info/requires.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/codecin.egg-info/top_level.txt +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/args_demo.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/asm_constants.asm +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/bitwise_builtins.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/control_flow.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/enum_range_for.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/gui_demo.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/literals_types.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/local_audio.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/modules_demo.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/stdlib_demo.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/examples/system_interaction.cin +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vim/ftdetect/codecin.vim +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vim/syntax/cin.vim +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vim/syntax/codecinasm.vim +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vscode-cin/.vscodeignore +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vscode-cin/README.md +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vscode-cin/build.bat +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vscode-cin/language-configuration.json +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vscode-cin/package.json +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vscode-cin/snippets/cin.json +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/misc/vscode-cin/syntaxes/cin.tmLanguage.json +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/pyproject.toml +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/script/bump_version.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/script/check_paths.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/script/gen_isa_docs.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/script/gen_native_isa.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/setup.cfg +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/setup.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_aggregate_and_const.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_all_libs_together.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_assembler_ext.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_cin_host.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_cin_host_ext.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_cin_new_features.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_cin_syntax.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_cin_syntax_ext.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_cin_system.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_compiler_errors.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_environment.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_examples.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_features_ab.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_features_import.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_features_importloc.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_ffi_net.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_gui.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_index_subscript_type.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_isa_single_source.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_issue_regress.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_keyboard.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_bigint.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_bitset.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_codec.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_combin.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_compat.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_csv.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_dp.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_fmt.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_frac.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_graph.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_heap.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_path.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_set.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_text.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_token.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_tree.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_lib_unionfind.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_libs.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_libs_ext.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_literals_and_bom.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_native_hardening.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_native_lib_lookup.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_nested_subscript_codegen.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_no_go_cli.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_p0_fixes.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_packaging.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_paths_consistency.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_sparse_memory.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_struct_value_semantics.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_switch_semantics.py +0 -0
- {codecin-5.9.0 → codecin-6.0.0}/tests/test_workflows.py +0 -0
|
@@ -5,6 +5,56 @@
|
|
|
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
|
+
|
|
8
58
|
## [5.9.0] - 2026-10-05
|
|
9
59
|
|
|
10
60
|
一次「单引擎 + 大内存 + 系统能力」的架构发布:**纯 Python 解释器与 JIT
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codecin
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.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
|
|
@@ -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
|
|
|
@@ -455,18 +455,79 @@ v5.9.0 起**只有一条执行路径**: Python 完成 CIN/PL/ASM 编译后, 通
|
|
|
455
455
|
|
|
456
456
|
### 编译成独立可执行文件 (AOT)
|
|
457
457
|
|
|
458
|
-
把 CIN 程序编译成**静态链接的独立可执行文件** ——
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
458
|
+
把 CIN/ASM/PL/BIN/CO 程序编译成**静态链接的独立可执行文件** —— 运行时**不需要
|
|
459
|
+
Python、Go 工具链、libc 或任何动态库**。CIN 构建时会解析 `import` 闭包做依赖
|
|
460
|
+
完整性检查, 并把**全部依赖库在编译期展开嵌入产物** (产物不读取任何 `.cin` 文件)。
|
|
461
|
+
|
|
462
|
+
默认使用 **auto 后端**: 指令数不超过 20000 时走 **native** (把编译后的指令流
|
|
463
|
+
直接生成 Go 源码, 核心整数/控制流/内存/SYS 指令不再经过 UCBC 解码与 opcode
|
|
464
|
+
dispatch, 由 Go 编译器产出目标平台机器码); 超过阈值自动回退 **VM** (内嵌 UCBC
|
|
465
|
+
字节码), 避免大量指令展开导致 `go build` 极慢。`--build-backend auto|native|vm`
|
|
466
|
+
可强制指定。超过 800 条指令的 native 程序会自动按基本块拆分成多个 Go
|
|
467
|
+
函数,进一步控制编译时间。
|
|
462
468
|
|
|
463
469
|
```bash
|
|
464
|
-
# 本机平台
|
|
470
|
+
# 本机平台 (auto: 小程序 native, 大程序 VM)
|
|
465
471
|
codecin program.cin --build-exe program # Windows 自动补 .exe
|
|
466
472
|
|
|
467
|
-
# 交叉编译 (只需要安装 Go
|
|
473
|
+
# 交叉编译 (只需要安装 Go 工具链; native/vm 后端都支持)
|
|
468
474
|
codecin program.cin --build-exe app-linux --build-target linux/amd64
|
|
469
475
|
codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
476
|
+
|
|
477
|
+
# 强制某个后端 + 优化级别
|
|
478
|
+
codecin program.cin --build-exe app-native --build-backend native --optimize 2
|
|
479
|
+
codecin program.cin --build-exe app-vm --build-backend vm --optimize 2
|
|
480
|
+
|
|
481
|
+
# 独立编译 + 链接 (ASM/PL): 每个对象单独汇编, 再由链接器合并
|
|
482
|
+
codecin --emit-object main.asm -o main.co
|
|
483
|
+
codecin --emit-object lib.asm -o lib.co
|
|
484
|
+
codecin --link main.co --link lib.co -o app --optimize 3
|
|
485
|
+
|
|
486
|
+
# 也可以直接把源文件交给链接器 (即时编译为对象)
|
|
487
|
+
codecin --link main.cin --link lib.cin -o app
|
|
488
|
+
|
|
489
|
+
# CIN 库对象: 无 main 的文件作为函数库, 主文件用 extern 声明跨对象函数
|
|
490
|
+
codecin --emit-object lib.cin -o lib.co
|
|
491
|
+
codecin --emit-object main.cin -o main.co
|
|
492
|
+
codecin --link main.co --link lib.co -o app
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
静态库归档:
|
|
496
|
+
|
|
497
|
+
```bash
|
|
498
|
+
codecin --emit-archive --link lib.co --link lib2.co -o lib.colib
|
|
499
|
+
codecin --link main.co --link lib.colib -o app
|
|
500
|
+
codecin --link main.co --link lib.colib -o app-gc --gc-sections
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
链接器按 C 风格静态库语义,只拉取能解决当前未定义符号的成员。
|
|
504
|
+
|
|
505
|
+
CIN 示例:
|
|
506
|
+
|
|
507
|
+
```cin
|
|
508
|
+
// lib.cin
|
|
509
|
+
function helper() -> int {
|
|
510
|
+
return 7
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
// main.cin
|
|
514
|
+
extern function helper() -> int
|
|
515
|
+
|
|
516
|
+
function main() -> int {
|
|
517
|
+
println(int_to_str(helper()))
|
|
518
|
+
return 0
|
|
519
|
+
}
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
跨对象全局变量同样用 `extern` 声明:
|
|
523
|
+
|
|
524
|
+
```cin
|
|
525
|
+
// lib.cin
|
|
526
|
+
int counter = 5
|
|
527
|
+
|
|
528
|
+
// main.cin
|
|
529
|
+
extern int counter
|
|
530
|
+
extern function bump()
|
|
470
531
|
```
|
|
471
532
|
|
|
472
533
|
| 目标 | 说明 |
|
|
@@ -475,10 +536,15 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
|
475
536
|
| `linux/amd64` `linux/arm64` | ELF, **无 PT_INTERP**, 不依赖 glibc |
|
|
476
537
|
| `darwin/amd64` `darwin/arm64` | Mach-O, 静态 |
|
|
477
538
|
|
|
478
|
-
常见选项: `--build-target OS/ARCH`、`--build-
|
|
539
|
+
常见选项: `--build-target OS/ARCH`、`--build-backend auto|native|vm`、
|
|
540
|
+
`--optimize 0-3`、`--no-build-cache`、`--build-debug`、`--build-keep-temp`
|
|
541
|
+
(保留 `go build` 临时目录排错)。AOT 默认启用增量缓存 (源/依赖/工具链指纹命中时
|
|
542
|
+
直接复用产物), 缓存目录可用 `CODECIN_AOT_CACHE` 覆盖。
|
|
543
|
+
`--optimize` 作用于 CIN IR (窥孔/常量折叠/不可达代码删除); native 后端最终
|
|
544
|
+
机器码仍由 Go 编译器生成, 其自身优化由 Go 工具链决定。
|
|
479
545
|
`import "math.cin"`(裸名字 = codecin 内置标准库 `codecin/lib/`)在**编译期**展开, 因此产物自带用到的标准库, 运行时不需要任何 `.cin` 文件。
|
|
480
546
|
正常结束退出码 0, 运行期错误打印 stderr 并以 1 退出。
|
|
481
|
-
详见 [开发者编译文档 · AOT](docs/BUILDING.md
|
|
547
|
+
详见 [开发者编译文档 · AOT](docs/BUILDING.md)。
|
|
482
548
|
|
|
483
549
|
### 命令行选项
|
|
484
550
|
|
|
@@ -494,6 +560,7 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
|
494
560
|
- `--libs` - 列出内置标准库并标注执行路径要求
|
|
495
561
|
|
|
496
562
|
**日志与运行时行为**
|
|
563
|
+
- `--debug` - 调试模式 (强制 DEBUG 日志, 执行结束输出 CPU 状态与统计, 异常完整堆栈)
|
|
497
564
|
- `--log-level DEBUG|INFO|WARNING|ERROR|CRITICAL` - 日志级别 (默认 INFO)
|
|
498
565
|
- `--log-file <file>` - 日志输出到文件
|
|
499
566
|
- `--sandbox` - 沙箱模式 (在 Go 引擎侧拦截全部宿主能力系统调用)
|
|
@@ -504,11 +571,22 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
|
504
571
|
|
|
505
572
|
**编译选项**
|
|
506
573
|
- `--compile` / `--compile-only` - 编译为 .bin 字节码
|
|
507
|
-
- `--optimize 0-3` - 优化级别 (
|
|
574
|
+
- `--optimize 0-3` - IR 优化级别 (0 关闭; 1 窥孔; 2 常量折叠; 3 不可达代码删除)
|
|
508
575
|
- `--disasm` - 反汇编 .bin 字节码为文本清单后退出
|
|
509
576
|
- `-o, --output <file>` - 输出文件名 (.crom/.bin)
|
|
510
577
|
- `--strict` - 严格汇编模式
|
|
511
578
|
|
|
579
|
+
**AOT 选项 (`--build-exe`)**
|
|
580
|
+
- `--build-target OS/ARCH` - 交叉编译目标
|
|
581
|
+
- `--build-backend auto|native|vm` - auto 按指令数选 native/VM (默认) / 强制 native / 强制 VM
|
|
582
|
+
- `--no-build-cache` - 禁用 AOT 增量构建缓存 (含对象/归档链接缓存)
|
|
583
|
+
- `--build-debug` - 保留符号表/DWARF (不传 `-s -w`),便于调试
|
|
584
|
+
- `--build-keep-temp` - 保留 Go 构建临时目录
|
|
585
|
+
- `--emit-object` - 把 CIN/ASM/PL 编译为可重定位 `.co` 对象
|
|
586
|
+
- `--link INPUT` - 链接 `.cin/.asm/.pl/.co/.colib` 为可执行文件 (可重复)
|
|
587
|
+
- `--emit-archive` - 把 `--link` 输入打包为 `.colib` 静态库归档
|
|
588
|
+
- `--gc-sections` - 链接时删除从入口不可达的函数/代码段
|
|
589
|
+
|
|
512
590
|
**CROM选项**
|
|
513
591
|
- `--save` - 执行后保存 .crom 内存镜像 (v4 段式)
|
|
514
592
|
- `--no-compress` - 禁用压缩
|
|
@@ -527,19 +605,25 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
|
527
605
|
| `ERROR` | 仅错误面板 |
|
|
528
606
|
| `WARNING` | + 警告与兼容降级提示 |
|
|
529
607
|
| `INFO` (默认) | + 编译汇总、执行起止、统计表 |
|
|
530
|
-
| `DEBUG` | **超详细**: 全部埋点
|
|
608
|
+
| `DEBUG` | **超详细**: 全部埋点 (CPU 初始化、编译标签、原生执行结果) |
|
|
609
|
+
|
|
610
|
+
### 调试模式 (`--debug`)
|
|
611
|
+
|
|
612
|
+
`--debug` 是比 `--log-level DEBUG` 更高层的开关 (与旧版一致, 始终强制 DEBUG):
|
|
613
|
+
|
|
614
|
+
- **强制 DEBUG 日志**: 即使同时给出 `--log-level ERROR` 也按 DEBUG 输出
|
|
615
|
+
- **收尾现场**: 执行结束打印寄存器/向量状态与执行统计表
|
|
616
|
+
- **完整堆栈**: 未预期异常输出 rich 彩色完整 traceback
|
|
617
|
+
|
|
618
|
+
v5.9.0 起程序由 Go 原生引擎一次性执行, 不再有 Python 解释器级逐指令追踪;
|
|
619
|
+
逐指令/内存/SYS 级调试需在 Go 引擎侧扩展。
|
|
531
620
|
|
|
532
621
|
### 超详细输出 (`--log-level DEBUG`)
|
|
533
622
|
|
|
534
623
|
- **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 统计、原生库调用参数
|
|
624
|
+
- **编译/装载**: 指令数与汇编标签表
|
|
625
|
+
- **原生执行结果**: 状态、步数、PC、耗时、错误
|
|
626
|
+
- **错误处理**: 加载/汇编/编译/运行错误统一 rich 面板, 未预期异常输出完整 traceback
|
|
543
627
|
|
|
544
628
|
### 错误处理
|
|
545
629
|
|
|
@@ -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
|
|
|
@@ -437,18 +437,79 @@ v5.9.0 起**只有一条执行路径**: Python 完成 CIN/PL/ASM 编译后, 通
|
|
|
437
437
|
|
|
438
438
|
### 编译成独立可执行文件 (AOT)
|
|
439
439
|
|
|
440
|
-
把 CIN 程序编译成**静态链接的独立可执行文件** ——
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
440
|
+
把 CIN/ASM/PL/BIN/CO 程序编译成**静态链接的独立可执行文件** —— 运行时**不需要
|
|
441
|
+
Python、Go 工具链、libc 或任何动态库**。CIN 构建时会解析 `import` 闭包做依赖
|
|
442
|
+
完整性检查, 并把**全部依赖库在编译期展开嵌入产物** (产物不读取任何 `.cin` 文件)。
|
|
443
|
+
|
|
444
|
+
默认使用 **auto 后端**: 指令数不超过 20000 时走 **native** (把编译后的指令流
|
|
445
|
+
直接生成 Go 源码, 核心整数/控制流/内存/SYS 指令不再经过 UCBC 解码与 opcode
|
|
446
|
+
dispatch, 由 Go 编译器产出目标平台机器码); 超过阈值自动回退 **VM** (内嵌 UCBC
|
|
447
|
+
字节码), 避免大量指令展开导致 `go build` 极慢。`--build-backend auto|native|vm`
|
|
448
|
+
可强制指定。超过 800 条指令的 native 程序会自动按基本块拆分成多个 Go
|
|
449
|
+
函数,进一步控制编译时间。
|
|
444
450
|
|
|
445
451
|
```bash
|
|
446
|
-
# 本机平台
|
|
452
|
+
# 本机平台 (auto: 小程序 native, 大程序 VM)
|
|
447
453
|
codecin program.cin --build-exe program # Windows 自动补 .exe
|
|
448
454
|
|
|
449
|
-
# 交叉编译 (只需要安装 Go
|
|
455
|
+
# 交叉编译 (只需要安装 Go 工具链; native/vm 后端都支持)
|
|
450
456
|
codecin program.cin --build-exe app-linux --build-target linux/amd64
|
|
451
457
|
codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
458
|
+
|
|
459
|
+
# 强制某个后端 + 优化级别
|
|
460
|
+
codecin program.cin --build-exe app-native --build-backend native --optimize 2
|
|
461
|
+
codecin program.cin --build-exe app-vm --build-backend vm --optimize 2
|
|
462
|
+
|
|
463
|
+
# 独立编译 + 链接 (ASM/PL): 每个对象单独汇编, 再由链接器合并
|
|
464
|
+
codecin --emit-object main.asm -o main.co
|
|
465
|
+
codecin --emit-object lib.asm -o lib.co
|
|
466
|
+
codecin --link main.co --link lib.co -o app --optimize 3
|
|
467
|
+
|
|
468
|
+
# 也可以直接把源文件交给链接器 (即时编译为对象)
|
|
469
|
+
codecin --link main.cin --link lib.cin -o app
|
|
470
|
+
|
|
471
|
+
# CIN 库对象: 无 main 的文件作为函数库, 主文件用 extern 声明跨对象函数
|
|
472
|
+
codecin --emit-object lib.cin -o lib.co
|
|
473
|
+
codecin --emit-object main.cin -o main.co
|
|
474
|
+
codecin --link main.co --link lib.co -o app
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
静态库归档:
|
|
478
|
+
|
|
479
|
+
```bash
|
|
480
|
+
codecin --emit-archive --link lib.co --link lib2.co -o lib.colib
|
|
481
|
+
codecin --link main.co --link lib.colib -o app
|
|
482
|
+
codecin --link main.co --link lib.colib -o app-gc --gc-sections
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
链接器按 C 风格静态库语义,只拉取能解决当前未定义符号的成员。
|
|
486
|
+
|
|
487
|
+
CIN 示例:
|
|
488
|
+
|
|
489
|
+
```cin
|
|
490
|
+
// lib.cin
|
|
491
|
+
function helper() -> int {
|
|
492
|
+
return 7
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
// main.cin
|
|
496
|
+
extern function helper() -> int
|
|
497
|
+
|
|
498
|
+
function main() -> int {
|
|
499
|
+
println(int_to_str(helper()))
|
|
500
|
+
return 0
|
|
501
|
+
}
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
跨对象全局变量同样用 `extern` 声明:
|
|
505
|
+
|
|
506
|
+
```cin
|
|
507
|
+
// lib.cin
|
|
508
|
+
int counter = 5
|
|
509
|
+
|
|
510
|
+
// main.cin
|
|
511
|
+
extern int counter
|
|
512
|
+
extern function bump()
|
|
452
513
|
```
|
|
453
514
|
|
|
454
515
|
| 目标 | 说明 |
|
|
@@ -457,10 +518,15 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
|
457
518
|
| `linux/amd64` `linux/arm64` | ELF, **无 PT_INTERP**, 不依赖 glibc |
|
|
458
519
|
| `darwin/amd64` `darwin/arm64` | Mach-O, 静态 |
|
|
459
520
|
|
|
460
|
-
常见选项: `--build-target OS/ARCH`、`--build-
|
|
521
|
+
常见选项: `--build-target OS/ARCH`、`--build-backend auto|native|vm`、
|
|
522
|
+
`--optimize 0-3`、`--no-build-cache`、`--build-debug`、`--build-keep-temp`
|
|
523
|
+
(保留 `go build` 临时目录排错)。AOT 默认启用增量缓存 (源/依赖/工具链指纹命中时
|
|
524
|
+
直接复用产物), 缓存目录可用 `CODECIN_AOT_CACHE` 覆盖。
|
|
525
|
+
`--optimize` 作用于 CIN IR (窥孔/常量折叠/不可达代码删除); native 后端最终
|
|
526
|
+
机器码仍由 Go 编译器生成, 其自身优化由 Go 工具链决定。
|
|
461
527
|
`import "math.cin"`(裸名字 = codecin 内置标准库 `codecin/lib/`)在**编译期**展开, 因此产物自带用到的标准库, 运行时不需要任何 `.cin` 文件。
|
|
462
528
|
正常结束退出码 0, 运行期错误打印 stderr 并以 1 退出。
|
|
463
|
-
详见 [开发者编译文档 · AOT](docs/BUILDING.md
|
|
529
|
+
详见 [开发者编译文档 · AOT](docs/BUILDING.md)。
|
|
464
530
|
|
|
465
531
|
### 命令行选项
|
|
466
532
|
|
|
@@ -476,6 +542,7 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
|
476
542
|
- `--libs` - 列出内置标准库并标注执行路径要求
|
|
477
543
|
|
|
478
544
|
**日志与运行时行为**
|
|
545
|
+
- `--debug` - 调试模式 (强制 DEBUG 日志, 执行结束输出 CPU 状态与统计, 异常完整堆栈)
|
|
479
546
|
- `--log-level DEBUG|INFO|WARNING|ERROR|CRITICAL` - 日志级别 (默认 INFO)
|
|
480
547
|
- `--log-file <file>` - 日志输出到文件
|
|
481
548
|
- `--sandbox` - 沙箱模式 (在 Go 引擎侧拦截全部宿主能力系统调用)
|
|
@@ -486,11 +553,22 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
|
486
553
|
|
|
487
554
|
**编译选项**
|
|
488
555
|
- `--compile` / `--compile-only` - 编译为 .bin 字节码
|
|
489
|
-
- `--optimize 0-3` - 优化级别 (
|
|
556
|
+
- `--optimize 0-3` - IR 优化级别 (0 关闭; 1 窥孔; 2 常量折叠; 3 不可达代码删除)
|
|
490
557
|
- `--disasm` - 反汇编 .bin 字节码为文本清单后退出
|
|
491
558
|
- `-o, --output <file>` - 输出文件名 (.crom/.bin)
|
|
492
559
|
- `--strict` - 严格汇编模式
|
|
493
560
|
|
|
561
|
+
**AOT 选项 (`--build-exe`)**
|
|
562
|
+
- `--build-target OS/ARCH` - 交叉编译目标
|
|
563
|
+
- `--build-backend auto|native|vm` - auto 按指令数选 native/VM (默认) / 强制 native / 强制 VM
|
|
564
|
+
- `--no-build-cache` - 禁用 AOT 增量构建缓存 (含对象/归档链接缓存)
|
|
565
|
+
- `--build-debug` - 保留符号表/DWARF (不传 `-s -w`),便于调试
|
|
566
|
+
- `--build-keep-temp` - 保留 Go 构建临时目录
|
|
567
|
+
- `--emit-object` - 把 CIN/ASM/PL 编译为可重定位 `.co` 对象
|
|
568
|
+
- `--link INPUT` - 链接 `.cin/.asm/.pl/.co/.colib` 为可执行文件 (可重复)
|
|
569
|
+
- `--emit-archive` - 把 `--link` 输入打包为 `.colib` 静态库归档
|
|
570
|
+
- `--gc-sections` - 链接时删除从入口不可达的函数/代码段
|
|
571
|
+
|
|
494
572
|
**CROM选项**
|
|
495
573
|
- `--save` - 执行后保存 .crom 内存镜像 (v4 段式)
|
|
496
574
|
- `--no-compress` - 禁用压缩
|
|
@@ -509,19 +587,25 @@ codecin program.cin --build-exe app-mac --build-target darwin/arm64
|
|
|
509
587
|
| `ERROR` | 仅错误面板 |
|
|
510
588
|
| `WARNING` | + 警告与兼容降级提示 |
|
|
511
589
|
| `INFO` (默认) | + 编译汇总、执行起止、统计表 |
|
|
512
|
-
| `DEBUG` | **超详细**: 全部埋点
|
|
590
|
+
| `DEBUG` | **超详细**: 全部埋点 (CPU 初始化、编译标签、原生执行结果) |
|
|
591
|
+
|
|
592
|
+
### 调试模式 (`--debug`)
|
|
593
|
+
|
|
594
|
+
`--debug` 是比 `--log-level DEBUG` 更高层的开关 (与旧版一致, 始终强制 DEBUG):
|
|
595
|
+
|
|
596
|
+
- **强制 DEBUG 日志**: 即使同时给出 `--log-level ERROR` 也按 DEBUG 输出
|
|
597
|
+
- **收尾现场**: 执行结束打印寄存器/向量状态与执行统计表
|
|
598
|
+
- **完整堆栈**: 未预期异常输出 rich 彩色完整 traceback
|
|
599
|
+
|
|
600
|
+
v5.9.0 起程序由 Go 原生引擎一次性执行, 不再有 Python 解释器级逐指令追踪;
|
|
601
|
+
逐指令/内存/SYS 级调试需在 Go 引擎侧扩展。
|
|
513
602
|
|
|
514
603
|
### 超详细输出 (`--log-level DEBUG`)
|
|
515
604
|
|
|
516
605
|
- **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 统计、原生库调用参数
|
|
606
|
+
- **编译/装载**: 指令数与汇编标签表
|
|
607
|
+
- **原生执行结果**: 状态、步数、PC、耗时、错误
|
|
608
|
+
- **错误处理**: 加载/汇编/编译/运行错误统一 rich 面板, 未预期异常输出完整 traceback
|
|
525
609
|
|
|
526
610
|
### 错误处理
|
|
527
611
|
|