迈向更强的可移植性:堂吉诃德式的观点

作者:Graydon Ekdahl,

堂吉诃德: 啊哈,桑丘,想想看!一个单一的 GUI 界面,让我可以编写一次应用程序,然后在 Windows、OS2 Warp 和 Linux 机器上运行,而无需更改一行代码!甚至可能在 Alpha 和 Sun 机器上也能运行。

桑丘: 但是,老爷,没有人能在任何事情上达成一致。尤其是那些大老板们。即使他们在那样的事情上达成一致,那也只能是在一百年之后。或者更久。到那时,我已经在土里长眠了。愿我安息。

[桑丘说话时有时会变换词语。目前尚不清楚他所说的“embarcaderos”究竟是什么意思。其含义可能位于“企业家”、“商业巨头”、“有影响力的人物”或您选择的任何表示商业力量、宏伟和一丝自恋的概念的语义范围内。]

堂吉诃德: 你忘记了合作的伟大例子吗?那些让计算变得更容易的例子?LIM 内存规范呢?三个巨头——你说的那些大老板——创建了一种访问兆字节以上内存的方法,以便程序可以更大、更快。

桑丘: 小心点,老爷。最后一个巨人是风车。

堂吉诃德: 桑丘,它曾经是巨人。记住:我是你的老爷。

桑丘: 但是,老爷,仅仅一个例子。一次是例外。什么也证明不了!两次是巧合。也什么都证明不了。三次才是模式。再给一个例子!

堂吉诃德: 你这个怀疑论者!你错过了生活中最美好的事物,因为你向下看,而不是向上看。你忽略了伟大的事物,只发现了自己鞋子里的鹅卵石。

桑丘: 求求您,老爷,例子。像我这样的穷人靠言语和想法走不远。拜托,来点实在的!

堂吉诃德: 桑丘,桑丘!标准模板库 STL 呢?现在我们都有了可以与几乎任何 ANSI 编译器一起使用的容器!我们在那方面合作了!起草 C++ 标准的委员会呢?来自各行各业的骑士们齐聚一堂。这些都是伟大的成就。

桑丘: 好吧,老爷!STL 和 ANSI 标准都是 C++。你只能算一个例子。仅此而已。那是第二个。所以现在你有一个巧合。

堂吉诃德: 我说明白我的观点了吗?

桑丘: 没有!!你给出三个好的例子,否则我什么都不相信!Nada! Nada!

堂吉诃德: 桑丘,桑丘,如此平庸,如此缺乏想象力。我担心你的灵魂得救。

桑丘: 老爷,例子,拜托!

堂吉诃德: 想想 Java。在这里我们有类似我所想的理想的东西。一次编写,多处运行。为什么?Java 是解释型代码。解释器是为平台编写的。应用程序是为解释器编写的。所以我们可以在所有平台上运行。

桑丘: 哦,老爷!如果 Java 是解释型的,Java 就更慢!慢不好。快才好。

堂吉诃德: 正是!你总算说对了一次。我们需要性能可移植性。

桑丘: 但是,老爷!合作在哪里?Sun Microsystems 创建了 Java。

堂吉诃德: 你没抓住重点。Sun 确实合作了。他们将 Java 授权给任何同意不通过创建不可移植的本地扩展来使该语言地方化的人。大多数人尊重这项协议。反正 Java 也不是他们可以接管的。所以 Java 主要是可移植的。

桑丘: 老爷,老爷!前面是什么?

[桑丘和堂吉诃德刚刚到达山顶,往另一边看去,他们看到一座桥梁横跨一条小溪。旁边立着一个标志:“此桥可过”。正当他们接近桥头时,一个专有巨怪从桥下跳到路上,挡住了他们的去路。]

专有巨怪: 我控制着这座桥,你们必须支付通行费,否则不得通过。

堂吉诃德: 先生,我是一位骑士,杜尔西内亚·德尔·托波索的捍卫者,以及未来通用 GUI 界面的守护者。请让我们通过,先生!

专有巨怪: 我控制着这座桥,你们必须支付通行费。听我的话,否则你们会倒霉的。

堂吉诃德: 真的吗!我会失去什么?

专有巨怪: 市场份额,我的骑士,市场份额!

堂吉诃德: [突然陷入沉思] 我明白了。那你想要什么通行费?

专有巨怪: 控制权!

堂吉诃德: 控制什么?你是说 GUI 界面?你也想控制那个?

专有巨怪: 最重要的是那个。那就是你的通行费。放弃它,把它交给我,否则你们不得通过。我控制着桥梁,我控制着界面,我控制着你们。

堂吉诃德: 别那么快,你这个小矮子!

桑丘: 老爷,老爷!您失态了!

堂吉诃德: 你忘了你的桥只是一座可怜的、狭窄的通道,你的小溪只是一条巨大河流的支流,这条河流的力量席卷着我们所有人,如果你不能满足过路人的需求,你就会被冲走。你太自不量力了!我说,你离斯堪的纳维亚是不是有点远?

专有巨怪: [鼓起胸膛,然后喷出一堆热气] 试试不靠我的帮助过桥。失去市场份额。我们会看看谁会被冲走!

堂吉诃德: Canis culum in tuo naso! 我们会找到另一座桥并在别处过河。我们不需要你来提供通道。如果需要,我们自己造一座桥。

[“Canis culum in tuo naso” 是一句拉丁语诅咒,首次书面记录出现在古高地德语时期(约公元 850-1050 年)的一本旅行者短语手册中,该手册给出了拉丁语短语及其德语等价物。古高地德语的等价物是:“hundes ars in dine nas”。]

桑丘: [自言自语] 真是胡说八道!他把风车看成巨人。巨怪比生命还大。哦,上帝,再给我一些小的东西吧,我鞋子里的鹅卵石!

堂吉诃德: 桑丘,忘了你的鹅卵石吧!让我们赶紧离开这里,另找一个渡口。

[桑丘和堂吉诃德转身寻找大河另一条支流上的渡口。他们的思绪又回到了界面上。]

桑丘: 好了,你给了三个例子。再给我讲讲你的通用粘糊糊的脸。

堂吉诃德: [对桑丘做了个鬼脸] 桑丘,如果我不再是你的老爷,你将如何填饱肚子?我说的是通用 GUI 界面,而不是粘糊糊的脸。有时我觉得你没有认真对待我。

桑丘: 对不起,老爷!再给我讲讲你的粘糊糊的界...面。

堂吉诃德: 这就好多了。首先,通用 GUI 界面应该是一个标准,就像 STL 或 ANSI C++ 一样,在不同平台上保持不变。实现的细节应该对客户端隐藏,因为它们是平台相关的。这个界面意味着理想情况下,程序可以在多个平台上运行而无需更改。

桑丘: 粘糊糊的界面应该做什么?

堂吉诃德: 这很简单。该界面应该提供一套完整的工具,这些工具可以执行例行的窗口管理任务,并提供已有的省级 GUI 界面的所有功能。这些工具应该足够通用,以至于非常灵活,但又足够强大,可以与现有的省级 GUI 界面正面竞争,并为程序员提供编写可移植代码的严肃机会。

桑丘: 太棒了。但是你将用什么语言编写这个?西班牙语?葡萄牙语?

堂吉诃德: 当然是 C++!它是面向对象的,支持继承,并且实现的细节可以很容易地对客户端隐藏。它也很快,并且允许访问硬件。

桑丘: 你能更具体一点吗?你的通用粘糊糊的界面将包含哪些程序来管理窗口?

堂吉诃德: 细节最好留给聚集在一起创建界面的骑士们。他们需要做的就是决定界面应该包含哪些功能,然后检查现有的省级界面,看看实现该功能是否可行。

桑丘: 有人尝试编写通用粘糊糊的界面吗?

堂吉诃德: 据我所知还没有。 [堂吉诃德突然变得沾沾自喜。] 但是树林里有沙沙声,地下有声音,微风中有耳语。一个新的时代可能即将来临。 [堂吉诃德得意地拍拍胸脯,仿佛战斗已经胜利。]

桑丘: [自言自语] 真是胡说八道! [对堂吉诃德] 你是什么意思?你的话语很混乱……呃……抱歉,老爷,我是说令人困惑。你能举个例子吗?

堂吉诃德: 还没有人尝试完全编写我所说的东西,但是已经有朝着这个方向的行动了。X Window System 已经从 Linux 移植到 OS/2,以便 OS/2 机器可以连接到 Linux 网络并运行其软件。此外,正在为 Linux 开发 Windows 模拟器,以便 Windows 应用程序可以在 Linux 内部运行,即使 Linux 不是真正的 Windows 平台。最后,德国的程序员创建了一个 conio.h 和 conio.c 实现,该实现模仿了 Borland 和 Watcom C 中的 conio.h 和 conio.c 文件,以便 PC-DOS 程序可以更轻松地移植到 Linux。并且还有一个用于 Linux 的 PC-DOS 模拟器。这些成就都试图允许某人在程序未编写的平台上运行程序而无需更改代码,它们的共同目标是可移植性。

桑丘: 你认为骑士们能够做到像粘糊糊的脸这样的事情吗?

堂吉诃德: 我不知道,但我希望如此。

桑丘: 是什么阻止了他们?

堂吉诃德: 只需一点合作。

Graydon Ekdahl 是 Econometrics, Inc. 的总裁,该公司位于北卡罗来纳州教堂山。Graydon 喜欢创建数据库应用程序,并且对数据结构、算法、C++ 和 Java 感兴趣。可以通过 gekdahl@ibm.net 联系到他。

加载 Disqus 评论