wide/doc/zh_CN/dev/index.html

80 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>Wide 会话</h3>
<p>
在 UI 上存在两种 tab浏览器 tab编辑器 tab。
用户可以在一个浏览器 tab 中打开多个编辑器 tabs但输出窗口只有一个。这意味着一个浏览器 tab 只能有一个正在运行的用户代码的程序进程。
需要同时运行多个程序进程的场景可以通过打开多个浏览器 tabs 达成。
</p>
<ul>
<li>一个浏览器 tab 对应一个 Wide 会话:只要打开/刷新一个 tab就会新建一个 Wide 会话</li>
<li>Wide 会话的 id 在源码中统一命名为 <code>sid</code></li>
</ul>
<h3>WebSocket</h3>
<p>
WebSocket 用于后端推送数据给前端:
</p>
<ul>
<li>输出通道</li>
<li>通知通道</li>
<li>Shell 通道</li>
</ul>
通道和会话一对一关联,也就是说如果用户新开浏览器 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>