【C#】微软的Roslyn 是个啥?

news2024/11/20 20:22:30

一、说明

        Roslyn 是微软重写的C#编译器并开源。

        Roslyn 是 C# 和 Visual Basic.NET 开源编译器的代号。以下是它如何在过去十年企业Microsoft的最黑暗中开始,并成为所有C#(和VB)的开源,跨平台,公共语言引擎,我将在本文的其余部分将其视为给定的)。

二、Roslyn的历史渊源

        当 在 2005 年加入 Microsoft 时,关于什么将成为 Roslyn 的第一次对话已经在进行中 — 就在 .NET 2.0 发布之前。那次谈话是关于用 C# 重写 C#。这是编程语言的正常做法;语言成熟的证明。但还有一个更实际和更重要的动机:作为 C# 的创建者,我们自己不是用 C# 编程,而是用C++编码!每天使用 C# 会让你对 C# 有不同的看法:这是“狗食”的力量。

客户将依赖于新编译器的行为方式与旧编译器完全相同。为 C# 编写新的编译器意味着尝试逐个错误地匹配旧的编译器。

        重写已经掌握在客户手中多年的编译器的挑战在于,这些客户将依赖于新编译器的行为方式与旧编译器完全相同。为 C# 编写新的编译器意味着尝试逐个错误地匹配旧的编译器。我说的不仅仅是已知的错误,还有开发人员发现并依赖的那些未知和意外的行为,通常是在不知不觉中。

        多年来,这一挑战的艰巨性使我们甚至无法开始这个项目。

        此外,虽然语言团队内部对用 C# 编写的新 C# 编译器有很多好处,但对客户的价值主张更具挑战性:新编译器将如何帮助现有客户?也许唯一关心 C# 是用 C# 编写的人是编译器团队的成员。

        在但与此同时,另一个问题越来越大:处理 C# 代码的不同工具之间的重复工作。除了编译器之外,我们的姊妹团队还在Visual Studio中构建对C#的IDE支持,他们还必须编写大量代码(当时也是C++)来理解C#语法和语义。

        除此之外,来自Microsoft和其他工具(如StyleCop,CodeRush等)的越来越多的工具都必须从平面C#源文本开始实现有意义的基于代码的工具。所有这些都会有微妙不同的错误,不同的理解水平,不同的妥协和权衡。所有这些都会花费大量的精力来达到原点:理解代码。

最后,我们的价值主张是:使世界上只需要有一个理解 C# 的代码库,每个想要在代码上构建工具的人都可以共享!

        最后,我们的价值主张是:使世界上只需要有一个理解 C# 的代码库,每个想要在代码上构建工具的人都可以共享!客户价值将来自可用工具的增加,特别是现有工具的质量。我们将把所有语言的正确性和性能要求放在一个代码库上,并花费一次精力来使其具有出色的质量和巨大的多功能性。我们将构建一个语言引擎!一个统一的、公共的 API 到 C# 代码:我们将重新定义“编译器”的含义。

        当然,一旦你为广泛的C#社区构建了一个API,它应该是一个.NET API,用C#实现,这有点麻烦。因此,在 C# 中“引导”C# 的旧梦想几乎是一个偶然的附带好处。

因此,Roslyn 诞生于一种开放的心态:共享 C# 的内部工作原理,供全世界以编程方式使用。这本身就是在仍然普遍封闭的文化中迈出的大胆一步。

        R因此,oslyn 诞生于一种开放的心态:共享 C# 语言的内部工作原理,供全世界以编程方式使用。这本身就是一个大胆的主张,在当时仍然普遍封闭的文化中Microsoft:我们会免费分享这些知识产权吗?我们会授权不是我们的工具制造商更好地与我们竞争吗?

        在这里为我们赢得胜利的论点是关于加强生态系统并成为地球上最好的工具语言。它们是关于 C# 和 .NET 的长期增长,而不是短期货币化和Microsoft资产保护。因此,即使没有提到开源,签署Roslyn项目的成本和风险对Microsoft来说也是一大而大胆的一步。

        当然,你不只是构建这样的东西。Roslyn 的愿景雄心勃勃,也充满了技术挑战,我们花了五年时间才实现它。但那是另一天的故事了。

自从该项目在2009年认真启动以来,我们就有使我们的编译器开源的愿景,但Microsoft还没有准备好。

        F或者大多数时候我们在构建初始版本,Roslyn 仍然是一个闭源项目。自从该项目在2009年认真启动以来,我们就有使我们的编译器开源的愿景,但Microsoft还没有准备好。私下开发和围绕原始代码申请专利的文化代表了Microsoft自 1970 年代以来的工作方式——虽然变化正在酝酿之中,但它的发生速度比我们团队希望的要慢。

        事实上,有一段时间感觉公司正朝着完全相反的方向发展。

        Windows 8项目几乎接管了整个公司。凭借其新的编程模型,它的触角深入到开发人员工具和语言团队中,一切都被极端保密,不仅对外部,甚至在公司内部。举个例子,我们当时开发的异步功能是与 Windows 8 编程模型协调和纠缠在一起的,我甚至不敢在内部发布它的设计笔记,生怕不小心泄露了有关 Windows 8 的信息,给自己惹上麻烦!这为创新创造了一个可怕的气候,对于我们开源C#编译器的希望来说,这当然不是好兆头。

        E然而,在Windows 8运行完之后,该公司开始转型并找到了新的方向,走向新的领导层和截然不同的核心理念;我们今天所知道Microsoft。开源运动现在迅速开始在Microsoft内部扎根。

        F# 已于 2010 年发布,具有开源许可证和自己的基金会 - F# 软件基金会。围绕它成长的充满活力的社区很快成为我们所有人羡慕的对象。我们的团队大力推动 Roslyn 获得开源生产许可证,最终出现了全公司范围的基础设施,使之成为现实。

        到2012年,Microsoft创建了Microsoft开放技术;一个专注于开源项目的组织。Roslyn 转到Microsoft开放技术公司,并正式成为开源。它是一个很好的候选者:开发资源都是内部的和众所周知的,项目本身是独立的,没有很多可能造成许可冲突的依赖关系。

三、Roslyn横空问世

        2014 年 3 月,在旧金山举行的 Microsoft “Build”开发者活动中,Anders Hejlsberg 展示了 Roslyn 作为一个开源项目,Roslyn 于 2 月 0 日通过 CodePlex(Microsoft 年退役的开源托管平台)在 Apache <>.<> 许可下发布。

        Project Roslyn in CodePlex under Microsoft Open Tech

        与此同时,.NET Foundation被宣布为包括Roslyn在内的.NET项目的所在地。

        在户外呼吸着新鲜空气!即使我们开始从 CodePlex 的开放性中获益,Microsoft剩下的程序开源障碍也得到了理顺,今天开源是我们在许多团队中工作方式中直接且不可或缺的一部分。

我们不再将 GitHub 视为发布场所——它只是我们工作的地方。

        在其他方面,公司也意识到我们不需要控制一切。很明显,CodePlex 没有充分的理由出现在世界上,Roslyn 加入了其他项目,从 CodePlex 迁移到 GitHub,当时GitHub 实际上是开源项目的大本营。不仅源代码,而且构建它的过程都在 GitHub 中:我们不把它当作一个发布场所——它只是我们工作的地方。

        罗斯林今天在 GitHub 上

        C# 语言设计和编译器实现现在是完全开放的流程,有很多非Microsoft参与,包括由外部贡献者构建的整个语言功能。C# 的价值在于屋顶,不仅通过贡献功能和错误修复来扩展工作量,还通过开源提供的即时每日反馈循环获得的洞察力和课程更正。

        这是一段漫长而狂野的旅程,对我来说,这象征着Microsoft在过去十年中经历的巨大变化。Roslyn的掘金始于黑暗,在开放的想法上成长,并通过开源的力量在今天爆发出一百万种不同的用途。

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

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

相关文章

LiveGBS流媒体平台GB/T28181功能-设备树自定义分组自定义组织机构选择通道共享给上级国标平台配置权限给指定用户

LiveGBS流媒体平设备树自定义分组自定义组织机构选择通道共享给上级国标平台权限给指定用户 1、背景2、分组2.1、新建分组2.2、选择通道2.3、导入设备2.4、编辑名称2.5、删除分组2.6、移除分组 3、国标级联3.1、分组共享节点3.1.1、共享给上级平台3.1.2、分配权限给用户 3.2、级…

智能制造RFID设备包括哪些?

智能制造是现代制造业的重要发展方向&#xff0c;其核心是数字化、网络化和智能化。而在智能制造中&#xff0c;RFID设备是一种不可或缺的技术手段&#xff0c;主要用于实现物品的识别、追踪和化管理。以下是智能制造中常用的RFID设备及其功能&#xff1a; 1、 RFID读写器 RFID…

环境搭建和HelloWorld

文章目录 环境搭建和HelloWorld计算机基础知识计算机诞生计算机发展历程计算机硬件计算机软件 DOS命令概述打开命令提示符窗口常用DOS命令 Java概述和环境搭建诞生和发展Java平台版本和作用Java语言特点Win64系统搭建Java8开发环境 第一行代码--HelloWorld创建Java文件编写Java…

PGembedding 代码分析

pgembedding 存储结构 pg embedding 数据是存在共享内存中的&#xff0c;pg down 之后索引数据就没了&#xff0c;但索引对象本身还在&#xff0c;第一次访问时会重新创建。 数据以 plain 的形式存储&#xff0c;其中每个点是这样的结构&#xff1a; idx_size&#xff1a; 表…

Stephen Wolfram:概率从何而来?

Where Do the Probabilities Come From? 概率从何而来&#xff1f; OK, so ChatGPT always picks its next word based on probabilities. But where do those probabilities come from? Let’s start with a simpler problem. Let’s consider generating English text one …

Palo Alto Networks 智能网络安全保护任何地方的用户、应用和数据

Palo Alto Networks 不仅能够为数字企业提供当下所需的网络安全服务&#xff0c;还能为日后的工作打好安全基础&#xff0c;让企业无需在二者间权衡和纠结&#xff0c;这样的网络安全合作伙伴仅此一家。我们承诺将双管齐下&#xff0c;在保障数字企业的安全方面绝不妥协退让。下…

linux barrier 栅栏屏障,让多任务在栅栏处集合,全部到齐后同时出发

​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 概述 pthread_barrier_t 这是posix定义线程同步方法&#xff0…

Windows电脑应用设置开机自启动

背景 比如我们程序员&#xff0c;开机就想电脑自启动谷歌浏览器和VS Code等开发工具&#xff0c;自己什么都不用动&#xff0c;怎么办&#xff1f;有人说可以在任务管理器的启动里设置&#xff0c;但还是有些工具里面没有的&#xff0c;也就是不能这样设置的&#xff0c;今天教…

Windows环境下git客户端中的git-bash和MinGW64

我们在 Windows10 操作系统下&#xff0c;安装了 git 客户端之后&#xff0c;可以通过 git-bash.exe 打开一个 shell&#xff1a; 执行一些 linux 系统里的命令&#xff1a; 注意到上图紫色的 MINGW64. Mingw-w64 是原始 mingw.org 项目的改进版&#xff0c;旨在支持 Window…

数据结构【线性表】

数据结构入门级 第二章 线性表 一、线性表的定义和基本操作 线性表的定义&#xff1a;具有相同属性数据类型的数据元素组成的一个有限序列&#xff1b;除第一个元素外的元素都有直接前驱&#xff0c;除最后一个元素外的元素都有直接后继&#xff1b;存在一个唯一被称为“第一个…

【ARM Coresight 系列文章 10.3 - ARM Coresight STM 寄存器介绍 及STM DMA 传输介绍】

文章目录 STM Register summarySTM DMA 相关的寄存器DMA TransferBurst requestSingle and burst request STM Register summary STM 的寄存器主要可以分为以下几类&#xff1a; STM DMA 相关的&#xff1b;STM HW Trigger 相关的&#xff1b;系统控制及状态寄存器&#xff1…

CSS布局定位+装饰

一、定位 1.1 网页常见布局方式 1. 标准流 1. 块级元素独占一行 → 垂直布局 2. 行内元素/行内块元素一行显示多个 → 水平布局 2. 浮动 1. 可以让原本垂直布局的 块级元素变成水平布局 3. 定位 1. 可以让元素自由的摆放在网页的任意位置 2. 一般用于 盒子之间的层叠情…

Java的运行时数据区域

Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有些区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是依赖用户线程的启动和结束而建立和销毁。 根据《Jav…

OpenAI宣布安卓版ChatGPT正式上线;一站式 LLM底层技术原理入门指南

&#x1f989; AI新闻 &#x1f680; OpenAI宣布安卓版ChatGPT正式上线 摘要&#xff1a;OpenAI今日宣布&#xff0c;安卓版ChatGPT已正式上线&#xff0c;目前美国、印度、孟加拉国和巴西四国的安卓用户已可在谷歌Play商店下载&#xff0c;并计划在下周拓展到更多地区。Chat…

VMware Network Adapter VMnet1和VMnet8 未识别的网络问题

在安装虚拟机的时候使用的网络类型未NAT模式&#xff0c;但是却无法和外部网络ping通&#xff0c;并且使用Xshell进行连接反应也非常慢&#xff1b;于是在我查询半天问题之后&#xff0c;这个问题得到了解决&#xff0c;具体如下&#xff1a; 在使用NAT网络模式的时候需要进行…

【portswigger】第二专题-XSS(二)

portswigger 靶场&#xff08;第二章节&#xff09;XSS 视频同步更新至bilibili bibi地址欢迎关注微信公众号&#xff1a;微光安全团队 这是官方备忘录&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet总体目录 我这里简单总结一下每个…

nodejs+vue+elementui高校科研队伍管理系统_2byeq

系统阐述的是使用科研管理系统&#xff0c;对于nodejs、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了vue框架和MySql数据库技术搭建系统的整体架构。利用这些技术结合实际需…

【Haclon】Liunx每个月过期了怎么使用

Liunx每个月过期怎么使用 1.去gitHub进行下载2. 下载最新的Halcon_licenses3.进行替换 1.去gitHub进行下载 https://github.com/lovelyyoshino/Halcon_licenses 2. 下载最新的Halcon_licenses sudo vim ~/.bashrc找到/opt/halcon 3.进行替换 /opt/halcon/license 将这个目…

百万数据分页查询优化方案

分页问题 分页列表查询是项目中的热点需求&#xff0c;这种需求的特点是&#xff1a;字段多、数据量大、访问频繁、使用率高的特点&#xff0c;这个功能是给用户最直观的展示系统的信息&#xff0c;针对于多、大、频、热这几个特点&#xff0c;会引申出一个问题&#xff1a;列…

swmm模型城市内涝一维二维耦合;海绵城市+SWMM完整版教程

随着计算机的广泛应用和各类模型软件的发展&#xff0c;将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。本次将聚焦于综合利用GIS及CAD等工具高效地进行大规模城市排水系统水力模型的建立&#xff0c;利用SWMM实现排水系统水力模拟。讲解SWMM…