从AutoLISP 走 向Visual LISP

黄 晓 宇


一、AutoLISP 不 再 辉 煌

---- Autodesk 公 司 的AutoCAD 是 目 前PC 平 台 上 最 流 行 的 通 用 型 计 算 机 辅 助 设 计 系 统。 为 了 便 于 用 户 在 其 基 础 上 作 二 次 开 发, 形 成 各 专 业 化 的 计 算 机 辅 助 设 计 系 统, 自R2.1 开 始,Autodesk 公 司 在AutoCAD 内 部 加 入 了 用 户 化CAD 系 统 的AutoLISP 语 言。AutoLISP 语 言 作 为 一 种 嵌 入 在AutoCAD 内 部 的LISP 语 言, 它 采 用 了 与 标 准LISP 语 言 最 为 相 近 的 语 法 和 约 定。 虽 然AutoLISP 只 包 含 标 准LISP 中 的 一 个 子 集, 却 增 加 了 许 多 针 对AutoCAD 的 专 用 工 具, 这 些 工 具 可 以 完 成 存 取 和 修 改AutoCAD 图 形 实 体 数 据, 存 取AutoCAD 的 块 表、 层 表、 视 图 表、 字 体 表 及 线 型 表, 控 制AutoCAD 的 图 形 屏 幕 和 设 备 输 入 等。

---- 作 为 第 一 代AutoCAD 用 户 化CAD 开 发 的 标 准 语 言,AutoLISP 的 优 点 是 显 而 易 见 的:

---- 首 先, 源 于LISP 的AutoLISP 语 言 语 法 规 则 简 单、 灵 活 且 易 学。 其 程 序 和 数 据 都 采 用 符 号 表 达 式(Symbolic-expression) 的 形 式, 在 一 个LISP 程 序 中 可 以 把 另 一 个LISP 程 序 当 作 其 数 据 来 处 理。 这 种 符 号 表 达 式 屏 蔽 了 任 何 复 杂 过 程, 并 可 以 用 来 描 述 任 何 数 据 结 构。 因 此 编 程 方 法 十 分 灵 活, 相 当 于 一 个 一 个 的 函 数 调 用。

---- 其 次,AutoCAD 的 二 次 开 发, 主 要 是 根 据 各 专 业 的 具 体 要 求, 实 现 对AutoCAD 的 图 形 实 体 和 各 种 参 数 表 的 数 据 进 行 存 取 和 编 辑, 或 是 对AutoCAD 进 行 文 件 的 传 输。 而AutoLISP 提 供 的 大 多 数 函 数 都 是 直 接 针 对AutoCAD 操 作 的, 用AutoLISP 可 以 编 写 出 最 简 单、 最 直 接 的 访 问AutoCAD 图 形 数 据 库 的 程 序。 可 以 说,AutoLISP 是 探 索AutoCAD 奥 秘 的 最 简 捷 的 工 具。

---- 经 过 多 年 的 努 力,AutoLISP 语 言 与AutoCAD 系 统 一 样, 其 性 能 和 功 能 都 得 到 了 不 断 的 改 进, 使 得AutoLISP 成 为AutoCAD 用 户 化CAD 的 主 要 开 发 工 具,AutoCAD 因 此 成 为 具 有 良 好 开 放 性 的 系 统 而 更 为 普 及,Autodesk 公 司 也 从 一 个 小 公 司 迅 速 发 展 成 为 世 界 上 最 大 的 软 件 公 司 之 一。

---- 随 着 计 算 机 技 术 的 飞 速 发 展,CAD 在 工 程 中 的 应 用 层 次 也 在 不 断 提 高, 集 成 化、 智 能 化 的CAD 系 统 已 成 为 当 今CAD 工 程 的 主 流, 这 样 给 开 发CAD 系 统 带 来 的 是 相 关 设 计, 计 算 处 理 越 来 越 多, 程 序 设 计 越 来 越 复 杂、 源 代 码 越 来 越 庞 大, 这 使 得AutoLISP 的 不 足 变 得 日 益 明 显:

---- ★ 缺 乏 集 成 开 发 环 境 AutoLISP 源 程 序 用 一 般 的 文 本 软 件 编 辑, 运 行 必 须 在AutoCAD 环 境, 不 具 备 其 他 语 言 常 用 的 跟 踪、 断 点、 单 步 等 程 序 调 试 手 段, 难 以 胜 任 大 型 系 统。

---- ★ 综 合 处 理 能 力 差 AutoLISP 缺 少 对 操 作 系 统 文 件 操 作 和 访 问 外 部 数 据 库 的 能 力, 也 不 具 备 当 今 流 行 的 编 程 能 力( 如 面 向 对 象 编 程), 难 以 开 发 出 高 层 次 的CAD 系 统。

---- ★ 程 序 运 行 速 度 慢 解 释 执 行 方 式 决 定 了AutoLISP 程 序 的 运 行 速 度 较 慢, 不 能 适 应 含 有 大 量 设 计 数 据 计 算 的CAD 系 统。

---- ★ 安 全 性 能 差 AutoLISP 应 用 程 序 多 为ASCII 源 代 码 或 易 于 还 原 的 译 码, 容 易 被 人 为 变 动、 编 辑, 造 成 系 统 维 护 困 难。 其 算 法 源 代 码 几 乎 是 透 明 的, 不 利 于 保 护 开 发 者 的 合 法 权 益。

---- ★ 可 读 性 差 AutoLISP 的 符 号 表 达 式 描 述 方 式 在 给 其 程 序 带 来 简 洁 的 同 时, 也 带 来 了 可 读 性 差 的 缺 点, 无 法 自 动 检 查 源 程 序 的 语 法 结 构、 符 号 匹 配, 给 程 序 调 试 带 来 较 大 的 困 难。

二、 应 用 呼 唤Visual LISP

---- 由 于AutoLISP 存 在 自 身 无 法 解 决 的 问 题, 为 了 适 应AutoCAD 环 境 下 的 较 大 型 用 户 化CAD 应 用 系 统 的 开 发,Autodesk 公 司 从AutoCAD R11 开 始, 推 出 采 用C 语 言 的 开 发 环 境ADS(Advance Development System), 借 助C/C++ 语 言 的 性 能 和 资 源, 完 成 许 多AutoLISP 语 言 难 以 实 现 的 任 务。 随 着Windows 平 台、 面 向 对 象 编 程 技 术 等 先 进 技 术 的 日 益 成 熟 和 普 及,AutoCAD 也 和 其 他 系 统 一 样 迫 切 需 要 一 种 全 新 的 面 向 对 象 编 程 的 开 发 环 境。 在AutoCAD R13 之 后, 又 推 出 了 新 一 代 的 直 接 面 向 对 象 的 二 次 开 发 工 具ARX(AutoCAD Runtime Extension) 以 及 更 新 的AutoCAD R14 ObjectARX SDK 开 发 工 具 包。 为 开 发 高 自 动 化 程 度、 高 集 成 化 及 高 性 能 的 用 户 化CAD 系 统 提 供 了 一 种 极 为 有 效 的 工 具。 是AutoCAD 目 前 用 户 化 的 主 流 开 发 工 具。

---- 然 而, 不 论 是ADS 还 是ARX 或 是ObjectARX SDK 环 境, 它 们 都 是 基 于C/C++/VC 等 编 程 语 言 的。 对 于 全 球 超 过180 万AutoCAD 合 法 用 户 中 的 多 数 用 户 来 说, 在 短 时 期 内 学 好C/C++/VC 编 程 语 言, 并 熟 练 用 于AutoCAD 系 统 和 程 序 开 发, 无 疑 是 相 当 困 难 的。 再 者, 自 从1986 年 引 入AutoLISP 以 来, 全 球 大 量 的 计 算 机 软 件 开 发 商 和 用 户 已 经 用AutoLISP 编 写 出 了 数 以 万 计 的 实 用 系 统 和 应 用 程 序。 对AutoCAD 来 说, 这 无 疑 是 一 笔 巨 大 的 资 源 和 财 富, 也 是 其 赖 以 发 展 的 基 础 之 一。 若 轻 易 放 弃, 将 会 是 一 种 巨 大 的 资 源 浪 费, 甚 至 有 可 能 影 响AutoCAD 今 后 的 发 展。 一 个 有 远 见 的 公 司 是 决 不 会 轻 易 浪 费 这 一 宝 贵 资 源 的。 为 此,Autodesk 公 司 于1998 年3 月 底 宣 布 推 出 新 一 代 可 视 化LISP 编 程 软 件 — —Visual LISP。

---- 从Autodesk 公 司 网 址(http://www.autodesk.com/products/acadr14/compapps/vlisp) 上, 我 们 可 以 下 载 一 个 自 动 解 压 的 打 包 文 件Vlbeta.exe(3.9MB), 即Visual LISP 1.0 Beta for AutoCAD R14。 在Windows 95/NT 环 境 下, 缺 省 情 况 即 可 将Visual LISP 安 装 在AutoCAD R14 文 件 夹 下 名 为VLISP 的 文 件 夹 中。

---- 尽 管 该 软 件 是 一 个 演 示 版, 但 从 中 可 以 看 到Visual LISP 给 我 们 带 来 了 多 年 所 希 望 的 既 保 持AutoLISP 的 特 色, 又 引 入 最 新 编 程 技 术 的 全 新 的 集 成 开 发 环 境。

三、Visual LISP 特 色 显 著

---- ( 一) 兼 容AutoLISP

---- 为 了 充 分 利 用AutoLISP 语 言 的 优 势 和 资 源, 新 设 计 的Visual LISP 采 用 与AutoLISP 兼 容 的 模 式。 这 使 得 原 有 的 用AutoLISP 编 写 的 系 统 和 应 用 程 序 只 稍 加 修 改 便 可 在Visual LISP 环 境 中 运 行, 支 持 和 维 护 了 用 户 在 现 有AutoCAD 应 用 系 统 上 的 投 资。

---- Visual LISP 也 十 分 精 明 地 把 它 的 基 于 对 象 编 程 方 式, 设 计 成 用AutoLISP 语 言 编 程 方 式, 同 时 新 增 了 许 多 函 数 和 系 统 变 量, 这 使 得AutoCAD 用 户 化 或 应 用 程 序 的 开 发 工 作 变 得 更 加 容 易。

---- 与AutoLISP 不 同 之 处 是Visual LISP 采 用 了 向 标 准LISP 看 齐 的 标 准, 以 便 更 加 兼 容 由LISP 语 言 开 发 的 其 他 人 工 智 能 系 统, 也 是 编 程 语 言 走 向 标 准 化 的 重 要 步 骤。 因 此,Visual LISP 有 时 会 表 现 得 与AutoLISP 不 一 致。

---- ( 二) 面 向 对 象 编 程 技 术

---- Visual LISP 同Microsoft ActiveX、ObjectARX 和Microsoft Visual Basic 一 样 都 是 面 向 对 象 编 程 的。 通 过Autodesk 公 司 开 发 的Visual LISP ActiveX 接 口,AutoCAD 对 象 模 型 在 交 叉 应 用 集 成 方 面 具 有 更 好 的 适 应 性, 这 就 使 用 户 所 开 发 的 应 用 程 序 不 仅 兼 容AutoCAD 软 件, 而 且 同 其 他ActiveX-Compliant 应 用 程 序 一 样 通 过 联 合 库 可 以 方 便 地 引 用, 从 而 解 决 了 多 年 带 来 的 应 用 程 序 智 能 化、 集 成 化 的 问 题。

---- Visual LISP 允 许 用 户 用 开 发 的AutoLISP 应 用 程 序 调 用 或 转 换 成 一 个ADS 或ARX 模 块, 因 此, 可 以 从 外 部 加 载 和 更 新AutoCAD 软 件 的 多 种 版 本。 这 种AutoCAD 软 件 的 结 构 化 合 成 模 式, 能 为 用 户 带 来 系 统 更 新 而 无 需 更 新 整 个AutoCAD 系 统 的 好 处。

---- ( 三) 功 能 强 大 的 集 成 开 发 环 境

---- Visual LISP 是 一 个 功 能 强 大 的 集 成 开 发 环 境。 它 集 成 了AutoLISP 程 序 开 发 期 间 所 需 的 几 大 主 要 工 具 和 功 能, 主 要 包 括:

---- ◆ 兼 容AutoLISP 采 用Compile-during-Load 技 术 实 现 完 全 的AutoLISP 模 拟, 以 实 现 对AutoLISP 语 言 兼 容。

---- ◆ 全 功 能 文 本 编 辑 采 用AutoLISP 和DCL 彩 色 编 码 及 其 他AutoLISP 语 法 支 持 技 术 的 全 屏 幕 文 本 编 辑 器, 可 以 方 便 用 户 输 入AutoLISP 源 代 码。 并 通 过 彩 色 编 码 对 源 程 序 不 同 部 分 加 以 颜 色 区 分, 以 改 善AutoLISP 源 程 序 的 可 读 性。

---- ◆ 多 种 检 查 器 语 法 检 查 器 可 以 用 来 检 查AutoLISP 程 序 结 构 错 误 和 内 部 函 数 中 的 变 元 错 误。 综 合 检 查 器 提 供 对 数 据 结 构 中 变 量 和 表 达 式 的 值 的 浏 览 和 编 辑 功 能。

---- ◆ 动 态 调 试 专 为AutoLISP 设 计 的 源 程 序 调 试 程 序 具 有 极 大 的 灵 活 性。 支 持 在 一 个 窗 口 单 步 执 行AutoLISP 源 代 码 而 在AutoCAD 窗 口 中 同 时 显 示 该 代 码 的 执 行 效 果。

---- ◆ 先 进 的 编 译 器 文 件 编 译 器 可 以 把AutoLISP 源 程 序 编 译 成 二 进 制 格 式 文 件, 极 大 地 改 进 了 程 序 运 行 速 度, 并 增 强 了 应 用 程 序 的 安 全 性。Visual LISP 的 源 程 序 文 件(.LSP) 或 被 编 译 文 件(.FAS) 可 以 利 用 系 统 提 供 的Application Wizard 软 件 打 包 成 一 个 单 一 的ADS 或ARX 模 块。

---- 综 合 上 述, 我 们 可 以 看 出Visual LISP 是 一 种 已 将“ 古 老 的”AutoLISP 语 言 的 优 点 完 全 保 留, 缺 点 完 全 克 服, 并 与 最 新 的 编 程 技 术 相 结 合 的 全 新 的 集 成 开 发 系 统。 它 的 推 出 无 疑 会 引 起 广 大 的AutoCAD 用 户 及 开 发 商 强 烈 兴 趣, 也 为 充 分 利 用 现 有 的AutoLISP 资 源、 保 护 用 户 投 资 带 来 了 福 音。 从AutoLISP 到 新 一 代 的Visual LISP, 充 分 体 现 了AutoCAD 二 次 开 发 的 层 次 和 要 求 的 发 展 变 化。 在 我 国, 长 期 从 事CAD 应 用 程 序 开 发 的 工 作 者 迅 速 掌 握Visual LISP 可 能 会 比 掌 握 其 他 语 言 系 统 更 容 易 些, 也 将 会 开 发 出 更 适 合 国 情 的、 先 进 的CAD 系 统。


中国计算机世界出版服务公司版权所有