一切都要从华为云 CloudIDE 酷似 VS Code 说起

前不久,有个关于华为云 CloudIDE 的问题在知乎、朋友圈、微博等圈子引起了广泛的讨论,甚至上了知乎热榜。

那么,背后的真实情况到底是如何的?且听韩老师娓娓道来。

华为云 CloudIDE 酷似 VS Code?

首先要明确一点,华为云 CloudIDE 是基于 Eclipse Theia 开发,而不是 VS Code。

所以问题可以转化为“为什么 Eclipse Theia 和 VS Code 很相似”?

先说说 Eclipse Theia。它完全开源,可以跑在浏览器和桌面环境中。开发技术栈的话,与 VS Code 一样,也是基于前端技术栈(TypeScript、HTML、CSS)。桌面版的 Eclipse Theia,也是基于 Electron。

然后再说说 Eclipse Theia 与 VS Code 相似的地方。主要有以下几个关联点:

  • Eclipse Theia 使用了 Monaco Editor

  • Eclipse Theia 支持 Language Server Protocol(LSP)

  • Eclipse Theia 支持 Debug Adapter Protocol(DAP)

  • Eclipse Theia 支持运行 VS Code 的插件(支持大部分的 VS Code 插件 API)

通过以上的这几个关联点,也就同时能解释了提问者的引申问题“为什么大家做 Cloud IDE 的时候都会基于 VSCode/类 VSCode 这一套体系?”:因为 VS Code 丰富的生态(Monaco Editor、LSP、DAP 和插件生态)。

华为云 CloudIDE 是否需要开源?

Eclipse Theia 使用的是 Eclipse Public License 2.0(EPL 2.0)协议。而 EPL 2.0 协议,甚至是最为严苛的 GPL 协议,都只是对分发的软件做了限制。

华为云 CloudIDE 没有作为软件分发,只是作为云服务提供,所以也不需要开源。

只有类似于 APGL 这样的协议,才会对云服务有限制,需要开源。

Eclipse Theia 要取代 Eclipse

首先,Eclipse Theia 和 Eclipse IDE 没啥关系。不存在谁取代谁。只不过它们都是 Eclipse Foundation 的项目。Eclipse Foundation 还有众多的项目。其中,IDE 相关的项目有 Eclipse IDE, Eclipse Che, Eclipse Theia, Eclipse Orion 等。

更多 Web IDE

其实,除了华为云 CloudIDE,还有很多不错的 Web IDE,其中有不少都是基于 VS Code 或者 Monaco Editor。

微软官方出品的 Visual Studio Online 就自然不用说了,其它的还有 Code Server、Cloud Studio、Cloud9、Gitpod、CodeSandbox、StackBlitz 等等。其中许多 Web IDE 都支持运行 VS Code 插件。开发一个 VS Code 插件,就能处处运行!

关注”玩转 VS Code“,以后让韩老师和大家聊聊那些不错的 Web IDE。

彩蛋

最后再来个小彩蛋,如果访问 Eclipse Theia 官网,你可以看到 Contributors & Adopters:

如果你想更完整地了解 Eclipse Theia,之后韩老师可以再和大家详聊~

◆ ◆ ◆ ◆ ◆

推荐阅读:

  • Code Runner for VS Code 突破 1000 万下载量!支持运行超过 40 种语言

  • 重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境

  • 微软也爱 Python!VS Code Python 全新发布!Jupyter Notebook 原生支持终于来了!

  • 微软也爱 Java!微软在 SpringOne 大会上宣布 Azure Spring Cloud 云服务!

  • 在微软工作是怎样一番体验?(第二篇)

  • 微软内推,长期有效

  • VS Code 知乎 Live,参与人数突破 1000 人!

  • 代码编辑器横评:为什么 VS Code 能拔得头筹

  • 知否知否,VS Code 不止开源

  • 那些年,我们一起追的 VS Code

玩转VS Code

VS Code · 编程开发 · 业界资讯

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

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

相关文章

C++ class实现双亲表示法

#include <iostream> using namespace std; typedef char ElemType; const int MAXSIZE 100;class TreeNode {friend class Tree; private:ElemType data;int parent; };class Tree { private:TreeNode elem[MAXSIZE];int n;//树中当前的节点个数 }Tree;

单元测试:如何编写可测试的代码及其重要性

原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。限于译者的能力有限&#xff0c;个别语句翻译略显生硬&#xff0c;还请见谅。作者&#xff1a;谢尔盖科洛迪&#xff08;SERGEY KOL…

C++ class实现孩子表示法

代码如下: #include <iostream> using namespace std; typedef char ElemType; const int MAXSIZE 100;class link {friend class Node; private:int child;link *next; };class Node {friend class Tree; private:ElemType data;link *first; };class Tree { private:…

IdentityServer 部署踩坑记

IdentityServer 部署踩坑记Intro周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目&#xff0c;踩了几个坑&#xff0c;在此记录分享一下。部署架构项目是基于 IdentityServerAdmin 项目修改的&#xff0c;感谢作者的开源付出&#xff0c;有需要 IdentityServer 管…

.Net Core微服务架构技术栈的那些事

一、前言大家一直都在谈论微服务架构&#xff0c;园子里面也有很多关于微服务的文章&#xff0c;前几天也有一些园子的朋友问我微服务架构的一些技术&#xff0c;我这里就整理了微服务架构的技术栈路线图&#xff0c;这里就分享出来和大家一起探讨学习&#xff0c;同时让新手对…

C++ class实现Huffman树(完整代码)

代码如下: #include <iostream> #include <string> using namespace std; const unsigned int n 8;//字符数NUM&#xff0c;这里的字符数为8 const unsigned int m 2 * n - 1;//结点总数 const float MAX 1e8;class HTNode {friend class HuffmanTree; private…

二叉树的遍历(堆栈)

二叉树的遍历&#xff08;堆栈&#xff09; 如何理解用堆栈方式代替递归去遍历二叉树&#xff0c;关键点在于了解每个结点输出时的顺序&#xff0c;以及理解前序中序后序是如何遍历的&#xff0c;这点很重要&#xff0c;可以自己画一个树图&#xff0c;熟练写出遍历的结果 以…

ASP.NET Core分布式项目实战(第三方ClientCredential模式调用)--学习笔记

任务10&#xff1a;第三方ClientCredential模式调用创建一个控制台程序dotnet new console --name ThirdPartyDemo添加 Nuget 包&#xff1a;IdentityModel添加之后还原dotnet restoreClientusing System; using System.Net.Http; using System.Threading.Tasks; using Identit…

C++ class实现邻接矩阵存储的图(完整代码)

代码如下: #include <iostream> #include <queue> using namespace std; typedef int VertexType; typedef int EdgeType; const int MaxVertexNum 30;class MGraph { public:MGraph(){CreatGraph();};void CreatGraph();void Visit(int v);void BFS(int v);void…

二叉搜索树(创建,插入,删除):基础篇,适合新手观看。

1.1 二叉搜索树的插入 二叉搜索树的概念相信大家都很清楚&#xff0c;无非就是左小右大 创建二叉搜索树&#xff0c;其实就是多次调用二叉搜索树的插入方法&#xff0c;所以首先我们来讲讲如何插入节点到二叉搜索树里&#xff0c;假设一颗二叉搜索树如下&#xff0c;现在要插入…

.NET 的过去、现在和未来

作为一名使用了十多年.NET 开发平台的开发者来说&#xff0c;多年来笔者鲜少在各类博客媒体推广布道 .NET平台&#xff0c;但也默默地关注着 .NET 平台的发展变化&#xff0c;为每一次新技术的出现欢呼&#xff0c;为近年来 .NET 的沉默感到惋惜&#xff0c;也为开放开源的 .NE…

AVL树(平衡二叉树)讲解,入门篇,适合新手观看

1.1 概念 平衡二叉树就是为了让二叉搜索树的平均查找长度更短&#xff0c;时间复杂度更靠近logN,如果一个二叉搜索树不平衡了就会出现图1情况&#xff0c;完全变成一个数组&#xff0c;时间复杂度也变为了O(N)。 平衡因子&#xff1a;平衡因子就是针对于树中某一结点&#xff…

读源码,对开发者重要吗?

.NET 5.0 Peview 2发布4月2日&#xff0c;微软发布了.NET 5.0 Preview 2&#xff0c;带来功能和性能方面的改进。这一版本包括.NET 5.0.0 Preview 2与.NET SDK 5.0.100 Preview 2。.NET 5是.NET Framework和.NET Core的未来&#xff0c;最终将成为一个统一平台&#xff0c;.NET…

Redis和DB数据一致性解决方案

问题出现原因 并发时候无法保证读写的先后顺序&#xff0c;如果删掉了缓存还没来得及写库&#xff0c;另外一个县城就多来读取&#xff0c;发现缓存为空就去读取数据库并且写入缓存&#xff0c;这时候缓存中就是脏数据如果先写库&#xff0c;在删除缓存前&#xff0c;写库的线…

数据结构堆的时间复杂度(最大堆,最小堆)

创建堆的方式有两种&#xff0c;一种是一边插入结点&#xff0c;一边调用堆的插入方法调整堆&#xff0c;这样的时间复杂度就是 O(NlogN)&#xff0c;而第二种方式就把时间复杂度缩减到了O(N)&#xff0c;它是采用先把结点插入好了&#xff0c;然后再来调整堆&#xff0c;并不是…

中国速度之二神山建设(3):有力的技术保障,基建世界里的云原生缩影 | IDCF DevOps案例研究...

内容来源&#xff1a;DevOps案例深度研究第4期 – 火神山雷神山 DevOps实践研究战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;全程视频请移步文末&#xff09;本案例内容贡献者&#xff1a;赖泽薇、张扬、邓茜芸、韦一、刘德权、候利涛、冯利娟、常相宇、张力、韩丰…

Rx2.0后台开发分享

Rxjava2.x 微软的一个函数库&#xff0c;Rx是一个编程模型&#xff0c;模板是提供一致的编程接口&#xff0c;帮助开发者更方便的处理异步数据流&#xff0c;现在Rx已经支持几乎全部的流行编程语言。比较流行的有Rxjava&#xff0c;RxJs&#xff0c;Rx.NET&#xff0c;社区网站…

中国速度之二神山建设(4):全能运维,召之即来,来之即战 | IDCF DevOps案例研究...

内容来源&#xff1a;DevOps案例深度研究第4期 – 火神山雷神山 DevOps实践研究战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;全程视频请移步文末&#xff09;本案例内容贡献者&#xff1a;赖泽薇、张扬、邓茜芸、韦一、刘德权、候利涛、冯利娟、常相宇、张力、韩丰…

Spring Cloud部分源码分析Eureka,Ribbon,Feign,Zuul

Eureka SpringCloud Eureka使用NetFlix Eureka来实现的&#xff0c;它包括了服务端组件和客户端组件&#xff0c;并且都是用java 编写的。 Eureka服务端就是服务注册中心&#xff0c;Eureka客户端主要处理服务的注册发现&#xff0c;通过注解和参数配置的方式&#xff0c;客户…

C++ class实现邻接表存储的图(完整代码)

代码如下: #include <iostream> #include <queue>using namespace std; const int MaxVertexNum 30; typedef int InfoType; typedef int VertexType;class Node {friend class VNode;friend class ALGraph; private:int adjvertex;InfoType info;Node *next; };…