Jupyter填补IDE空白
快速查看执行结果和迭代的能力是Jupyter成功的主要原因之一。Jupyter用户喜欢在note book上做实验,并把note book作为一种互动交流工具。但是,对于更经典的软件开发任务,例如重构大型代码库,它们通常会切换到通用的IDE。
binder上尝试调试器
![c31538dc03845e3d8262cfd3a84b68cf.png](https://img-blog.csdnimg.cn/img_convert/c31538dc03845e3d8262cfd3a84b68cf.png)
![344cb015460abab1e986b8c36942893d.png](https://img-blog.csdnimg.cn/img_convert/344cb015460abab1e986b8c36942893d.png)
Jupyter调试协议
Jupyter内核(执行用户代码的基础结构的一部分)与内核中的其余部分通过指定的进程间通信协议进行通信。 存在几种沟通渠道,例如:- Shell通道,这是一个请求/回复通道,例如执行请求
- IOPub通道是从内核到客户端的单向通信通道,例如用于转发标准输出流(stdout和stderr)的内容。
- debug_ [request / reply]请求由调试器执行的特定操作,例如添加断点或单步执行到代码中,然后发送到控制通道。
- 调试内核用于将调试事件发送到前端的debug_event单向消息。调试事件通过IOPub通道发送。
扩展的调试适配器协议(DAP)
Jupyter设计的关键原则是对编程语言的不可知论性。Jupyter调试协议必须适应其他内核实现,这一点很重要。 流行的调试标准是Microsoft的“调试适配器协议”(DAP) ,它是Visual Studio Code调试器的基础,基于JSON的协议,并且已经存在多种语言的后端。 但是,对于Jupyter而言,这还不够:- 为了支持页面重新加载或客户端在以后的连接,Jupyter内核必须存储调试器的状态(断点,调试器当前是否停止)。前端可以通过debug_request消息来请求该状态。
- 为了支持不基于源文件的笔记本单元和Jupyter控制台的调试,还需要消息将代码提交到调试器,并可以在其中添加断点。
第一个支持调试的Jupyter内核
Xeus-python,第一个支持调试的Jupyter内核。
Xeus是Jupyter内核协议的C ++实现。它本身不是内核,而是有助于内核创作的库。当为具有C或C ++ API(例如Python,Lua或SQL)的语言开发内核时,Xeus很有用。内核作者需要执行繁琐的任务来实现Jupyter消息传递协议,以专注于核心解释器任务:执行代码,检查等。
基于CERN的cling C ++解释器,已经使用xeus开发了几种内核,包括流行的针对C ++编程语言的xeus-cling内核。xeus-python内核是基于xeus的ipykernel的替代Python内核。xeus-python内核的第一个版本已于今年早些时候在此博客上宣布:
https://blog.jupyter.org/a-new-python-kernel-for-jupyter-fcdf211e30a8
Xeus-python是调试协议第一个实现的合适选择,因为
它具有可插入的并发模型,该模型允许在其他线程中运行Control通道的处理。
它具有较轻的代码库,使其成为方便的迭代沙箱。在ipykernel中实施协议的第一版将需要在早期阶段进行更重要的重构和共识。
xeus-python的短期路线图包括
在xeus-python中添加了对IPython魔术的支持,这是ipykernel缺少的主要功能。
改进xeus-python的PyPI wheels。
深入调试器前端架构
JupyterLab的调试器扩展提供了用户通常对IDE的期望:
带有变量浏览器的边栏,断点列表,源预览以及浏览调用堆栈的可能性
直接在代码旁边(即在代码单元和代码控制台中)设置断点的能力
视觉标记,指示当前执行已停止的位置
使用Jupyter笔记本时,执行状态保存在内核中。但是可以执行一个单元,然后将其从note book中删除。当用户想要插入已删除的代码时该怎么办?
该扩展支持该特定用例,并能够检索以前执行的单元格的只读视图。
控制台和文件也支持调试。
可以在notebook级别上启用调试,这使用户可以调试notebook并同时在另一个notebook上工作。
可以使用树查看器和表查看器检查变量:
JupyterLab的调试器扩展旨在与支持调试的任何内核一起使用。
通过依赖于调试适配器协议,调试器扩展可以抽象出特定于语言的功能,并为用户提供一致的调试界面。下图显示了调试会话期间,调试消息如何在用户,JupyterLab扩展和内核之间流动。
未来展望
计划在2020年对调试器的体验进行重大改进:
在变量资源管理器中支持丰富的mime类型呈现。
在UI中支持条件断点。
调试器用户体验的总体改进。
从JupyterLabVoilà预览扩展启用Voilà仪表板的调试。
潮水自会来去,但心志得坚若磐石。即便成不了那根定海神针,也至少不是那随意被拍上岸的野鬼游魂。
![944593795025641dd28ce33772927313.png](https://img-blog.csdnimg.cn/img_convert/944593795025641dd28ce33772927313.png)
最新人工智能、深度学习、计算机视觉干货奉上!