编程通用概念
编程通识回答“多数语言都绕不开什么”,用于建立可迁移的心智模型。具体语法仍回到相应语言笔记。
程序如何工作
跳转到“程序如何工作”flowchart LR A[源代码] --> B[编译或解释] B --> C[模块与依赖] C --> D[加载与运行] D --> E[内存、输入输出和并发] E --> F[结果或错误]| 主题 | 要回答的问题 | 笔记 |
|---|---|---|
| 类型与表示 | 一个值是什么、占多少空间、如何转换 | 隐式转换、字节序 |
| 表达式与运算 | 运算顺序和位级表示是否符合预期 | 位运算与移位 |
| 函数与控制流 | 数据如何进入和离开一个计算单元 | 函数返回 |
| 运行时与内存 | 数据位于哪里、生命周期由谁管理 | 调用栈、堆内存 |
| 结构化数据 | 如何在配置、接口和文档之间交换数据 | JSON、YAML 与 XML |
| 文本模式 | 如何可靠地查找、校验和提取文本 | 正则表达式 |
| 术语 | 如何准确理解跨语言文档 | 通用术语 |
编译、链接与运行
跳转到“编译、链接与运行”- 提前编译(AOT):程序运行前生成目标代码,启动和运行开销通常更可预测。
- 即时编译(JIT):运行期间把中间表示编译为机器码,可利用实际运行信息优化热点代码。
- 静态链接:依赖代码进入最终产物,部署直接,但产物较大,更新依赖通常要重新链接。
- 动态链接:程序装载或运行时解析共享库,便于共享和独立更新,但要处理版本、搜索路径和 ABI 兼容问题。
遇到错误时先判断阶段:语法与类型错误属于编译前端,未定义符号多发生在链接阶段,崩溃和错误结果属于运行阶段。阶段判断正确,排查范围会显著缩小。