.NET的一点历史故事:误入歧途,越陷越深

移动计算的时代其实早已有了苗头,起码微软的 Windows CE、诺基亚的 Symbian 都曾经给手机用户多少带来了一些便利,黑莓则由于接入了企业邮件等商业应用而日进斗金,甚至 Sun 也给自己的 Java 平台做了一个 J2ME 标准,试图用 J2EE 那一套搞法在移动计算平台分一杯羹。但是2007年1月苹果发布自己设计的 iPhone 智能手机,并在当年10月启动应用商店计划之后,拿手机来处理日常事情才逐渐变为一件既酷又很方便的生活方式。11月,谷歌联合几个手机厂商启动了 Android 手机平台,则是拉开了智能手机平台两强相争的序幕。

提及 Android 就不能不提到谷歌的几个聪明选择。首先,Android 操作系统的源代码是公开的(但管理方式不同于通常意义上的开源项目),这就让开发者可以了解它内部的运行机制。其次,应用开发使用开发者众多的 Java 语言,开发环境是 Eclipse 搭配 Android Development Toolkit,这使得从一开始 Android 平台就不缺少优秀的开发者。最后,谷歌采用了一个相对开放的生态系统,允许第三方定制,也不排斥第三方商店。所以在很短的时间内,Android 就追上了苹果 iOS 的步伐,把 J2ME 标准完全替代,这也为日后甲骨文和谷歌的法律纠纷埋下了伏笔。

2008年8月11日,iOS(当时名字还是iPhone OS)开始支持应用商店。10月22日,HTC 发布第一款搭载 Android 的手机 Dream。智能手机之战正式开锣。在这个战场兵戎相见的时候,微软公司呢?微软公司居然缺席了,为什么呢?微软这时候干什么去了?事情还是要翻回2007年9月5号。这天微软发布了一个名叫 Silverlight 的产品,开始叫板 Adobe 的 Flash。

前面我们已经谈到 .NET 这个生态系统的几个平台。微软官方提供了兼顾服务器和桌面的 .NET Framework、配合 Windows CE 移动开发的 .NET Compact Framework、配合单片机嵌入式系统的 .NET Macro Framework,而开源项目 Mono 则提供了 Mac 和 Linux 平台的 .NET Framework 兼容环境。这里面有一个缺环,就是假如你要开发一个比较复杂的网站应用,总有些功能(比如视频播放)没法用 .NET 技术来实现,而需要借由 ActiveX 或者 Flash。所以 .NET 开发团队通过裁剪 .NET Framework (主要是 CLR、BCL 和 WPF),在短时间内做出来一个能够像 Flash 一样运行在浏览器中的计算平台。因为这次不能叫 .NET Browser Framework了,所以起了一个非常奇怪的名字 Silverlight。

和之前的几个 .NET 子系统不同,Silverlight 是微软第一个跨平台的 CLR 实现,比如能够运行在 Mac 平台的 Safari 浏览器中。而且微软难得的提供了跨浏览器支持,使得 Silverlight 程序能够在 Firefox 和 Chrome 中运行。因为 WPF 出现之后桌面程序设计进入了一个非常高效的阶段,同样使用 XAML 语言的 Silverlight 也吸引了 WPF 开发者的目光。微软也和 NBC 电视台等合作伙伴一起做出了不少视频媒体方面的应用。当然 Silverlight 技术生不逢时,像 Flash 一样在 HTML 5 标准逐渐成熟之后到了淘汰边缘。而且提到淘汰这个词汇,Flash 毕竟有十几年的用户积累在那里,只会慢慢退出。而本来就没有特别亮点的 Silverlight 就银光一闪,消失在历史的长河中。

当然2007年年底之后微软另外一个大事是重新设计 .NET Framework 的核心部件,全力推动 .NET Framework 4.0 的开发。值得一提的是,或许是由于 Java 开源带来的压力,2007年10月3号起微软采用非开源协议的方式公开了部分 .NET Framework 的参考代码。Enterprise Libraries、Sandcastle 和 Managed Extension Framework 则在2008年先后以完全开源的方式登陆了 CodePlex。微软在试图从 .NET 生态圈的外围来尝试了解开源社区的运作方式,直到2009年4月2日正式开源了 ASP.NET MVC 框架,为全面走向开放开源做好了准备。

可惜的是,直到2009年底微软都没有能够在智能手机领域做出自己的平台和开发技术,白白把这个巨大的新市场拱手让给了苹果和谷歌。甚至曾经孱弱的开源项目 Mono 都在这个时候突然弯道超车,走上了一条完全不同的发展道路,最终破茧成蝶。下一章我们就来看看 Mono 项目早期的一些故事。

相关文章:

  • .NET 的一点历史往事:和 Java 的恩怨

  • .NET的一点历史故事:招兵买马和聚义山林

  • .NET的一点历史故事:擦肩而过的机遇

原文地址:http://weibo.com/ttarticle/p/show?id=2309404102566349825331


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bootstrap样式代码案例

运行结果如下所示&#xff1a; 代码如下所示&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,user-scalableno,initial-scale1.0,maximum-scale1.0,mi…

JS中用构造函数创建对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>/* 构造函数的执行流程&#xff1a;* 1.立刻创建一个新的对象* 2.将新建的对象设置…

SELECT * FROM user WHERE username LIKE #{aaa}与SELECT * FROM user WHERE username LIKE '%${value}%'

在Mybatis中模糊查询like有两种写法&#xff1a; 第一种为SELECT * FROM user WHERE username LIKE #{aaa} 另一种SELECT * FROM user WHERE username LIKE ‘%${value}%’ LIKE #{aaa}执行的SQL为&#xff1a; 使用的是&#xff1f;占位符&#xff1a;对用的是preparedStatem…

bootstrap组件的案例代码

运行结果如图所示&#xff1a; 代码如下所示&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,user-scalableno,initial-scale1.0,maximum-scale1.0,mi…

了解 C# foreach 内部语句和使用 yield 实现的自定义迭代器

在本期专栏中&#xff0c;我将介绍我们在编程时经常用到的 C# 核心构造&#xff08;即 foreach 语句&#xff09;的内部工作原理。了解 foreach 内部行为后&#xff0c;便可以探索如何使用 yield 语句实现 foreach 集合接口&#xff0c;我将对此进行介绍。 虽然 foreach 语句编…

JS中的原型

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">/** 原型 prototype* * 我们所创建的每一个函数&#xff0c;解析器都会向函数中添加一个属性prototype* …

扫盲,为什么分布式一定要有Redis?

转载自 扫盲&#xff0c;为什么分布式一定要有Redis? 考虑到绝大部分写业务的程序员&#xff0c;在实际开发中使用 Redis 的时候&#xff0c;只会 Set Value 和 Get Value 两个操作&#xff0c;对 Redis 整体缺乏一个认知。所以我斗胆以 Redis 为题材&#xff0c;对 Redis …

Mybatis insert操作细节【ID】

默认情况下映射文件中插入数据&#xff1a; <insert id"saveUser" parameterType"com.itheima.domain.User">INSERT INTO user (username,address,sex,birthday) VALUES (#{username},#{address},#{sex},#{birthday})</insert>单元测试 Testp…

关于人脸识别最近浏览器打不开摄像头的解决方案

好久没有发公众号啦&#xff0c;因为最近没有在技术方面有更高的提升&#xff0c;关于人脸识别浏览器兼容问题一直很头疼&#xff0c;时至今日&#xff0c;随着浏览器的更新&#xff0c;代码也不得不更新一下了&#xff0c;今天主要是给大家解决一个谷歌浏览器里面的错&#xf…

C# 7 中的模范和实践

原文地址:https://www.infoq.com/articles/Patterns-Practices-CSharp-7 关键点 遵循 .NET Framework 设计指南&#xff0c;时至今日&#xff0c;仍像十年前首次出版一样适用。API 设计至关重要&#xff0c;设计不当的API大大增加错误&#xff0c;同时降低可重用性。始终保持&q…

JS重写toString(),打印想要的值

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><title></title><script type"text/javascript">function Person(name , age , gender){this.name name;this.age age;this.gender gender;}//修改Perso…

Mybatis实体类属性名与数据库类名不对应的两种解决方法

在Mybatis开发时&#xff0c;如果 Bean的属性名与数据库的类名不一致时&#xff0c;CRUD将出现问题。 数据库类名 Bean的属性名&#xff1a;&#xff08;默认&#xff09; 调整Bean中的属性名&#xff1a;&#xff08;测试不一致&#xff09; 此时原有代码将会报错&#xff…

揭开Java 泛型类型擦除神秘面纱

转载自 揭开Java 泛型类型擦除神秘面纱 泛型&#xff0c;一个孤独的守门者。 大家可能会有疑问&#xff0c;我为什么叫做泛型是一个守门者。这其实是我个人的看法而已&#xff0c;我的意思是说泛型没有其看起来那么深不可测&#xff0c;它并不神秘与神奇。泛型是 Java 中一…

ASP.Net防范XSS漏洞攻击的利器HtmlSanitizer

项目名称:HtmlSanitizer NuGet安装指令:Install-Package HtmlSanitizer 官方网站:https://github.com/mganss/HtmlSanitizer 开源协议:MIT 可靠程度:更新活跃,目前已经是3.x版,成熟靠谱。 1、 什么是XSS漏洞? XSS漏洞又称为“跨站脚本”漏洞,指的是网站对于用户输入的内…

阿里巴巴制定了这 16 条

转载自 阿里巴巴制定了这 16 条 本文内容整理自《阿里巴巴Java开发手册 1.4.0》&#xff0c;获取完整版请在公众号后台回复关键字&#xff1a;手册。 1、【强制】存储方案和底层数据结构的设计获得评审一致通过&#xff0c;并沉淀成为文档。 说明&#xff1a;有缺陷的底层数…

使用 Docker 让传统 .NET 应用程序现代化

15 年来&#xff0c;Microsoft .NET Framework 一直都是成功的应用程序平台&#xff0c;在旧版 Framework 和旧版 Windows Server 上运行的业务关键应用程序不计其数。这些传统应用程序仍具有很大的业务价值&#xff0c;但其维护、升级、扩展和管理难度可能很大。同样&#xff…

Mybatis中properties标签的使用

作用域&#xff1a;主配置文件SqlMapConfig.xml中 第一种写法&#xff01; value值使用${properties中property中name} 第二种写法&#xff1a; 创建文件&#xff1a;jdbcConfig.properties jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/ee42 jd…

.NET的一点历史故事:作者的一些感想

最近几天通过微博的头条文章平台公开连载了《.NET的一点历史故事》一书的部分草稿。不论是书名还是章节内容&#xff0c;目前真的是仅仅草稿阶段。所以这么早就以连载的方式发布出来&#xff0c;一方面是正在准备在蒙特利尔这边微软技术圈的两场演讲&#xff0c;需要自己尽快恢…

Mybatis中typeAliases标签和package标签

1、typeAliases 主配置文件&#xff1a; <typeAliases><typeAlias type"com.itheima.domain.User" alias"user"></typeAlias></typeAliases>映射配置文件&#xff1a; 2、package 主配置文件<typeAliases><!--<t…

PPT 2010实现使用自定义主题付下载

直接入主题&#xff0c;首先我们打开PPT2010&#xff0c;如下图所示&#xff1a; 点击设计&#xff0c;找到浏览主题&#xff1a; 然后找到我们需要的主题&#xff0c;我已经整理了常用的40套&#xff1a; 最后完美更改