您的位置:首页 > 其它

软件随想录(local.joelonsoftware.com/wiki)-2004年01月28日 先生可以赏我一个连结程序吗? - Please Sir May I Have a Linker

2013-02-27 10:42 218 查看
2004年01月28日
先生可以赏我一个连结程序吗? -
Please Sir May I Have a Linker

 

The Joel on Software Translation Project:先生可以赏我一个连结程序吗?

From The Joel on Software Translation Project

Jump to:
navigation,
search

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

作者:周思博 (Joel Spolsky)

译:Paul May 梅普华

Wednesday, January 28, 2004

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

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

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

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

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

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

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

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

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

就这样,为了要在这几台机器执行这小小的.NET应用程序,我得下载大约70或80 MB(还好我们网络够快)然后重开机三四次。而这还是在一家软件公司里!我知道这花的确实时间,因为我一开始下载就在大电视屏幕上放映上班一条虫(Office Space),电影放完时也几乎快装完了。电影每播十分钟左右我就得起来,到每台电脑前去按那些笨对话盒的确定按钮。

这就我们自己用的程序来说已经够令人沮丧的了。不过再想想我们的产品CityDesk。我们的使用者几乎每个人都会在购买前下载一份免费试用版。下载文件的大小约9
MB而且不需要任何其他东西。而这些使用者几乎全部都还没有.NET runtime。

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

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

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

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

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐