百科问答小站 logo
百科问答小站 font logo



为什么微软不出一门像 Go 或者 Rust 的跨平台系统级语言? 第1页

  

user avatar   divinites 网友的相关建议: 
      

好一个项庄舞剑,意在沛公! 我觉得题主意不在嘲讽微软,是在为了让大家接受Go是『跨平台的系统级语言』吧←_← 如果Go是这样,那么C#也是。

首先,Rust和Go确实跨平台,但是放在一起称之为『系统级语言』是不合适的。如果忽略库的规模的话,Rust上得厅堂,下得厨房,上可以当一个类型安全的C++来用,其零成本抽象能力(Zero Cost Abstraction)和C++在同一个等级;下可以同时内联汇编裸机Rust写操作系统内核。Rust写的系统颇有几个,比如这个项目:redox-os/redox 现在连UI都开发了,已经真的可以在虚拟机里面用了。所以称Rust是一个系统级的编程语言,这个争议不大。


但是Go……Go的运行时非常的重,还包含了一个垃圾搜集器,用这个东东直接写内核是不可能的,因为它就不是被设计为可以写系统内核的。Go的运行时里面包含很多系统调用,这很方便,但是当你写操作系统的时候如何进行system call?例如Go通过系统调用来分配内存,但是当Go本身是操作系统编写语言的时候,如何用尚且不存在的system call分配内存?一定要写操作系统,可能需要自己覆盖Go的运行时,编译一个『裸机 Go』。这个事情最近还真有人做了:achilleasa/gopher-os。 不过作者也说,这个项目主要就是为了证明Go能够做操作系统,而不是真的要做一个可用的操作系统。无论如何,Go是个很不错的服务器端语言,在很多方面有非常不错的应用,但是它不应该被看作一个系统级的编程语言。如果按照Go这个标准的话,有一个用C#写操作系统的kit叫做CosmosOS/Cosmos,那C# 岂不是也是『系统级编程语言』了? 感谢评论区的提醒,.Net其实也有自己的Bare Metal, 就是针对嵌入式设备开发的.Net Micro Framework.


其次,在跨平台这方面,微软早年确实做的不够,不过后来也持开放态度了。微软是有跨平台语言的——就是.Net系列。其影响力并不低,在最新的TIOBE排名上:

前十名里面,前三位都是C系语言,而Python在机器学习和科研上的也没什么好说的,第五名C#和第六名Visual Basic.NET则同属于微软的.NET系列,虽然原生于windows,但是借助于Mono,它们都可以跨平台运行。在十大流行语言中占据两个位置,这已经足以显示微软在流行语言方面的贡献了吧(虽然是跨平台,但是我打赌大部分人用.NET系列还是在windows上)。


再次,从商业上说,有实力不代表一定要做。Mozilla需要面对越来越强大的Chrome的威胁,所以Mozilla有另辟蹊径的动机,同时作为一家非盈利机构,Mozilla更不缺情怀。而Mozilla开发出Rust正是为了写servo这个下一代的浏览器引擎和Chrome斗争。对微软来说,其操作系统的开发一直都是C/C++,在今后一段时间内应该还是会继续下去。并且作为市场份额占据绝对优势的垄断者,微软的重点是在维护和发展windows的生态上,这也是微软对Visual Studio家族一直还比较上心的原因。而开发一种系统级的语言,或者简单的说,开发一个bare metal C#来取代C++,从战略上并不能给微软带来任何的优势,反而带来很多麻烦,而微软内部也没有出现一个足够有权力又有情怀的高管来推动这种语言的出现。


最后,Google,Mozilla和微软的企业文化也很不一样。Mozilla是非营利组织暂且不谈。Google是相对扁平化的开放式结构,这个结构的特点是中低层拥有的自主权多一些,也就意味着Google内部会有很多很多的小项目,其中有一些项目会因为某些原因得到高层的支持而存活发展下来。而这些项目并不能看作是Google背书和支持的,而只能看作是Google内部的某一个小项目组的开发成果,Google完全可能在不久之后就不再提供资源任其自生自灭。


比如Google近年来开发的语言Dart和Go都是这种组织架构下的成果。这种架构的优点是有活力,会经常能迸发出一些好的想法及其实现,而弱点也很显然——“靡不有初,鲜克有终”,因为优秀的项目很多,很多项目会昙花一现,渐渐失去资源而死掉,就像Dart,现在排名26,号称编程语言,但是流行度已经沦落到和SAS这么一个统计的行业软件差不多的水平了。

而微软的架构相对比较传统和集权,对于面向公众宣布新的项目相对谨慎,而一旦宣布了会维持比较长的时间。比如Visual 家族,.Net系列等等——微软绝对优势的操作系统市场占有率,也让微软作出各种新的举动的时候会更加的谨慎。




  

相关话题

  为什么微软不把C# 设计成像C++一样可以编写底层3D程序的一门语言了? 
  优化代码中大量的if/else,你有什么方案? 
  可以用ACM/ICPC竞赛成绩来判定一个高校的计算机专业水准吗? 
  为什么说 Java 比 C / C++ 慢? 
  如何评价"Null reference - my billion-dollar mistake"? 
  用ASP.NET开发的网站是不是安全性很差? 
  面向对象编程的下一阶段是什么? 
  java为什么不支持泛型数组? 
  既然有文件后缀名,为何还需要MIME类型? 
  为什么我们用微软的系统这么多年,遇到问题第一时间是谷歌百度,而不是找微软售后服务? 

前一个讨论
为什么做机器学习的很少使用假设检验?
下一个讨论
如何评价 Fama 和 French 最初于 2013 年提出的五因素定价模型 (Five-factor Asset Pricing Model)?





© 2024-06-12 - tinynew.org. All Rights Reserved.
© 2024-06-12 - tinynew.org. 保留所有权利