对Windows的意见
1.关于文件类型:
应当在文件中自己表明,而不是通过文件扩展名。
dos(及其后继windows)和很多操作系统都依靠文件扩展名来辨别文件类型,在其名字空间中显示一定的图标,并可调用相应的应用程序来打开该程序。这个办法其实很愚蠢。文件一旦改变了扩展名,就可能不会被再正确打开了,特别是当你忘了该文件的正确类型。扩展名也很别扭,如"1997年总结报告.doc"之类。其实Windows好象也讨厌扩展名,其explorer缺省是不显示已能辨别类型的文件的扩展名的。但这时,就不能对扩展名重命名了,如果在改名框中改成file.txt, 则其实际长文件名是file.txt.txt。如果设置explorer显示扩展名,那也很别扭,new一个文本文件,输入名字file1,竟会得到警告,说扩展名被改变,可能无法正确打开。真是幽默,我明明新建的是一个文本文件嘛!
希望未来的windows系统下的文件抛弃那别扭的3字符扩展名,而是直接在文件头或目录的一个单独表项中予以说明。可参照Internet上的MIME类型,或是现在的class id的那套做法。
2.爱清洁的windows
windows的一大特点是极易退化。短期表现是当windows运行时间长了,就有很多资源不能回收,系统的很多设置被改变但没有被正确恢复,最后不得不重新启动。长期表现是当一个windows系统装入和删除的应用系统多了之后,会在windows及其子目录下留下很多垃圾文件。很多应用程序只顾安装,却不管删除。更有一些应用已被删除但还有它的一些驱动程序被windows每次启动时都调用。这些都影响了系统的可靠和高效率的运行。时间长了,只能重装整个Windows及其应用软件,太累了!
未来的Windows应该在这方面作出重大改进。比如建立一个完善的登录制度。任何要往Windows目录下复制或建立文件的行为都必须通过统一的接口并登记,否则予以拒绝。当发现某文件不会被任何应用程序再使用时,即予以删除。Windows每次
启动时也最好检查自己的目录,删除任何未经登记过的文件。其他如驱动程序、Register等的加入和改变也类似处理。这样就可在很大程度上保持系统的清洁。
3.目录名和文件名的困惑
请问c:temp, c:vm.exe, c:dir1是文件名还是目录名?其实它们即可以是文件名,也可以是目录名,这完全看你系统的实际情况。也怪不得在xcopy时常常会被问道"目标指的是文件(F)还是目录(D)"。
对此的改进是严格区分目录和文件名,象以下格式:"[目录名]文件名"或"目录名;文件名",比如"[dir1dir2]file1"或"dir1dir2;file"。
4.讨厌的驱动器符
各位有没有这种体会,当你的硬盘被越来越庞大的各种应用软件沾满时,决定再加一个硬盘。由于你原来的硬盘分了区,为c:,d:,e:等,这时新加入的硬盘变成了d:,原来的d:,e:变成了e:,f:。如果新硬盘分区的话,就占用g:,h:。这时windows系统可就乱套了,特别是如果Windows本身装在原来的D:的话!最好的办法仍然是重装整个系统。
虽然有些小软件可以解决这个问题,但我想说将硬件名称直接与应用程序"见面"是很不成熟的做法,对硬件的任何改动影响软件的运行。dos当时这样做我认为完全是一种简单的将就行为,但后来的windows 95、nt,以及os/2等竟然都沿袭了这个愚蠢的做法。何况,英文字母只有26个,现在一个系统硬盘分区就可能有5、6个,如果压缩的话还有更多虚拟盘符,在网络上工作的话还将映射很多网络驱动器,其他如subst,ramdisk等,这26个字母还真不够用!
vms的做法就很合理,有完善的逻辑名的概念。逻辑名不仅可以指代物理设备(如dos的第一个硬盘分区,或称c:),成为逻辑设备。逻辑名还可以是其它逻辑名的继承,还可以灵活地更改,以指向新的设备。比如,sys$system代表整个系统的根目录,sys$login代表每个用户的私人登录目录,应用软件只与逻辑设备打交道。这样,硬件的变动将不会被上层软件所察觉,这为系统的升级带来方便。
另外,如windows中的一些系统文件夹(如Windows , Windows system, My document,Desktop, Favorite,Temp Folder, Recyscle box, MRU ,Send to等)都可以用逻辑名的概念加以完善的管理。
彻底抛弃讨厌的C:!
5.语言版本何时一统?
最近听说微软的Windows NT5.0将不会出多语言版本,只要加载语言包就可使用多种语言。于是,我觉得有必要再写这第5篇了,因为,语言版本的统一,也一直是在我的幻想中。
很久以来,我就对操作系统和应用软件的各种语言的版本头痛不已。相信大家也有同感。中文版与西文版不兼容,很多西文软件不能在中文平台上使用,勉强能用,也总出各种怪问题、怪现象。更比如,中文Windows的兼容型、性能和稳定性远不如西文版,有时为了使用某心爱的软件,不得不装西文Windows。更可恶的是,软件业不够发达的大陆还经常受歧视,老米的很多软件只出英文版、西文版,甚至BIG5版,就是不出GB版!如,为Win95增光添彩的PLUS!、Kernel Toys、Power Toys等从不出GB版,而至少PLUS!是有BIG5版的。
Microsoft发誓说,NT的Server版和Workstation版使用的绝对是同一个内核。但是,至少中文版和西文版的内核就不一样,其他语言想必也是。由于内核不一致,很多软件开发商深感头痛。比如,CSTAR、Richwin等都有外挂于NT的中文平台,但NT只要一出新版本甚至一个新的Service Pack,他们这些外挂平台很可能就不灵了,也必须跟着出新的Patch或新版,忙不忙呀。这也是没办法。
所以,我一直在想,能不能实现软件同语言的分离独立。软件凡是要使用语言的地方,都使用类似编程语言中的变量或指针来替代,而不直接将某种语言直接嵌入到软件中。语言与代码的结合,可以由用户来完成。死一点的,运行前选择一个需要的某语种的库文件,做一个类似"编译链接"的动作,再运行。更灵活的,甚至可以在运行时动态改变语种库文件!
我认为,从实现技术上讲,这绝对不是一件困难的事。我不知道NT5.0是如何实现的。听说用户只要加载一个他喜欢的某语种的软件包,重新启动NT,就改头换面了。但是,Win98肯定不会有此功能,用户还是面临选择英文版或是母语版本的问题。将来如何,谁也不知道。
其实,何止Windows,应用软件也可以这样做。只出一个"空语言"版本,发行时奉送若干语言包。如果要卖给喀麦隆土著,就送给他们一个班图语系的语言包就成!
Windows本身也可以提供一些常用词汇的多语言支持,如果File,Open,Exit,Yes,No,OK,Previous,Next等等,这样就可以应付应用软件的很大部分需要了。这样既方便又标准。
(本文作于1996-1997年)