#先生可以赏我一个连结程式吗?

作者:周思博(Joel Spolsky)
译:Paul May梅普华
2004年1月28日星期三
属于Joel on Software,http://www.joelonsoftware.com

原因不明,不过微软最先进又很出色的.NET开发环境少了一个重要的工具……一个约1950年年起在软体开发环境里就很普遍的工具,这个工具是理当所然应该有的,真奇怪竟然没人注意到.NET真的没有。

少了的工具是什么?就是连结程式 啦。连结程式做的事如下,它会把你的程式编译过的版本,和所有有用到的程式库函数编译过的版本结合起来。然后会把你没用到的所有程式库函数都拿掉。最后再产生大家可以在自己电脑上执行的单一可执行二位元程式。

.NET用了一个叫“runtime”的想法来取代连结程式。这是一大团22 MB并会动态连结的程式码,每个人在用.NET应用程式之前电脑上都得先有这东西才行。

运行时是个和DLL很像的问题,因为版本1的应用程式在设计上是要配合版本1的运行时,而等版本2的运行时出来,版本1的应用程式突然间就会原因不明地不太正常,这时候你麻烦就大了。举例来说我们把运行时间由1.0升级到1.1之后,现在公司的控制面板会把销售数字取成小数点后4位的数字。通常不相容的状况要比这更糟。

事实上.NET包含了一个叫“manifests”的大型技术系统,这个系统显然很复杂,本来的用意是要确保各个应用程式_只会_ 用到正确的运行,不过我认识的人没有一个知道要怎么用。

这衍生了一个故事。在雾 溪的新年除夕宴会上,我们要让主要房间里的很多电脑萤幕在午夜前倒数.Michael用C#的WinForm的写了一只程式,只用了60秒左右。真是个伟大的开发环境。

我的工作是把countdown.exe拷到三台电脑上执行听起来,很简单。

才怪。在执行档上连按两下就看到一个荒谬又神秘的错误讯息,说MSCorEE.dll中还是什么东西有问题,然后就是没有意义地倾印了我的路径。一点也没提到问题其实只是没有安装.NET 运行时间而已。还好我是个程式师,知道这一定就是问题。

你要怎么安装run呢?「最简单」的方法是用Windows Update。不过Windows Update一定要我_先_ 取得所有重大的更新后才能装运行。这很合理,对吧?“重大”更新里面有两个分别是Windows service pack和新版的Internet 资源管理器中,这两个都得重开机。

就这样,为了要在这几台机器执行这小小的.NET应用程式,我得下载大约70或80 MB(还好我们网路够快),然后重开机三四次。而这还是在一家软体公司里!我知道这花的确实时间,因为我一开始下载就在大电视萤幕上放映[上班一条虫(办公室 空间)](http://www.amazon.com/exec/obidos/tg/detail/-/6305508550/ref=nosim/joelonsoftware),电影放完时也 _几乎快_装完了。电影每播十分钟左右我就得起来,到每台电脑前去按那些笨对话盒的确定按钮。

这就我们自己用的程式来说已经够令人沮丧的了。不过再想想我们的产品[CityDesk](http://www.fogcreek.com/CityDesk)。我们的使用者几乎每个人都会在购买前下载一份[免费试用版](http://www.fogcreek.com/CityDesk/Starter.html)。下载档案的大小约9 MB而且不需要任何其他东西。而这些使用者几乎全部都还没有.NET运行时。

如果我们要求我们的试用者(通常是小型组织或家庭用户),只为了试用我们的应用程式,却要经历整部电影长的痛苦安装过程,我想我们大概会损失95%的潜在客户。这些人 _还不是_客户,只是期望的客户,我实在无法承受只为了一个较好用的开发环境而放弃95%的期望客户。

「不过,」人们会说:「有运行时的人数总会变多,最后人数够多这个问题就不见啦。」

我也这么认为,然后我了解到微软每六到十二个月就会推出_新版_ 的运行时间,于是逐渐增加的已安装人数又跳回零。如果我得痛苦挣扎在三种运行版本上测试我的应用程式,只为了多那1.2%有其中一个版本的客户,那我还真该死啊。

我只想把所有用到的东西连结成单一个静态的执行档,不用先装任何东西就能执行。我不在意执行档是否会大一点。我要的只是我实际_用到_的函数,字节 代码直译器和小小的执行时期程式。我不需要属于运行时一部份的整个C#编译器。我承诺CityDesk不会编译到任何C#原始码。我也不需要全部的22 MB,我要的_最多_只有五或六MB吧。

我知道有些公司拥有这种技术,不过没有获得微软许可不能重新发送运行时里的资料(如字节 代码直译器)。所以微软醒醒吧,给我们一些1950年代的连结程式技术吧,让我可以制作单一个执行档在Win 98及后续系统上执行,而且_没有其他外部关联_ 。否则.NET对消费者下载软体来说有致命的缺陷。

这些网页的内容为表达个人意见。
所有内容版权所有©1999-2006,作者Joel Spolsky。版权所有。