2.3 编程初步

  程序就是一系列指令的集合,这些指令能驱使计算机去做不同的事情。有时候计 算机执行的一个指令取决于它所执行的前一个指令。本章将介绍两种主要的给出指令, 也叫 “命令”,的方式。一种方式是使用 解释器 ,另一种方式是使用 编译器。人类语言对 于计算机来说语义模糊太难于理解,因此计算机命令都用为了特定目的设计的的一种或 其他种计算机语言写的。

2.3.1 解释器

  使用解释器的计算机语言就像一个环境。解释器给出提示符后,你输入一个命 令,解释器就会执行这个命令。对于更复杂的程序,可以把命令写入一个文件然后 让解释器装入这个文件再执行其中的命令。如果有错误发生,许多解释器会进入一个 调试环境让你来追踪问题。

  这种方式的优点就是可以马上看见命令的执行结果,并且迅速的改正错误。如 果你想和别人分享自己的程序,最大的坏处就显现出来了。别人需要和你一样的解释 器,或者你必须把解释器给他们,而且他们还要知道怎么使用这个解释器。用户也不 希望在按错一个键的情况下就被扔到调试环境中。从程序执行效率来看,解释器会 使用很多内存,而且通常情况下生成的代码也不如编译器生成的有效率。

  我觉得,如果你从未编过程序,最好从解释类语言开始。Lisp,Smalltalk, Perl 和 Basic 语言就提供了这样的环境。UNIX® 中的 shell (sh, csh) 自身就是一个解释器。实际情 况中,很多人都在他们自己的机器上写 shell “scripts” 来做很多 “维护”工作。的确,UNIX 的哲学中有一部分就是提供很多小工具, 并使用 shell scripts 把这些工具组合起来去做有用的工作。

2.3.2 FreeBSD 提供的解释器

  在 FreeBSD Ports Collection 中,有一个列表列出了提供的解释器。同时还简 单讨论了一些更受欢迎的解释类语言。

  从 Ports Collection 中如何取得并安装应用程序的教程可以从手册的 Ports section 中找到。

BASIC

Beginner's All-purpose Symbollic Instruction Code 的缩写。20世 纪50年代被开发出来给大学生学习编程。在20世纪80年代生产的个人电脑中包 含了这种语言。BASIC 语言是很多程序员学习的第一个 编程语言。同时,它也是 Visual Basic 的基础。

Bywater 的 Basic 解释器能在 Ports Collection 中的 lang/bwbasic 找到。Phil Cockroft 的 Basic 解释器 (以前叫 Rabbit Basic) 在 lang/pbasic 中。

Lisp

20世纪50年代开发的一种语言,作为当时那些“基于数字 ”的语言的补充。Lisp不是基于数字的,而是基于列表;实际上这个语 言的名字就是 “List Processing”的缩写。在 AI (Artificial Intelligence) 圈子中非常受欢迎。

Lisp 是一种非常强大而复杂的语言。但也可能变得异常庞大而臃肿。

在 FreeBSD 中的 Ports Collection 里面有各种可以在 UNIX 系统上运 行的 Lisp 实现。GNU Common Lisp 在 lang/gcl 里可以找到。Bruno Haible 和 Michael Stoll 的 CLISP 在 lang/clisp 中可以找到。而像包含一个可以高 度优化代码的编译器的 CMUCL,或者像比较简单的 Lisp 的实现的 SLisp 则 用几百行 C 代码实现了大部分 Common Lisp 的功能。两个语言分别在 lang/cmucllang/slisp 中可以找到。

Perl

对于系统管理员来说非常受欢迎的脚本语言;同时也经常被用来写万维 网服务器的 CGI 脚本。

Perl 在 Ports Collection 中的 lang/perl5.8 可以找到,适合所有 FreeBSD 版本。 而且在 4.X 版本中是作为基本系统的 /usr/bin/perl 来安装的。

Scheme

Lisp 的一个变种。比 Common Lisp 更加紧凑而清晰。在大学里面相当 流行因为足够简单。往往当作第一门语言教给大学生,而且在研究领域也有一 定程度的吸引力。

Scheme 在 Ports Collection 中的 lang/elk 可以找到 Elk Scheme 解释器。 lang/mit-scheme 中的是 MIT 的 Scheme 解释器。在 lang/scm 中是 SCM Scheme 解释器。

Icon

Icon 是一种高级语言,在很多方面适合处理字符和结构。FreeBSD 中的 Icon 版本在 lang/icon 中可以找到。

Logo

Logo 是一种容易学习的语言,并且在许多课程里面都作为一个介绍性 的编程语言存在。如果给小孩子上编程课程,Logo 是一个非常棒的开始。因 为,即使对小孩子来说,要用 Logo 画图形也是很容易的事情。

FreeBSD 中的 Logo 最新版本可以在 lang/logo 中找到。

Python

Python 是种面向对象的解释类语言。拥护的人都说 Python 是开始学 习编程的最佳语言。因为相对来说比较容易起步,而且与那些流行的能开发庞大而复 杂的解释类语言来比(Perl 和 Tcl 在这个方面很流行)一点也不差。

最新版本的 Python 可以在 Ports Collection 的 lang/python 中找到。

Ruby

Ruby 是一个解释类语言,并且是纯面向对象的。因为其语法容易理解 而变化多端并且适合开发以及维护庞大而复杂的程序而广泛流行。

Ruby 可以在 Ports Collection 中的 lang/ruby18 中找到。

Tcl 和 Tk

Tcl 是一个嵌入式的解释类语言,能够被移植到很多平台上面。因此变 得非常流行。它既可以快速地写出小的应用程序,也可以(和 Tk 一起使用, 一种图形工具)写出功能繁多的程序。

FreeBSD 中不同版本的 Tcl 都在 ports 里面。最新版本,Tcl 8.5,可以 在 lang/tcl85 中找到。



2.3.3 编译器

  编译器则非常不同。首先,代码可以使用编辑器写到一个或多个文件里面。然 后再使用编译器来编译代码,看这些代码是否能被接受。如果编译不能通过,咬紧牙 关您再打开编辑器重新修改吧;如果编译通过,并且编译器给了你一个程序。您可以 在命令行下执行或者到调试环境中执行以便查看代码有没有被正确执行。 [1]

  很明显,这种方式并不如解释器直接。但却可以让你做很多解释类语言无法做 的困难的甚至无法完成的工作。例如直接与操作系统交互──或者,你甚至可以 写自己的操作系统。如果你要写非常有效率的代码,编译器也很有用。编译器可以花 一些时间来优化代码,而解释器是无法完成的。另外,分享你写的编译类程序比解释 类语言要直接得多。只要把编译好的程序给别人就行,当然我们假定别人和你都有同 一类操作系统。

  编译类语言包括 Pascal,C 和 C++。C 和 C++ 很严格,适合那些有更多经验 的程序员;而 Pascal,从另一方面来说,被设计成为一个教学语言,适合初学者。 FreeBSD 在基本系统中没有提供 Pascal。但是在 Ports 套件中提供了 Free Pascal Compiler, 可以从 lang/fpc 安装它。

  如果你使用不同的程序来写编译类语言,编辑-编译-运行-调试 这个循环会变 得很烦人。很多商业编译器开发了 Integrated Development Environments (缩写为 IDE)。FreeBSD 在基本系统中没有包含 IDE,但是在 devel/kdevelop 提供了一个例子。你也可 以使用 Emacs 当作 IDE。把 Emacs 当作 IDE 在 第 2.7 节 中有讨 论。

备注

[1]

如果你在命令行下执行,你也许会得到一个 core dump。

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.