WEBVTT 00:00:00.000 --> 00:00:05.305 你们已经接触了一些JavaScript, 在这一部分 00:00:05.305 --> 00:00:10.473 我想谈谈是什么将源代码和CPU中的机器代码联系起来。 00:00:10.473 --> 00:00:15.705 这一般超过了计算机语言这个话题 00:00:15.705 --> 00:00:20.652 程序员用某种编程语言编程 编程语言一般来说具有有高级特性 00:00:20.652 --> 00:00:25.722 比如循环,if语句和字符串 00:00:25.722 --> 00:00:30.545 这些都是更高级的特性,也是CPU中机器代码中最为常见的 00:00:30.545 --> 00:00:35.307 所以程序员用他们使用的特定程序语言编写源代码 00:00:35.307 --> 00:00:39.623 这是一个C++程序代码示例 00:00:39.623 --> 00:00:43.993 这个语句将一个字符串的值赋值给一个变量 接着输出这个字符串和一个叹号 00:00:43.993 --> 00:00:48.145 你猜怎么着? 这有点像JavaScript代码 00:00:48.145 --> 00:00:52.624 我们已经在语法层次上接触了许多语言 00:00:52.624 --> 00:00:57.927 和他们对引号和分号的使用 00:00:57.927 --> 00:01:04.232 那么你是怎么使C++源代码在CPU上运行起来的呢? 一种方案是使用编译器 00:01:04.232 --> 00:01:10.157 编译器是一个单独的程序 00:01:10.157 --> 00:01:15.186 编译器读入源代码并对代码进行翻译 00:01:15.186 --> 00:01:20.215 比如 00:01:20.215 --> 00:01:24.645 源代码中可能用一个if语句 00:01:24.645 --> 00:01:29.555 而机器代码中没有与之对应的某一指令 00:01:29.555 --> 00:01:34.404 但是可能用5个指令的作用和if语句功能相同 00:01:34.404 --> 00:01:40.991 于是编译器将if语句展开(即替换成等价的5的机器指令) 再如Firefox是用C++编写的