我对.Net应用价值的一些思考

转载请注明来源:http://www.cnblogs.com/xuesongshu/

  曾经有很长一段时间我不知道.NET的应用价值在哪里。刚学习的时候以为它能独立运行,运行出错了才知道它需要.NET环境,不是拿几个DLL就可以。于是我想不通啊,为什么有很多同学想用它编写病毒呢?别人的计算机没出问题他自己编写的程序倒先出问题了。
  我想起了VB6.0。我没有意识到它可以调用WINDOWS API,而且微软已经写好了很多引用API的代码,我全没看到,我也没有意识到许多问题是因为它需要的DLL没有跟随,因为DLL版本不同导致报表只显示有多少数据却不显示数据的具体内容,说白了,当时不知道DLL是什么东西,一个出错,两个出错,这也做不出来,那也做不出来,于是点到即止。直到找不到WINDOWS API而询问江欢老师时才意识到三个平台的相互独立性——WINDOWS、.NET、JVM。
  实际上没有绝对独立运行的程序。即使直接面向硬件编写不需要任何环境能直接被硬件识别而运行的程序也需要程序员熟悉芯片结构。程序受制于硬件,所谓的程序是受硬件支持的指令序列,顺着说,它给了程序员相当多的功能,反着说,它只给了程序员这些有限的功能。它不能给程序员无限的功能,否则不是机器了。
  Windows也是一个平台,它也有它自己的环境,微软定义了许多图形化界面,将组成这些界面的共性部分称为控件,如按钮等等,在系统运行环境库内提供了的绘制代码。目前常见的Windows、Linux、Unix基于都有人编写了基于x86指令集的系统,可执行文件除了文件格式有所不同之外,其可执行部分在三个平台都可以运行。这一点,Java和.Net有很大的区别。
  微软自行研发的处理器目前我停留在道听途说的阶段,假设正在研究之中。可以尝试猜测MSIL指令能不能被它研究的处理器执行,但是有一点是肯定的, x86指令集与它是不能兼容的,软件不能空想,它要有实现基础。每一条指令都有惟一电流信号序列指代着。当前Intel和AMD公司的芯片不能识别,MSIL指挥不了主板的其它的电子元件。
  无论两个软件平台有多大区别,如果它们使用的硬件平台相同,那么两个平台下一程序文件仅仅因为各自识别处理可执行文件的方式不同而不能直接运行。在这两个平台之间移植是可行的。曾经我错把WIN32软件平台上可以独立运行的程序当成可以在任何平台任何环境都可以运行的程序。我没有意识到编写一个程序有哪些用到了别人的程序,哪些才是自己的程序。把自己的程序搬到第三方平台运行时有没有把用到的别人的程序搬过去。实际上,我们处处在用别人现有的程序,哪怕是一个按钮的图形绘制代码,至于基础程序类如内存管理、图形绘制等等不用说了,有现成的就不想自己编写了,更何况不知道自己有没有这个能力、有没有这个精力、有没有这个时间把它编写出来。当时没有环境、平台、软件平台、硬件平台的概念。软件平台的作用可以有很多,比如它可以翻译MSIL指令到X86指令,也可以仅仅提供配置环境。“无论在哪里”,显然我没有意识到什么是平台。应当学习一下WINDOWS PE以及PE国际标准以及这个国际标准是怎样制订的。
  我一一思考ASP、ASP.NET、JSP、PHP互联网信息技术的商业取向。它们是世界公认的从XML衍生的HTML代码外加特定的服务端执行的程序。客户端脚本常见的是ECMAScript(JavaScipt、JScript、VBScript等等)。服务端程序编写语言有C#、Java、PHP、VB.NET。脚本受浏览器支持,用来提高页面响应速度和减轻服务器压力。使用脚本可以与服务器通信。
  在Windows上运行Java程序Sun公司做到了,前提是必须安装JVM。底层的实现工作别人已经做好了。曾经我不知道,Java跨平台究竟是怎样实现的?当我遇到手机功能列表中有支持Java扩展才能运行Java程序的情况,我渐渐意识到Sun公司把它想要做生意的手机的JVM编写好了,跨平台这样实现的。手机程序员需要做的工作Sun公司大部分已经做好了。JVM把字节码翻译成能被当前所在机器识别的机器指令,就像不能同语言的两个人交流一样,翻译需要学习两种语言才能独立工作,使用翻译的只需要学习其中一门语言,就可以借助翻译沟通,手机识别机器指令,人识别Java指令,JVM这个翻译它都懂,于是人间接和手机沟通,指挥手机工作。
  至于Win32与DOS互不兼容,这个是表面现象,从商业目的来讲是微软当初为了推广它的图形化界面系统Windows3.0而设置的限制,解除限制之后注意配置环境。尤其注意图形绘制代码有没有跟随到位。否则一个程序缺少一部分,可想而知。嫌它麻烦,就不要使用微软的程序,自己从图形开始,面向硬件编程,而不要这用微软的,那用微软的。使用别人的东西就要遵守别人的规则。我们不仅仅要使用别人的东西,还要学会使用别人的东西的技巧。
  使用什么样的东西就要遵守什么样的规则。如果不喜欢这个规则就找个替代方案。规则可以是程序运行过程反映的处理数据的办法或方法以及思想。操作系统也是软件。使用Windows就得遵守Windows的规则。又爱又恨,就要想办法突破规则。但不要尝试突破法律保护的规则。如果编写的程序面向Windows平台,那么突破规则之前必须遵守它的规则。在任何操作系统上使用任何资源都要有相应的权限。每个程序启动时都有默认的权限。我一直以管理员身份编写运行程序,所以容易忽视权限的问题。
  字节码究竟是字节码,中间语言究竟是中间语言,它们不属于X86指令集(通用指令集还有IA64、X64,多媒体方面还有SSE等等,这里以X86为例),主流芯片没有能识别它们的。它们的底层实现工作(将非X86指令翻译成X86指令)已经由推销这个产品的商家实现了。它减轻了从事这个行业的程序员的工作压力,降低了工作难度(这也是当今社会高端程序员稀缺的原因之一)。这的确是跨平台一个比较好的选择。独立运行与跨平台就像鱼与熊掌不可兼得。它们各自都有各自的应用价值。
  从目前潮流来看,处理器速度快得撑不死,内存大得撑不完。和计算机刚面世时不可同日而语。当时追求速度,现在追求体验。所以不要担心这些中间语言耗费额外的时间。界面做好,功能做全,就可以了。

posted @ 2013-01-15 21:29  岬淢箫声  阅读(154)  评论(0编辑  收藏  举报