This commit is contained in:
		
							parent
							
								
									bb1f1357f7
								
							
						
					
					
						commit
						557ae06b0e
					
				|  | @ -1,77 +0,0 @@ | |||
| <!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> | ||||
		Loading…
	
		Reference in New Issue