wide/doc/zh_CN/dev/index.html

78 lines
2.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 开发指南</title>
</head>
<body>
<h1>开发指南</h1>
<p>
该文档介绍了 Wide 的核心设计原理与实现。
</p>
<p>
如果您要看 Wide 的源码或者要进行修改、二次开发等,请先仔细阅读该文档。
</p>
<h2>关键设计</h2>
<h3>工作空间</h3>
<p>
Wide 是一个多用户的集成开发环境,每个用户的工作空间是完全隔离的:
<ul>
<li>文件路径</li>
<li>环境变量</li>
<li>运行进程</li>
</ul>
<p>
例如在执行“构建 & 运行”时Wide 会设置命令 go build 执行的环境变量 $GOPATH 为用户的工作空间,这样编译过程就是在该用户的工作空间中进行,保证其隔离性。
</p>
<h3>Tabs</h3>
<p>
用户可以打开多个编辑器 tabs但输出窗口只有一个。同时运行多个程序的场景可以通过打开多个浏览器 tabs 达成。
</p>
<p>
使用编辑器 tabs (而不使用浏览器 tabs主要是考虑到和文件树的同步显示这是非常实用的功能。
在大多数情况下,一个浏览器 tab 使用 Wide 应该就可以完成开发者的大多数需求,这样的用户体验也更接近桌面 IDE。
</p>
<h3>WebSocket</h3>
<p>
WebSocket 用于后端推送数据给前端:
</p>
<ul>
<li>输出通道</li>
<li>通知通道</li>
<li>Shell 通道</li>
</ul>
通道和用户会话一对一关联,也就是说如果用户新开浏览器 tab则老的 tab 的通道就会失效。目前为了简化才这样实现,后续需要改进为每个浏览器 tab 都开不同的通道。
<h3>事件与通知</h3>
<p>
每个用户会话都有一个对应的事件队列,当接收到事件时取出该事件并转为通知,再通过通知窗口通道推送给前端。
还存在一个全局事件队列,入队的事件将分发到每个用户的事件队列中,以便进行通知广播。
</p>
<p>
通知中的消息需要国际化处理。在语言配置文件中以 notification_ 为前缀事件代码event code为后缀的项即通知消息。
</p>
<h3>代码辅助</h3>
<ul>
<li>自动完成,通过 gocode 工具实现</li>
<li>跳转到声明,通过 ide_stub 工具实现</li>
<li>查找使用,通过 ide_stub 工具实现</li>
</ul>
代码辅助功能必须满足工作空间隔离。
<h2>编码规范</h2>
</body>
</html>