ez—程序员的利器

作者:Terry Gliedt

AUIS 的根源可以追溯到 1982 年,当时卡内基梅隆大学和 IBM 公司决定联合开发一个基于个人计算机的校园计算设施,以取代当时校园内的分时系统。IBM 不仅提供了慷慨的资金,还提供了一些才华横溢的人才和访问 IBM 开发项目的机会。

其成果是一个我们熟知的图形用户界面,即 Andrew 用户界面系统 (Andrew User Interface System),以及一个文件系统,即 Andrew 文件系统 (Andrew File System)。该文件系统构成了 Transarc 公司 分布式计算环境 (Distributed Computing Environment) (DCE) 的基础,并作为开放系统基金会 (Open System Foundation) 软件的一部分提供。

由多家公司和大学组成的 Andrew 联盟 (Andrew Consortium) 资助了 AUIS 的当前开发。AUIS 可在各种平台上使用,包括 Linux、AIX、Solaris、Ultrix、HP UX 以及其他平台。

在 6 月初,Andrew 联盟发布了 Andrew 用户界面系统 (AUIS) 的 6.3 版本。这促成了 auis63L0-wp.tgz 的发布,其中仅包含 AUIS 的一小部分,适合作为文字处理器使用。

现在又发布了另一个软件包 auis63L0-src.tgz,位于 sunsite.unc.edu/pub/Linux/X11/andrew 目录下。这是一组对文字处理软件包的补充,旨在支持程序员。本文将介绍 ez 为简化我们的程序编码和分析提供的支持。《Linux Journal》未来的文章将介绍 AUIS 的其他部分。

ez 视图

作为程序员,我们使用与文字处理相同的简单工具 ez。我们的源代码程序被加载(或创建)并在窗口中显示。但与 ez 文字处理器不同,程序源代码(文档)中的数据并不直接控制发生的事情。相反,编辑器 ez 实际上“知道”正在编辑的源语言的语法,并提供源代码的专门 视图

就像图表实际上只是数字数组的不同表示形式一样,ez 具有提供程序源代码独特视图的能力。这使得编辑器可以在您输入程序源代码时为您提供帮助。ez 还为编译您的程序提供帮助。最后,ez 可以帮助您分析程序,以帮助您了解数据在何处被引用或例程在何处定义。

ez 为多种语言提供支持,包括汇编语言、Pascal、Modula、Lisp、C 和 C++。它为每种语言的源文件提供独特的视图。视图由您编辑的文件的扩展名触发。例如,ez 会将文件 test.c 视为 C 程序,并将文件 test.C 视为 C++ 程序。

输入您的源代码

图 1. -fg black -bg lavenderblush

当您第一次编辑 C 程序时,您将看到类似图 1 的内容。您会立即看到许多使程序更易于阅读的功能

  • include 语句采用固定字体

  • 注释采用蓝色斜体字体

  • 语言中的特殊单词,如 char、int、while 等,采用洋红色。(这些是 ez 视图已经识别的单词。)

  • 函数名称,如 main,采用红色,使用不同的字体

  • 其他特殊单词,如 exit,采用绿色。(这些是用户定义为特殊的单词。)

  • 字符串以固定字体显示

图 2. 正在进行的注释

图 3. 正在进行的 C 子句

当您输入代码时,ez 会在它弄清楚您正在编码的内容后立即做出反应。在图 2 中,您可以看到正在形成的注释。请注意,颜色和字体已经应用,即使注释尚未关闭。在图 3 中,您可以看到 ez 如何处理配对分隔符,如 ()、{} 和 []。当您输入尾部分隔符(例如,“}”)时,ez 将反向视频显示整个区域,直到匹配的分隔符。当您继续键入时,反向视频将被移除。

ez 将尝试始终保持其视图正确,但您可能会混淆它。例如,您可能会在没有注释分隔符的情况下编码字符串,然后在稍后添加 /* */ 运算符。当发生这种情况时,您只需在“Source Text”菜单卡上选择菜单项“Redo styles”。这将导致整个屏幕重新绘制并应用视图。

图 4. 重新格式化您的 C 源代码

ez 还会在您输入文本时尝试通过自动缩进您的源代码行来提供帮助。您无需输入制表符进行缩进,因为 ez 会自动为您执行此操作。与视图的其他方面不同,这确实会修改源代码,因为它会插入制表符以对齐文本。您也可以随时要求 ez 重新格式化您的源代码。只需选择您要重新格式化的区域(即,使其以反向视频显示),然后在“Source Text”菜单卡上选择菜单项“Format line/region”。您可以在图 4 中看到对我们的原始源代码程序执行此操作的结果。一个方便的功能是,当您输入尾部分隔符(如“}”)时,ez 将反向视频显示到匹配的分隔符(“{”)的区域。如果您此时按下制表符,ez 将重新格式化选定的区域,从而节省您以后使用鼠标重新选择区域的需要。

可以进行大量的定制来控制源代码视图的行为。如果您不喜欢 ez 缩进源代码的方式,只需避免使用 Format line/region 菜单项,您的源代码就不会被修改。无论您的源代码看起来如何,除非您选择此菜单项,否则您的原始源代码行都不会被修改。

图 5. 图 4 中的源代码在更宽的窗口中

就像文本文件一样,ez 会根据窗口的宽度自动换行。例如,图 5 显示了与图 4 相同的源代码。请注意,注释和源代码行已重新对齐,使其更具可读性。

过去,我会花费大量精力使我的源代码看起来“漂亮”。对我来说,我的源代码看起来一致很重要,因为它使代码更易于阅读。自从我开始使用 ez 以来,我不再努力格式化代码,而是专注于输入代码。完成后,我用 ez 重新格式化它,就完成了。我特别喜欢注释的重排。这促使我改变了我的注释风格。我很少再将注释放在与代码相同的行上。相反,我依靠代码块开头的段落来解释接下来会发生什么。我非常喜欢这种编码方法。其他人可能不喜欢这种风格。我使用 ez 中我发现有用的部分,而忽略其他部分。我鼓励您也这样做。

编译您的代码

ez 提供支持来帮助您查找编译错误。这是通过调用 make,捕获输出,然后要求 ez 向您显示出错的源代码行来完成的。这是通过创建源代码的第二个窗口(在 Window menu card 上选择 New Window)来完成的。在任何一个源代码窗口中,在 Make menu card 上选择 Start Compile。您可以在图 6 中看到结果。当编译完成并且存在错误时,在“Make”菜单卡上选择“Next Error”。ez 将切换文件到有错误的文件(如果需要),并显示编译器标识为错误的行。更正错误并重新开始该过程。

图 6a. 查找编译错误

图 6b. 编译错误

代码分析

有时,仅仅让编辑器格式化源代码就有助于理解代码。我第一次在我的 C 源代码上使用 ez 时,我立即注意到一些代码显示为注释。“哈!ez 中的一个 bug”,我想。好吧,确实有一个 bug,但不是在 ez 中。我发现我在一个我认为正在工作的程序中遗漏了一个结束注释分隔符。我实际上注释掉了 10 行代码。这足以让我相信 ez 中视图的价值。

图 7. 压缩源代码程序中的行

ez 不是像某些商业应用程序那样的完整源代码浏览器,而是提供了一组功能来帮助您浏览源代码。有时您不想看到程序的某些部分。用鼠标突出显示程序的该部分,然后在“Source Text”菜单卡上选择“Compress region”,您将看到如图 7 所示的内容。如果您单击“compressed lines”框,代码将再次显示。在“Source Text”菜单卡上选择“Decompress all”将展开所有压缩的源代码区域。

程序 ctags 是在大多数 Unix 系统上找到的程序。它将生成一个名为 tags 的文件,其中包含一组源文件中的函数的交叉引用信息。您还可以通过发出命令 “ctags -v *.h *.c” 来获取有关变量的交叉引用信息。ez 可以使用此文件来向您显示函数或变量在何处定义。通过在“Tags”菜单卡上选择菜单项“Load New Tag File”或“Rebuild Tag File”来加载 tags 文件。要查找变量或函数在何处定义,请用鼠标选择变量,然后在“Tags”菜单卡上选择“Find Tag”。ez 将切换到定义该变量或函数的文件,并向您显示定义它的行。

模板

到目前为止,我们一直在讨论编辑现有源文件。当您编辑新的、不存在的源文件时,ez 提供了额外的支持,它提供了一种方法让您控制“模板”或默认文件。每种语言都有自己的模板文件,可以在 /usr/andrew/lib/tpls 中找到。您可以通过创建自己的模板目录并通过定义以下内容告诉 AUIS 应用程序您的模板在哪里来定制您自己的模板:

TEMPLATEPATH 环境变量。要设置此项,请发出以下命令

mkdir $HOME/tpls
cp /usr/andrew/lib/tpls/c.tpl $HOME/tpls
export TEMPLATEPATH=${HOME}/tpls:/usr/andrew/lib/tpls   # For bash/ksh
setenv TEMPLATEPATH ${HOME}/tpls:/usr/andrew/lib/tpls   # For
csh/tcsh

图 8. C 语言源文件的模板

现在您可以编辑您自己的 $HOME/tpls/c.tpl 模板,并根据您的需求进行定制。图 8 向您展示了这样一个模板。您将看到的内容很像传统的程序源代码,实际上,它就是。这是您放置自己的“样板”代码的地方;您希望在大多数程序中使用的代码。然而,更有趣的是 dogtags 的存在(名字有什么关系呢?)。这些是用“<@”和“@>”分隔的字段,在加载模板时会自动替换。例如,在图 8 中,您看到 <@name@>,它被替换为正在编辑的文件名 (fig1.c)。其中大多数都很明显。有关所有 dogtags 的完整列表,请参阅命令 auishelp dogtags 显示的帮助文本。

控制颜色和字体

此模板文件还控制您在图 1 中首次看到的颜色和字体。在编辑模板文件时,在“File”菜单卡上选择“Edit Styles”。这将打开第二个窗口,用于定义此模板中数据属性。首先选择左上角的“<No Menu>”字段。在右侧,您将看到与语言的各个方面(comment、function 等)相对应的关键字。选择其中一个,将显示其他属性,如字体和大小、颜色、间距等。使用这些您可以更改您想要的任何属性。此更改将在您保存模板然后编辑新源文件后生效。它不会对您已在编辑的文件生效。

打印和预览

就像文本文件一样,ez 将按照您在屏幕上看到的方式打印源代码程序,包括字体。无论您使用什么颜色显示源代码,打印都使用白色背景上的黑色前景(正如您所期望的那样)。预览过程使用 ghost-view 来显示生成的 PostScript 文档。

更多信息

邮件列表可在 info-andrew@andrew.cmu.edu 上获得(订阅请发送邮件至 info-andrew-request@andrew.cmu.edu)。新闻组 comp.soft-sys.andrew 专门讨论 AUIS。World Wide Web 主页可以在 http://www.cs.cmu.edu:8001:/afs/cs.cmu.edu/project/ atk-ftp/web/andrew-home.html 找到。Prentice-Hall 出版了一本书,《Multimedia Application Development with the Andrew Toolkit》(ISBN 0-13-036633-1)。联盟提供了一份优秀的教程,通过发送邮件至 info-andrew-request@andrew.cmu.edu 并询问手册《A User's Guide to AUIS》即可获取。

Terry Gliedt (tpg@mr.net) 去年离开了蓝色巨人 (Big Blue),此前他在 IBM 工作了 20 多年。尽管他使用 Un*x 和 AUIS 已经超过六年,但他仍然是 Linux 的新手。Terry 从事合同编程,教授 C/C++ 和 Unix 课程,并撰写偶尔的技术文档。

加载 Disqus 评论