⌨️ 第二章 编程语言都有什么不同
📄 一句话概括

这一族语言的共同气质是【简便】:脚本语言寄生在宿主程序里干活,宏在编译/录制时替你展开重复动作,标记语言干脆只描述结构不描述计算——HTML 至今不是编程语言,这个结论本节负责掰正。

📝 本节和前面几节的关系

2-3/2-4 按【组织代码的世界观】分类,本节按【使用方式与寄生关系】分一组:脚本、宏、标记语言的共同点是都躲在某个宿主身边——脚本寄生于解释器或应用程序,宏寄生于编译器或办公软件,标记语言寄生于浏览器这类渲染器。

一、脚本语言:宿主程序里的自动化小弟

脚本(Script)原意是【剧本】——演员(宿主程序)照着念。脚本语言的设计目标不是从零构建大型软件,而是驱动现成的宿主干活:

脚本 宿主 典型用途
Bash/PowerShell 操作系统命令行 批量文件操作、部署
JavaScript 浏览器、Node.js 网页交互、后端服务
VBA Excel/Word 报表自动化
Python 脚本 Python 解释器 胶水、运维、数据处理

判断特征:脚本不需要编译成执行文件,拿着源文件就能跑(回收 2-1:解释器边翻边跑)。本课你写的每一个 .py、C++ 课之外的所有【小工具】,大多是脚本。

二、宏:两种同名不同命的【宏】

宏(Macro)=【预先定义、按规则展开】的替换机制。但它有两个完全不同的身份,教材没分清,这里必须掰正:

① 编译期宏(C 语言的宏)——文本替换发生在编译之前:

#define SQUARE(x) ((x) * (x))
int y = SQUARE(5);   // 预处理器把这一行替换成 ((5) * (5))

展开是纯文本操作,发生在编译器看代码之前;没有类型检查,用错了要到编译期甚至运行期才炸(经典的 SQUARE(a++) 双重自增陷阱)。

② 应用程序宏(Office 宏)——录制或编写的一串操作指令,让 Word/Excel 替你重复做一套动作;本质是 VBA 脚本(见 2-8 的 VBA 段),寄生在 Office 的对象模型上。

同名不同命:前者是编译器的预处理工具,后者是应用软件的自动化脚本——除了【替你重复劳动】这层意思,两者毫无亲缘。

三、标记语言:描述结构,不描述计算

标记语言(Markup Language)用标签给文本标注结构与含义:

<h1>标题</h1>
<p>一段正文,<strong>这部分加粗</strong>。</p>

它只有三件事:标注这是什么(标题/段落)、怎么组织(嵌套关系)、部分属性(链接指向哪)。没有变量、没有分支循环、没有计算——所以:

HTML 不是编程语言。 编程语言必须能表达逻辑(判断、循环、变量状态);HTML 只能表达结构。CSS 同理(描述样式);真正让网页【活起来】的是 JavaScript——【HTML 是骨架、CSS 是皮肤、JS 是肌肉】的说法对应的就是这个分工。

常见的标记语言:HTML(网页)、XML(通用数据描述)、Markdown(你此刻读的笔记本身)。

四、动手 Demo:亲手把【结构】与【逻辑】分开看

html_fragment = """
<h1>成绩单</h1>
<table>
  <tr><td>小明</td><td>88</td></tr>
  <tr><td>小红</td><td>92</td></tr>
</table>
"""

# 标记语言只负责【长什么样】,任何计算都做不了——
# 想算平均分,必须靠宿主语言(Python)来:
import re
scores = [int(s) for s in re.findall(r"<td>(\d+)</td>", html_fragment)]
print("标记语言给的只是结构;算平均分靠宿主:", sum(scores) / len(scores))

看到什么算成功:

标记语言给的只是结构;算平均分靠宿主: 90.0

读结果:HTML 片段里躺着两个分数(88 与 92),但它自己永远算不出 90.0——计算由宿主语言 Python 完成。这一行对比就是【标记语言不是编程语言】的最短证明。分数和为 180、条数为 2,180÷2 = 90.0。

五、30 秒实验

在浏览器里随便打开一个网页,按 F12(或右键→查看网页源代码)盯 30 秒:满屏的 <div>、<p>、<a> 就是标记语言的本体。再切到【控制台(Console)】标签输入 1+1 回车——能算出 2 的这个环境里跑的才是编程语言(JavaScript)。同一个页面,两种语言、两种身份。

六、常见误区

  1. 【会写 HTML 就等于会编程】——错。HTML 是标记语言,表达结构不表达逻辑;不过它是进入 Web 开发的合理第一步,不必妄自菲薄。
  2. 【宏是脚本的一种】——错。C 语言宏在编译前做文本替换,连【运行】都谈不上;Office 宏倒是脚本(VBA),但那是另一族东西。
  3. 【脚本语言都是玩具】——错。JavaScript 支撑着整个 Web 前端与相当份额的后端(Node.js),Python 支撑着 AI 产业;【简便】与【能扛大梁】不冲突。
自测三问(点开对答案) 1. **脚本语言最典型的特征是什么?** 答:寄生在宿主程序(浏览器、Office、Shell、解释器)里驱动现成环境干活,且不需要编译成执行文件。 2. **C 语言的宏与 Office 的宏,本质区别在哪?** 答:C 宏是编译前的文本替换机制;Office 宏是录制或编写的 VBA 操作脚本——同名不同命。 3. **为什么说 HTML 不是编程语言?** 答:它只能标注结构与含义,没有变量、分支、循环等表达逻辑的能力;计算要靠宿主(如 JavaScript)完成。

相关笔记