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

news/2024/5/20 0:01:29/文章来源:https://blog.csdn.net/gongdiwudu/article/details/131901650

一、说明

        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.luyixian.cn/news_show_335078.aspx

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

相关文章

Training-Time-Friendly Network for Real-Time Object Detection 论文学习

1. 解决了什么问题&#xff1f; 目前的目标检测器很少能做到快速训练、快速推理&#xff0c;并同时保持准确率。直觉上&#xff0c;推理越快的检测器应该训练也很快&#xff0c;但大多数的实时检测器反而需要更长的训练时间。准确率高的检测器大致可分为两类&#xff1a;推理时…

STM32MP157驱动开发——按键驱动(工作队列)

文章目录 “工作队列”机制&#xff1a;内核函数work_struct 结构体定义 work使用 work &#xff1a;schedule_workworkqueue 其他函数 工作队列方式的按键驱动程序(stm32mp157)编程思路button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “工作队列”机制&#xff1…

【stable diffusion】保姆级入门课程05-Stable diffusion(SD)图生图-涂鸦重绘的用法

1.什么是涂鸦重绘 涂鸦重绘又称手涂蒙版。 简单来说&#xff0c;局部重绘手涂蒙版 就是涂鸦局部重绘的结合体&#xff0c;这个功能的出现是为了解决用户不想改变整张图片的情况下&#xff0c;对多个元素进行修改。 功能支持&#xff1a; 1.支持蒙版功能 2.笔刷决定绘制的元素…

DB-GPT:强强联合Langchain-Vicuna的应用实战开源项目,彻底改变与数据库的交互方式

今天看到 蚂蚁科技 Magic 开源的DB-GPT项目&#xff0c;觉得创意很好&#xff0c;集成了当前LLM的主流技术&#xff0c;主要如下 Langchain&#xff1a; 构建在LLM之上的应用开发框架HuggingFace: 模型标准&#xff0c;提供大模型管理功能Vicuna: 一个令GPT-4惊艳的开源聊天机…

如何在3ds max中创建可用于真人场景的巨型机器人:第 3 部分

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 创建腿部装备 步骤 1 打开 3ds Max。 打开在本教程最后一部分中保存的文件。 打开 3ds Max 步骤 2 转到创建> 系统并单击骨骼。 创建>系统 步骤 3 为的 侧视口中的腿&#xff0c;如下图所示…

更省更快更安全的云服务器,一站式集中管理,随时随地远程——站斧云桌面

随着全球化和数字化经济的发展&#xff0c;越来越多的企业开始海外扩张和拓展国际市场。而云服务器作为一种高效、灵活且可靠的IT基础设施方案&#xff0c;已成为出海企业不可或缺的重要工具。这里就为大家介绍云服务器在出海企业中的几个使用场景。 1.全球范围内协同办公 对…

开源大模型LLaMA 2会扮演类似Android的角色么?

在AI大模型没有商业模式&#xff1f;等文章中&#xff0c;我多次表达过这样一个观点&#xff1a;不要把大模型的未来应用方式比喻成公有云&#xff0c;大模型最终会是云端操作系统的核心&#xff08;新通用计算平台&#xff09;&#xff0c;而它的落地形式会很像过去的沃森&…

python绘制地图时添加比例尺

目前为止我没有找到cartopy包自动添加地图比例尺的方式&#xff0c;我结合别人的代码写了这个手动添加比例尺的函数&#xff0c;个人觉得在外观上比线段比例尺漂亮一些。之所以是手动的&#xff0c;是因为这种方法不会根据你的地图坐标系和投影自动生成比例尺&#xff0c;而需要…

Windows如何安装Django及如何创建项目

目录 1、Windows安装Django--pip命令行 2、创建项目 2.1、终端创建项目 2.2、在Pycharm中创建项目 2.3、二者创建的项目有何不同 2.4、项目目录说明 1、Windows安装Django--pip命令行 安装Django有两种方式&#xff1a; pip命令行【推荐--简单】手动安装【稍微复杂一丢丢…

高效协作处理缓存清理需求:生产者-消费者模式助力多模块缓存管理

在现代应用系统中&#xff0c;缓存是提高性能和减少数据库负载的重要手段之一。然而&#xff0c;缓存的数据在某些情况下可能会过期或者变得无效&#xff0c;因此需要及时进行清理。在复杂的应用系统中&#xff0c;可能有多个系统、多个模块产生缓存清理需求&#xff0c;而这些…

机器学习原理(1)集成学习基本方法

一.什么是集成学习 集成学习&#xff08;ensemble learning&#xff09;通过将多个学习器进行组合来完成学习任务。下图显示集成学习的一般结构&#xff08;取自周志华老师的西瓜书&#xff09;&#xff0c;个体学习器通常由一种现有的学习算法从训练数据产生&#xff0c;例如…

window10脚本转服务教程

先说下脚本/我们启动的一些三方服务转window本机服务目前我了解到的好处 一键设置开机自启、随用随启、延时自启解决一些服务类应用启动后会阻塞当前dos窗口导致桌面一直要开着的问题脚本化服务注册&#xff0c;方便管理&#xff0c;统一运维… 1. 实践涉及内容介绍 编写好的…

蓝牙HID配对过程

配对通常调用分两步 &#xff11;. Bluetooth AdapterService.cancelDiscovery btif_dm_cancel_discovery BTfM_CancelInquiry BTA_DM_SEARCH_CANCEL_CMPL_EVT BTM_BLI_INQ_CANCEL_EVT BTM_BLI_INQ_DONE_EVT discovery_state_changed_cb btif_dm_cancel_discovery BTA_DM_SE…

CBC字节翻转攻击介绍 例题

知识导入&#xff08;AES-CBC模式&#xff09; 加密过程 1、首先将明文分组(常见的以16字节为一组)&#xff0c;位数不足的使用特殊字符填充。 2、生成一个随机的初始化向量(IV)和一个密钥。 3、将IV和第一组明文异或。 4、用key对3中xor后产生的密文加密。 5、用4中产生的密文…

如何在3ds max中创建可用于真人场景的巨型机器人:第 1部分

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 创建主体 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 在左侧视口中&#xff0c;按键盘上的 Alt-B 键。它 打开视口配置窗口。 打开“锁定缩放/平移”和“匹配位图”选项。单击“文件”并转到参考 …

刷题小总结

数组 数组是存放在连续内存空间上的相同类型数据的集合。 经典题目&#xff1a; 二分查找 双指针法 滑动窗口 模拟行为 链表 链表的种类主要为&#xff1a;单链表&#xff0c;双链表&#xff0c;循环链表链表的存储方式&#xff1a;链表的节点在内存中是分散存储的&…

github gitlab 多用户多平台切换

一、背景 我需要用账号1 来登录并管理github 账号 我需要用账号2 来登录并管理gitlab 账号 二、设置账号 邮箱 设置账号1用户名与邮箱 git config --global user.name "miaojiang" git config --global user.email "187133163.com" 三、生成本地密钥…

electron-egg 加密报错

electron框架&#xff1a;electron-egg 解决方式 npm uninstall bytenode npm install bytenode1.3.6node:internal/modules/cjs/loader:928 throw err; ^ Error: Cannot find module ‘node:assert/strict’ Require stack: D:\electron-egg-test\new-electron-egg\electr…

PaddleOCR #PP-OCR常见异常扫雷

异常一&#xff1a;ModuleNotFoundError: No module named ‘tools.infer’ 实验案例&#xff1a; PaddleOCR #使用PaddleOCR进行光学字符识别&#xff08;PP-OCR文本检测识别&#xff09; 参考代码&#xff1a; 图片文本检测实验时&#xff0c;运行代码出现异常&#xff1a;M…

python取出序号重命名文件

前言 早上好&#xff01; \;\\\;\\\; 目录 前言源码 源码 date:2023-7-25 周二test-樱花动漫播放器.mp4 -> a1.mp4 这个文件不管 test-樱花动漫播放器(1).mp4 -> a2.mp4 test-樱花动漫播放器(2).mp4 -> a3.m,p4 ... import os,sys,redef change…