|
mono的出现,改变了c#被淘汰的命运。因为就算没有了微软,mono可以跨平台运行,可以多平台开发,如unity3d就是成功案例,unity3d可以支持VR技术了,可见c#生命力还是很强,随着技术的进步,mono的性能只会越来越高,原本c++开发的程序可以用c#开发了,因为c#开发可以省成本省时间,这点可以从游戏引擎的发展得到印证。随着硬件的进步,虚拟机语言只会应该越来越多,因为虚拟机语言是自动档,开发程序时比较省心,不要管理内存,可以更快实现业务逻辑。
很多东西有可能被淘汰,但很多时候是柳暗花明又一村,如收音机,电视机,电脑出来时,很多人说收音机淘汰了,但实际上汽车一发展,开车时只能听收音机,不能看电视,再加上网络有声小说,播音员又有了新饭碗,就更不要说女主播了。c#目前使用mono跨平台技术,对ios和安卓兼容很好,特别使用unity3d开发时,更能体现这种优点,而java只能运行于安卓平台,同时随着VR热开始,跨平台的3d显示技术,这些成功案例会刺激c#进一步发展成跨平台语言,如xamarin就可以跨移动平台开发。
xamarin的mono技术在unity3d上用于跨平台游戏开发,APP跨平台的解决方案是有市场的,无数3d游戏用c#开发,开发个app问题不大,重要的是一套程序可以运行于多个平台,节省开发成本,mono在ios上不是动态编译而是编译成二进制,性能不低,比html5性能要高,在unity3d中用mono调用3d库没见过卡的,也是微软看到unity3d成功后的跟进,缺点是xamarin近期才开始开源免费,知名度比较低。实际上各个大公司都是用自己的开发框架来实现跨平台UI的统一,这里面全是坑,因为要适配N种机型,实现特别api调用,我觉得他们封闭后的框架不会比xamarin一类的解决方案更好用,但这些大公司有钱,无所谓高成本开发。这让我想起了QT,实现多平台的c++ UI库,实际上几个BAT公司他们也在实现xml化的DiructUI,技术水平肯定不如QT好用,如WPS用qt后,比原有自己开发的界面要好得多,问题是很多大公司喜欢玩技术,因为有钱养着很多人。一般商业化开源化的中间件,中间平台比私有化的要好,否则人家也不会拿出来,也经受不住市场考验,但很多大公司还是喜欢重复制造轮子。
从近几年的语言发展来看,虚拟机或jit化语言是发展趋势,工程化是趋势,如go,rust。脚本语言由于受静态检查的限制,很多东西需要在运行时才能确定,所以速度相对较慢,如python,javascript,可用于动态加载和小规模应用。而java,c#工程化手段和方法比较多,对实际项目相对更友好。go语言就是解决c语言开发需要管理很多底层的东西如指针,网络模式而设计,rust也是为了更好的实现工程化,都是解决c++开发复杂,而javascript自由度太高而设计的。objective-c也使用了自动指针管理。
多语言分层开发是未来趋势,底层用汇编,c,c++,中上层用c#,java,业务用脚本c#,python,javascript,lua,这个是随着计算性能过剩而io速度较慢发展出来的,随着编译技术的进步,可以混合着用,如python可以用pypy,jython,Ironpyhon加速,javascript用v8加速,用node.js开发服务器程序,c#可以用mono跨平台,嵌入脚本引擎,JS转换为C#脚本,java IKVM转c#。很多时间一种语言可以换个虚拟机,换个编译环境,就可以完成做不了事,因为硬件的性能一直在进步,运行普通应用对性能要求不高,而重写代码成本很高。
mono的出现让人们看到在跨平台c#的发展,而手机游戏的发展正好需要跨平台的实现,手机游戏需要快速迭代实现竞争,需要生产力的语言,如是使用c#就顺理成章了。热更新的需求,也出现了c#脚本化语言。
(为什么不用java,因为java虚拟机在很多平台实现是有问题的,如ios平台,而mono的虚拟机可定制性比较高,为什么不用c++,因为c++开发成本太高比较底层,为什么不用python,因为python解释起来速度比较慢,用javascript实际也是mono的js)
未来应用软件的开发比基础软件需求大,比较看好的虚拟机语言c#,java,脚本语言python,javascript,新语言go。c#,java主要用于业务系统,移动端,用途广,python用于嵌入脚本,数据分析及web,javascript用于浏览器和node.js。而c/c++主要用于底层开发及桌面软件。
c#可以跨平台,java可以跨平台,python可以跨平台,javascript可以跨平台,go语言可以跨平台。
c#可以自动管理指针,java可以自动管理指针,python可以自动管理指针,javascript可以自动管理指针,go语言自动管理指针。
c#可以适合工程化开发,java适合工程化开发,python勉强适合工程化开发,javascript不太适合工程化开发,go适合工程化开发。
c#支持库多,java支持库多,python支持库多,javascript支持库一般,go支持库一般。
c#性能不错,java性能不错,python性能差,javascript性能差,go好。
c#有多种虚拟机,java有多种虚拟机,python有多种虚拟机,javascript有多种虚拟机,go只有一种。
c#实际开发速度快,java实际开发速度较慢,python实际开发速度快,javascript实际开发速度快,go实际开发速度慢。
c#成功案例多,java成功案例多,python成功案例一般,javascript成功案例一般,go成功案例刚发展。
c#人力成本低,java人力成本中,python人力成本中,javascript人力成本低,go人力成本高。
c#适合服务器和客户端,java适合服务器和安卓客户端,python适合服务器和pc脚本客户端,javascript适合服务器和浏览器客户端,go适合服务器。
可见c#的优点还是很多,在国外好多linux控,使用量相对比国内少,在语言排名上没有java高(java很多用于开发web版xx管理系统,并发多在10w以下),由于网络公司服务器多使用linux,其实用c#做服务器开发也是不错选择(很多手机游戏开发现在开始使用c#做服务器,因为客户端用unity3d,服务器用c#可以统一语言复用性高,手游的高峰时并发性也是很高的),一般网站和应用根本达不到BAT,Google级别的流量和并发(要是能达到这个级别,你天天数钱,用汇编语言也愿意开发)。普通应用多在1000万并发以下(可以通过框架设计来实现负载分流),上亿的只有巨头,对一般用户而言用c#其实够了,如果性能不行,你可以用c#调用c语言,开发复杂度上比c++简单多了,开发成本也低,适合快速。 |
|