运行平台
计算机语言的发展经历了机器语言、汇编语言、高级语言以及C、C++、java等翘楚在历史上闪耀过后,聪明的灵长类动物人类将编程语言做成了各种 简便易学易用的开发工具和开发平台,利用这些工具平台你只须像搭建高乐积木般就能码出自己想要的东西,当然你还得会削积木(掌握语言)。后来经过时间演化 形成了两大开发阵营——java和.NET,简单说前者是跨平台的开发工具,可以在不同操作系统上进行开发、运行、维护;而后者是跨语言的开发平台,允许 使用多种编程语言结合其工具进行开发,但开发过程和应用程序的运行只能在Windows平台上实现。两者各有优劣,一目了然。然而微软自纳德拉出任新总裁后,宣布.NET开源了。.NET不仅支持跨平台开发,重要的是跨平台运行,这使得java的优势荡然无存。
.net开源:通过GitHub实现支持Mac OS X和Linux
(参考http://www.techweb.com.cn/internet/2014-11-13/2096486.shtml)
语言特性与发展:
Java 8发布,我们已经可以领略到一些令人兴奋的特性。但是开发者Andrew C. Oliver表示,尽管如此,Java语言在特性上还是落后于.Net。比如,Java 8中最令人期待的Lambda表达式,在2007年发布的.Net 3.5中已经存在了。他认为,.Net已有的和即将到来的特性要比Java 8优秀得多,Java落后于.Net不止一点点了。
关于更新速率
微软有能力做出更快的改进。我记得在很早期的时候,微软能做到每周都更新数据库API:从ODBC、RDO、ADO到OLEDB等。自从出现了.Net之后,微软便达到了一种前所未有的更新速度。
但是Java为什么落后这么远?在早期的时候,Java的发展也是非常快速的,从Java 1.0.2 到 Java 1.1,仅仅一年时间,我们就看到了Java彻底地改变。从Java 1.1到Java 1.2只用了一年半时间,而Java 1.2.2只用了7个月的时间(这是一个重要的版本,只是使用了一个小版本号)。而在10个月之后,具有关键意义的Java 1.3问世,这也正是Java发行的第一个带有垃圾回收的版本。
Java 1.4为我们带来了NIO和正则表达式,但在之后不到两年的时间里就被取消了。Java 1.4.2版本带来了用于多核环境的垃圾回收器。Java 1.5带来了可用于生产环境的并行和并发GC(垃圾回收)特性,它还添加了更重要的并发和NIO功能,不过这一过程花了一年多的时间。
总的 来说,Java还是有不错的表现的,Java 6使锁变得更廉价,但其在本质上和Java 1.5是一样的,还是让用户多等了2年时间。Java 7是第一个对底层VM技术做出重大改变的版本,同时还给用户带来了invokedynamic特性——用于在JVM上更好地连接其它语言,但是在两个大版 本的更新之间用了大概5年时间,这个进度着实有些太慢了。
为什么Java进展缓慢?
对于这个问题有一个简单的解释:Sun并不是一个实力超群的公司。Java创造于互联网繁荣时期,而那个时候Sun正在出售Sparc业务。
性能:
性能比较。说实话如果我在这里给任何一方的语言下一个结论,估计双方的技术人员都要跳起来。性能这个问题在两种语言之间是很难进行比较的,理由很简单,因为平台不同、硬件不同、安装的软件也不同、使用的库也不同,太多的不确定因素导致无法在完全平等的条件下比较单个项目的性能。也许某个性能问题并非语言本身造成的,而是库函数造成的,这都是有可能的。我参考了一些评论认为,.NET程序的启动速度快于Java程序,这应该是有目共睹的,看看Ecllipse和VS的启动速度大家就明白了。我个人感觉Java程序的运行速度确实不快,其实你看看很多大公司怎么玩Java的就知道了,他们拿Java做壳,内部全部用C++写,比如Oracle、IBM,要知道Java和C++的组合可是非常有名的。
可扩展性:
这两种平台扩展性都很好,上层封装都支持最新的SOAP协议和Web service,自身还有自己的通讯协议,如Remoting和RMI。这恐怕是少数几个大家都能达成共识的观点,即Java和.NET扩展性都很好。
安全性
安全配置
两个平台的配置都是通过XML或纯文本文件,两个平台最大的区别在于处理安全配置体系的方式不同。
在.NET平台,有图形接口和命令行二种方式来修改安全配置参数。Mscorcfg.msc是图形接口方式,Caspol.exe提供了命令行方式,适用于批处理或配置文本。
JAVA平台只提供了图形接口的工具policytool.exe。和.NET不同的是,它的目标对象(配置文件)的名字和位置不是固定的。
.NET定义了不同范围的安全配置文件:系统范围,本机范围,本用户范围。在配置有冲突时,原则上小范围的参数有优先权。
JAVA和J2EE的核心配置文件都保存在固定位置,但扩展配置文件随厂家不同而不同。
代码封装:检验
JAVA 和.NET 的Common Library Runtime (CLR) 都实行内存安全或类型安全的保护机制,在这些平台开发的应用的安全性也是可以检验的。他们的实现机制有很大的不同。
在.NET, CLR总是执行编译好的代码,它不解释代码。但是在中间语言(IL)被编译之前,编译器会有验证和检验的步骤。第一步是检查文件的结构和代码完整性;第二步包括一些扩展的检查,内存安全、堆栈跟踪、数据流分析、类型检查等。在运行阶段,由VES (Virtual Execution System) 来负责安全性检查和出错意外情况处理。
在JAVA平台,JAVA虚拟机(JVM)负责类的载入、链接、检验和执行。对于已经编译和优化的代码,JVM也用二个无条件调用堆栈来保留最初的字节代码信息。
小结:和.NET不同,JVM的默认设置是不检验本地代码。另外,JVM保留最初的字节代码供运行时检查,而.NET把静态分析和运行时插入检验代码相结合。
代码封装:应用隔离
在.NET,域隔离建立在内存安全机制的基础上,不同的域不能直接访问彼此的地址空间,只能通过.NET远程通信机制访问。
在JAVA平台,应用隔离是通过ClassLoaders 和 ProtectionDomains 相结合来实现的,安全类加载是JVM安全机制的基石。
小结:.NET的 AppDomains 就象操作系统的进程一样,使用起来比JAVA的 ProtectionDomains 更直接、容易一些。
代码封装: 语言特征
两个平台基本上差不多,.NET在灵活性上稍微好一点。
总结:
JAVA在安全配置上平分秋色,.NET在代码封装的选择性和易用性好一些。
第二部分 加密和通信
加密法:概论
.NET的加密法主要基于CryptoAPI 和相关扩展。大多数有关加密的类都在System.security.Cryptography, X509Centificates 和XML中。.NET利用基于流的模型来完成加密传输,所有的算法都被默认为最高的安全级别。.NET也允许用户自己在 machine.config 中定义自己的算法。
JAVA平台的加密算法分二个部分:Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE)。 JCE的出口受到有关法律的限制。如果要使用用户自己的加密算法,必须得到认证机构(SUN 或 IBM)的认证。
加密法:算法
.NET主要提供了下面几大类加密算法:非对称算法、HASH算法、对称算法、随机数生成法。
JAVA提供的加密算法更多,但是较少第三方厂商可以在JAVA中提供自己的算法。
安全通信
SSL已经是事实的传输安全的工业标准了。JAVA和.NET都支持最新版本 SSL 3.0。
安全通信:应用
.NET通过WSA (Web Service Architecture)和WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,JAVA目前还没有提供这方面的支持。
总结:
在加密方法上,JAVA和.NET基本没有太大的差别;在通信保护方面,JAVA 比.NET提供了更多的选择方案;但是在WEB服务安全性上,JAVA明显比.NET落后一些。
VS2015 NET平台开发工具以及NET4.6新特性
现在,移动开发的概念已经逐渐扩展到跨多种异质移动平台的一致性开发体验。Visual Studio 2015提供用于构建面向iOS、安卓和Windows应用的跨平台移动开发工具,它可以让开发人员自由选择开发语言和技术来开发移动应用。
许多开发人员最初是通过响应式HTML(responsive HTML)、CSS和JavaScript来开发基于移动浏览器的应用程序。Visual Studio 2015丰富的web开发工具、集成调试以及最新的Web UI框架支持都为构建强大的移动网站提供了所需的工具。
如果用户希望开发内 置在本地设备上的移动应用,Visual Studio 2015提供了支持Apache Cordova开发的工具,使开发者能够使用HTML、CSS和JavaScript(或TypeScript)来构建跨平台移动应用。Visual Studio 2015甚至还包括一个专为安卓设计的高性能Visual Studio安卓版模拟器,以调试和测试安卓应用程序。
针对.NET的开发人员,Visual Studio 2015支持开发通用Windows应用(Universal Windows App)来满足包括桌面、手机、 物联网,甚至HoloLens在内的众多Windows设备的需求。通过结合Visual Studio 2015和Xamarin,开发人员可以把他们的.NET应用扩展支持到iOS和安卓平台上。凭借Xamarin,任何Java或Objective-C 编程语言可以完成的任务,现在.NET和Visual Studio都可以做到。
|
|