[Community News] 好多人问,必须正式介绍一下:deepin-IDE
Tofloor
poster avatar
deepin小助手
Super Moderator
OM
2023-09-05 00:21
Author

因为众所周知的原因,最近很多人都在讨论国产 IDE,咱们deepin社区有的同学就会发出疑问:

深度科技(deepin) 有自己的 IDE 吗?

image.png

正当网友们热议的时候,deepin社区论坛上很快就出现一篇帖子,内容是关于 deepin-IDE 的使用手册,此贴一出立即炸出很多正在勤奋搬砖的小伙伴:

当然,也会有人紧跟时事发出灵魂一问:

image.png

为了消除大家的疑问,本文就做一个正式回答,同时也顺带介绍一下深度自己的 IDE。

为什么要做自己的IDE?


从操作系统角度来说,要构建繁荣的生态环境,需要丰富和完善的基软件体系。开发库、封包格式、开发工具以及开发者支持,是逐步完善发展的过程。

image.png

开发库:

在开发库方面,deepin操作系统已经拥有了自己的DTK(Development ToolKit)开发套件。具备4个核心模块、220+个类、2300+函数接口;11个辅助功能模块、10+个扩展接口模块;已经能够满足日常图形应用、业务应用、系统定制应用的开发需求。目前 deepin 操作系统上自研的浏览器、音乐、邮件等 40 余款原生应用全部使用 DTK 开发。

DTK:https://github.com/linuxdeepin/dtk

封包格式:

封包格式源于Linux系统的软件包管理器,例如 apt、up2date、 yum、portage 和 pacman 等。包管理器的多样性给用户带来了更多选择,但缺点也十分显著:它们的软件包无法互通。深度操作系统为了解决“一包多用”的问题,诞生了“玲珑”软件包管理方案。彻底解决系统与应用、应用与应用之间因升级引起的兼容性问题。

Linglong:https://github.com/linuxdeepin/linglong

“玲珑“打包商店:https://store.linglong.dev/

开发工具:

在开发工具层面,成熟的 IDE 数不胜数,例如 VSCode、Visual Studio、QtCreator 等,这些成熟IDE都有一些共性,比如良好的扩展性,美观的界面和较强的易用性,最重要的是对应的生态都已经非常完善。但痛点在于,我们还没有自研的IDE工具。自研 IDE 是生态建设中非常重要的一环,也是开发者生态的集大成者。

首先,自研 IDE可以提供DTK、各种二开接口的开发支持,开发者可以基于开发库开发出对应业务功能的应用。其次,为了用上“玲珑”这样的好东西,自研 IDE 可以默认提供“玲珑”打包格式,一次打包即可覆盖全 Linux 生态环境。最后,为了便于开发者交流,增强社区活性,自研 IDE 可以集成开发者平台,使开发者汇聚在一起交流开发经验。由此看来,自研 IDE 势在必行!

按照deepin团队说干就干的风格,经过多年时间研发,deepin-IDE 就破壳了,它的最终目标就是将上述分散的内容整合到一起,形成一个高度统一、开放自由、资源丰富的生态建设利器。

deepin-IDE当前完成情况如何?


deepin-IDE 并不是突然冒出来的,在内部已经开发了多年时间,为什么一直都默默无闻呢?因为这期间都在不断完善特色功能,并攻克一些技术难题,还没有达到非常完善的地步。同时因为设计人员没有参与,所以整个界面由研发人员“原生”设计,非常时(朴)尚(素),至于好不好看呢,文末有功能界面预览图,大家看了再说。

首先带大家看看deepin-IDE的整体架构:

架构介绍

总体采用基于模块化框架开发,支持 C/C++、Java、Python等多种编程语言,每一种开发语言均是以插件的方式接入。模块化设计一方面可以缩短产品研发与制造周期,增加产品系列,提高产品质量,快速应对市场变化;另一方面,也可以减少或消除对环境的不利影响,方便重用、升级、维修和独立卸载。其整体结构设计如下图所示:

image.png

如上图所示,带颜色的模块均和特定的语言相关,对应通信中间件用的是 LSP(Language Server Protocol) 语言服务协议,可以基于该协议实现语法高亮、符号树、语法树等功能;调试相关的用的是 DAP(Debug Adapter Protocol) 调试适配协议,可以基于该协议实现被调试程序的启动、运行、断点命中、单步跳入、单步跳出等常用调试功能。通过中间协议的适配,解耦了语言业务功能与实际功能提供者的依赖,让语言扩展变得可行。

为了进一步提高扩展性,前、后端均以插件方式实现。在前端通过接入一个新的语言插件来实现新语言的扩展,该插件用于实现语言相关的、特殊的业务逻辑,不用编写全量的代码,从而减轻了语言插件的代码负担。在后端,通过插件方式可以更容易接入一个语言服务提供者。

根据上述描述,将语言相关的顶层数据流图绘制如下:

image.png

功能介绍

deepin-IDE除了包含IDE常用功能,如智能编辑器、高度可扩展的命令系统、工程管理、构建管理系统、插件系统等之外,还支持多种兼容协议、多种开发语言、代码版本管理集成、低开销的实时性能分析工具等。总体而言,IDE常见功能都在表里

功能项 介绍 deepin-IDE
智能编辑器 支持左右、上下拆分布局;支持通过快捷键切换编辑页面 支持
高度可扩展命令系统 显示已绑定命令;支持扩展命令集;快捷键绑定自定义 支持
工程管理 支持资源视图、工程视图、符号视图、工具链管理 支持
代码版本管理集成 Git、SVN 支持
插件系统 支持插件管理、加载、卸载;支持详细信息查看 支持
支持 C/C++/Python/Jav* 支持对应语言工程的加载、语法服务、调试等功能 支持
支持多种硬件平台 支持龙芯、飞腾、兆芯、海光 支持
支持协议 支持 LSP、DAP 支持
支持常用构建工具 CMake、Maven、Ninja、Gradle 支持
低开销实时工具 实现程序运行性能分析,定位性能瓶颈 支持
反向调试 该功能通过进程执行历史回放、事件分类管理、时间轴管理等手段,进一步提升应用的调试效率和开发能力 特色功能
代码迁移 辅助开发者将x86 平台的 Linux 应用迁移到龙芯、飞腾等国产处理器架构,及统信UOS等国产操作系统上 特色功能

版本管理

支持主流版本控制系统Git、SVN。

管理工具 介绍
Git 支持自动打开带Git信息的工程,支持更新、拉取、推送、查看日志等常用功能
SVN 支持手动检出仓库,更新、拉取、推送、查看日志等常用功能

协议支持

协议名 作用
LSP 语法服务协议,用以实现语法相关的功能,例如:语义补全、语法高亮、重构支持、诊断报错等
DAP 调试适配协议,用以实现调试相关的功能,例如:单步跳入、单步跳出、变量查询、堆栈查询等

语言支持

支持C++、C、java、pytho*五大类常用编辑语言,支持常用构建工具CMake、Maven、Ninja、Gradle 等。

语言 工程类型
C/C++ CMake、Ninja
Java Gradle、Maven
Python 工程目录
工程目录

除了上述常见功能,deepin-IDE还包含一些特有功能,例如反向调试、代码迁移等。

反向调试

该功能通过进程执行历史回放、事件分类管理、时间轴管理等手段,进一步提升应用的调试效率和开发能力。

代码迁移

代码迁移分析子系统是deepin-IDE的一大亮点,可以辅助开发者将x86 平台的 Linux 应用迁移到龙芯、飞腾等国产处理器架构,及统信UOS等国产操作系统上,使用该功能可以自动分析出需修改的代码内容,并给出代码迁移指导,降低迁移难度,提升迁移效率。

功能界面预览

  • 语言支持

image.png

  • 代码迁移

image.png

  • 调试模式
    image.png
  • 反向调试

image.png

  • 版本管理

image.png

谁在使用 deepin-IDE ?


deepin-IDE 已经在深度的部分应用上轻度使用,以下罗列了部分:

应用名 描述 仓库地址
deepin-draw 深度画板应用 https://github.com/linuxdeepin/deepin-draw
deepin-image-viewer 深度看图应用 https://github.com/linuxdeepin/deepin-image-viewer
deepin-album 深度相册应用 https://github.com/linuxdeepin/deepin-album

开发画板应用:

image.png

开发看图应用:

image.png

开发相册应用

image.png

deepin-IDE 将来会如何发展?


IDE 是一个非常宏大的话题,deepin-IDE 当前相比于其他成熟的IDE才刚起步,还有很多需要完善的地方:

  • 请一个设计师
  • 插件系统完善
  • 低代码编程支持
  • 支持一键软件打包:deb、玲珑打包
  • 支持软件包签名、上架应用商店
  • AI功能的接入
  • DTK等开发套件集成,文管、桌面、任务栏等插件模板接入
  • 开发者平台接入

deepin-IDE还存在一些已知问题待解决:

  • 文件描述符占用过多导致崩溃
  • 存在部分翻译缺失的问题
  • 底部交互区暂不支持多页面
  • 符号树解析精度不高

deepin-IDE 开源吗?


deepin-IDE传承了deepin “专注自研,贡献开源” 的技术基因,自研代码14万余行。当然,这一产品的快速发展,是站在了“开源”这个巨人的肩膀上,为了避免重复造轮子,采用了一些开源终端组件、功能组件,在此列出该产品汲取的开源成果,感谢开源社区!

三方库名称 应用位置 三方库协议类型
cppdap C++调试适配器协议 SDK Apache 2.0
googletest cppdap 依赖 google test BSD3
nlohmann/json cppdap 依赖 nlohmann json 库 MIT
scintilla 智能编辑器界面组件 HPND
lexilla 智能编辑器词法分析库 HPND
marl C++ 11线程/任务调度库 Apache 2.0
qtremwidget 终端组件库 GPLV2+ BSD3
GitQlient Git展示客户端 GPLV2.1+
libclang 符号树模块 Apache 2.0
llvm 编译器框架 Apache 2.0
json-rpc-cpp 通信中间件 MIT

代码公开地址,欢迎大家积极参与到 deepin-IDE 的研发:

仓库地址:

下载链接:

讲到这里,正好可以回答一下本文开头社友的问题:

deepin-IDE 和 VSCode 有关联吗?

我们的回答是:没有关联!!

deepin-IDE根植于开源社区,它依赖于scintilla等开源组件,本身也使用了GPLv3协议开源,当然也要贡献开源。和其它的基础软件一样,IDE也需要多年的打造与完善,比如 VSCode 至今也发展了八年,所以开发IDE确实不简单,不过任何事总要做才可能成,我们也欢迎开源爱好者来给我们提 issue 和 PR,帮助它继续成长!

如何参与deepin社区建设

尊重开源,拥抱开源,贡献开源!

Reply Favorite View the author
All Replies
3 / 4
To page
沈拙言
deepin
2023-09-05 20:35
#41
静夜思

deepin-IDE内部开发两年多了,你说的人家是指微软的vscode吧?applaud

鸿蒙内部开发十几年了,就是没拿出来用。一个意思

Reply View the author
deepin
2023-09-05 23:30
#42
北冥夜未央

说一下我们的需求:

1、国内访问github网站太慢了,希望fork一份到码云上;

2、早日打包成deb和rmp包吧,方便安装;

3、希望出份pdf格式的教程,虽然wiki上也可以学,但是pdf格式的更加系统些,也更方便使用。

gitee,可以快速访问。

Reply View the author
Mozart
deepin
2023-09-06 00:34
#43
月阗

体验了一下,java 开发还是半成品,只有新建,重命名都没有,运行还是存在乱码跑不起来shamed

争取早日,hello word!😂

java语言有些依赖没在仓库,所以部分功能缺失,最全的是C/C++

Reply View the author
༦九歌長
deepin
2023-09-06 01:06
#44

后续能支持go吗

Reply View the author
dgmenghuan
deepin
2023-09-06 16:16
#45

tail

Reply View the author
156******49
deepin
2023-09-06 16:58
#46

先装为敬,另外问下能不能开发一个支持shell 脚本的插件,运维需要这个呀。

Reply View the author
天天向上
deepin
2023-09-06 18:36
#47
把一切操作变成GUI

居然没有Rust。。。。。

有道理,支持rust的话就完美了

Reply View the author
kingskill
deepin
2023-09-06 23:19
#48
132******04

如果可能的化,完全支持兼容VScode的插件,省的重复开发

好主意!!kissing_heart

Reply View the author
李逍遥mx
deepin
2023-09-07 19:10
#49

我比较关心的是需不需要注册用户,需不需要开通VIP,项目代码是在本地的还是深度云服务器上的。如果在云上,云又怎么收费?不是VIP会不会限速,或者限制代码字数?被“国产”软件整怕了。

Reply View the author
李逍遥mx
deepin
2023-09-07 19:14
#50
It has been deleted!
bigben446
deepin
2023-09-07 23:22
#51
MMHMM

deepin-ide 名字有些局限性,感觉只能在deepin或者统信系统中用,后期可以改一个大气的名字,贡献给整个开源界,让别人瞧瞧我们的大气

ok

D-ide?

Reply View the author
j***[email protected]
deepin
2023-09-08 01:36
#52

缺失依赖包,安装不上😂

仓库中存在的依赖包
libcapstone3 4.0.1+really+3.0.5-2+b1
libqt5script5 5.15.7-1+dde
libqt5scripttools5 5.15.7-1+dde

仓库中缺失的依赖包
libclang1-7:amd64 1:5.0+rc1
libdwarf++0:amd64 0.2
libelf++0:amd64 0.2
libjson-c3:amd64 0.11
libjsoncpp1:amd64 1.7.4

Reply View the author
小菇凉不要跑
deepin
2023-09-08 02:05
#53

能支持Windows不呢

Reply View the author
eW0n9悟空
deepin
2023-09-08 17:59
#54

老大,期待支持一下FreePascal语言啊,我们也想做点贡献

Reply View the author
Mozart
deepin
2023-09-08 18:35
#55
j***[email protected]

缺失依赖包,安装不上😂

仓库中存在的依赖包
libcapstone3 4.0.1+really+3.0.5-2+b1
libqt5script5 5.15.7-1+dde
libqt5scripttools5 5.15.7-1+dde

仓库中缺失的依赖包
libclang1-7:amd64 1:5.0+rc1
libdwarf++0:amd64 0.2
libelf++0:amd64 0.2
libjson-c3:amd64 0.11
libjsoncpp1:amd64 1.7.4

目前安装测试的系统版本还比较少,确实会出现依赖问题,团队正在跟进处理

Reply View the author
buman
deepin
2023-09-08 19:58
#56

VSCode、Visual Studio

有啥 区别呢

Reply View the author
j***[email protected]
deepin
2023-09-09 17:20
#57
Mozart

目前安装测试的系统版本还比较少,确实会出现依赖问题,团队正在跟进处理

要是系统会自己搜索缺失的依赖包来自行安装就方便了.

Reply View the author
兆兆嘟嘟嘟
deepin
2023-09-10 18:54
#58

我已经把它投稿到星火应用商店了。

Reply View the author
199******64
deepin
2023-09-11 00:04
#59

铁子,你倒是官网提供一个exe下载安装包啊!我和idea比较一番也行

Reply View the author
pathu
deepin
2023-09-11 00:41
#60
沈拙言

总有种人家出啥你出啥的感觉,我觉得开辟新赛道才能战胜对手,一直跟在别人后面很难弯道超车。

我觉得主要是用户能用得爽就行了,普通用户也不是太会关心内置AI,异构兼容这些前沿功能,除非这些功能的引入能让用户觉得用得比以前更舒心很多。

Reply View the author
3 / 4
To page