当前位置: 首页 > news >正文

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

一、说明

        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的掘金始于黑暗,在开放的想法上成长,并通过开源的力量在今天爆发出一百万种不同的用途。

相关文章:

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

一、说明 Roslyn 是微软重写的C#编译器并开源。 Roslyn 是 C# 和 Visual Basic.NET 开源编译器的代号。以下是它如何在过去十年企业Microsoft的最黑暗中开始&#xff0c;并成为所有C#&#xff08;和VB&#xff09;的开源&#xff0c;跨平台&#xff0c;公共语言引擎&#xff0c…...

两个小封装电机驱动芯片:MLX813XX、A4950

一&#xff0e;MLX813XX MELEXIS的微型电机驱动MLX813XX系列芯片集成MCU、预驱动以及功率模块等能够满足10W以下的电机驱动。 相对于普通分离器件的解决方案&#xff0c;MLX813XX系列电机驱动芯片是一款高集成度的驱动控制芯片&#xff0c;可以满足汽车系统高品质和低成本的要…...

数据结构【绪论】

数据结构入门级 第一章绪论 什么是数据结构&#xff1f;什么是数据类型&#xff1f; 程序数据结构算法 一、基本概念&#xff1a; 数据&#xff1a;指所有能被计算机处理的&#xff0c;无论图、文字、符号等。数据元素&#xff1a;数据的基本单位&#xff0c;通常作为整体考…...

掌握无人机遥感数据预处理的全链条理论与实践流程、典型农林植被性状的估算理论与实践方法、利用MATLAB进行编程实践(脚本与GUI开发)以及期刊论文插图制作等

目录 专题一 认识主被动无人机遥感数据 专题二 预处理无人机遥感数据 专题三 定量估算农林植被关键性状 专题四 期刊论文插图精细制作与Appdesigner应用开发 近地面无人机植被定量遥感与生理参数反演 更多推荐 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多…...

Angular中组件设计需要注意什么?

在 Angular 中设计组件时&#xff0c;有几个重要的方面需要注意。以下是一些建议&#xff1a; 1、单一职责原则&#xff1a;确保每个组件只负责一个明确定义的任务。这有助于保持组件简单、可维护&#xff0c;并且易于重用。 2、组件通信&#xff1a;了解组件之间的通信方式。…...

电容触摸屏(TP)的工艺结构

液晶显示屏(LCM),触摸屏(TP) “GG、GP、GF”这是结构分类&#xff0c;第一个字母表面材质&#xff08;又称为上层&#xff09;&#xff0c;第二个字母是触摸屏的材质&#xff08;又称为下层&#xff09;&#xff0c;两者贴合在一起。 G玻璃&#xff0c;FFILM&#xff0c;“”贴…...

Qt小妙招:如何在可执行文件生成后,在pro文件中添加其他命令操作?

问题描述&#xff1a; 场景1&#xff1a;我的可执行文件设置生成路径为某个最终目录的bin目录下&#xff0c;当我要修改某些config.ini或者xxx.json,或者一些qss&#xff0c;css文件的时候&#xff0c;我想直接在构建的时候&#xff0c;Qtcreator帮我直接拷贝过去&#xff0c;…...

做好防雷检测的意义和作用

防雷检测是指对雷电防护装置的性能、质量和安全进行检测的活动&#xff0c;是保障人民生命财产和公共安全的重要措施。我国对防雷检测行业有明确的国家标准和管理办法&#xff0c;要求从事防雷检测的单位和人员具备相应的资质和能力&#xff0c;遵守相关的技术规范和规程&#…...

计算机启动过程uefi+gpt方式

启动过程&#xff1a; 一、通电 按下开关&#xff0c;不用多说 二、uefi阶段 通电后&#xff0c;cpu第一条指令是执行uefi固件代码。 uefi固件代码固化在主板上的rom中。 &#xff08;一&#xff09;uefi介绍 UEFI&#xff0c;全称Unified Extensible Firmware Interface&am…...

探索容器镜像安全管理之道

邓宇星&#xff0c;Rancher 中国软件架构师&#xff0c;7 年云原生领域经验&#xff0c;参与 Rancher 1.x 到 Rancher 2.x 版本迭代变化&#xff0c;目前负责 Rancher for openEuler(RFO)项目开发。 最近 Rancher v2.7.4 发布了&#xff0c;作为一个安全更新版本&#xff0c;也…...

【MySQL】内置函数

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《零基础入门MySQL》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录 &#x1f449;函…...

使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

工具 make&#xff1a;Windows中没有make&#xff0c;但是可以通过安装MinGW或者MinGW-w64&#xff0c;得到make。gcc-arm-none-eabi&#xff1a;建议最新版&#xff0c;防止调试报错OpenOCDvscodecubeMX VSCODE 插件 Arm Assembly&#xff1a;汇编文件解析C/C&#xff1a;c…...

图数据库Neo4j学习二——cypher基本语法

1命名规范 名称应以字母字符开头&#xff0c;不以数字开头&#xff0c;名称不应包含符号&#xff0c;下划线除外可以很长&#xff0c;最多65535( 2^16 - 1) 或65534字符&#xff0c;具体取决于 Neo4j 的版本名称区分大小写。:PERSON和:Person是:person三个不同的标签&#xff…...

ChatGPT:人工智能交互的未来之光

一、ChatGPT&#xff1a;开启自然语言交流新纪元 ChatGPT 是基于 GPT&#xff08;生成式预训练&#xff09;技术的最新版本&#xff0c;它采用深度学习模型&#xff0c;通过在大规模文本数据上的预训练来理解自然语言&#xff0c;并生成具有连贯性和合理性的回复。ChatGPT 是一…...

128最长连续数组

题目描述 最长连续序列 https://leetcode.cn/problems/longest-consecutive-sequence/class Solution {public:int longestConsecutive(vector<int>& nums) {unordered_set<int> st(...

redis 1

shell 1&#xff1a;安装1. 源码安装&#xff08;CENTOS&#xff09; 2.999:可能会出现得问题1. 编译出错 1&#xff1a;安装 1. 源码安装&#xff08;CENTOS&#xff09; 官方下载源码包 wget https://download.redis.io/redis-stable.tar.gz # 安装依赖 yum install gcc解压…...

vue+Element项目中v-for循环+表单验证

如果在Form 表单里有通过v-for动态生成&#xff0c;如何设置验证呢&#xff1f; <el-form ref"ruleFormRef" :model"ruleForm" status-icon :rules"rules" label-width"120px"class"demo-ruleForm" hide-required-aster…...

Day 66-68 主动学习之ALEC

代码&#xff1a; package dl;import java.io.FileReader; import java.util.*; import weka.core.Instances;/*** Active learning through density clustering.*/ public class Alec {/*** The whole dataset.*/Instances dataset;/*** The maximal number of queries that …...

local-path-provisioner与pvc本地磁盘挂载helm部署

1.helm拉取安装包 helm repo add containeroo https://charts.containeroo.ch helm pull containeroo/local-path-provisioner --version 0.0.19 tar -zxvf local-path-provisioner-0.0.19.tgz cd local-path-provisioner mv values.yaml values.yaml.back grep -v "#&qu…...

Visio/PPT/Matlab输出300dpi以上图片【满足标准投稿要求】

1. visio 遵照如下输出选项&#xff0c;另存为tif格式文件时&#xff0c;选择正确输出便是300dpi以上 2. matlab 文件选项选中导出设置&#xff0c;在渲染中选择dpi为600&#xff0c;导出图片即可&#xff0c;科研建议选择tif格式文件 3.ppt 打开注册表&#xff0c;winr键…...

科技UI图标的制作

科技UI图标的制作&#xff0c;效果图如下&#xff1a; 一、新建合成 1、新建合成&#xff0c;命名为合成1&#xff0c;参数设置如下&#xff1a; 2、新建纯色&#xff0c;命名为分形 二、添加分形杂色 1、添加分形杂色 为纯色层“分形”&#xff0c;添加分形杂色&#xff0c…...

微信小程序将接口返回的文件流预览导出Excel文件并转发

把接口url替换就可以用了 exportExcel () {wx.request({url: importMyApply, //这个地方是你获取二进制流的接口地址method: POST,responseType: "arraybuffer", //特别注意的是此处是请求文件流必须加上的属性&#xff0c;不然你导出到手机上的时候打不开&#xff…...

windows 安装 mongodb 数据库

软件下载 访问官方的下载地址&#xff1a; https://www.mongodb.com/try/download/community &#xff0c;然后选择对应的版本进行下载 下载好了之后双击进行安装 软件安装 1、点击 next 点击下一步 2、勾选接受协议&#xff0c;点击 next 3、第三页有两个选项&#x…...

业务不打烊:解决软件系统升级痛点的新方法

数字化时代&#xff0c;随着用户对产品性能和功能要求的不断提升&#xff0c;应用服务升级成了企业保持竞争力的关键之一。然而&#xff0c;传统的应用服务升级往往会给用户带来不必要的中断和不便&#xff0c;这种“伤筋动骨”的升级方式已经无法满足日益增长的用户需求&#…...

csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

文章目录 ⭐前言⭐利用inscode免费开放资源&#x1f496; 在inscode搭建vue3tsant项目&#x1f496; 调整配置&#x1f496; antd 国际化配置&#x1f496; 用户store&#x1f496; 路由权限&#x1f496; 预览 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享…...

通过 CSS 的样式实现语音发送动效类似声音震动的效果

实现效果&#xff1a;一般用于发送语音的时候&#xff0c;出现动画效果 //模版部分 <view class"musical-scale"><view class"scale"><view class"em" v-for"(item,index) in 15" :key"index"></view…...

【C#】.Net Framework框架使用JWT

2023年&#xff0c;第31周&#xff0c;第2篇文章。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 本篇文章主要简单讲讲&#xff0c;.Net Framework框架下使用JWT的代码例子&#xff0c;以及他们的基本概念。 2002年微软发布了.net framewo…...

SQL高级教程第三章

SQL CREATE DATABASE 语句 CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库。 SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL CREATE DATABASE 实例 现在我们希望创建一个名为 "my_db" 的数据库。 我们使用下面的 CREATE DATABASE 语句&…...

vue 3.0 下载本地pdf文件

使用a标签,把pdf文件放到public文件夹下面 <el-form label-width"160px"> <el-form-item label"使用手册"> <div class"form-item-static"> <a href"/使用手册.pdf" target"_blank" class"link&q…...

平板用的触控笔什么牌子好?ipad第三方电容笔推荐

随着技术的发展&#xff0c;出现了各种各样的平板电容笔。一支好的电容笔&#xff0c;不但可以极大地提升我们的工作效率&#xff0c;还可以极大地提升我们的学习效果。平替的电容笔&#xff0c;无论是在技术方面&#xff0c;还是在质量方面&#xff0c;都还有很大的提升空间&a…...