当前位置: 首页 > 科技观察

Julia发布全功能调试器:4大新功能问世

时间:2023-03-15 01:03:54 科技观察

Julia发布全功能调试器:发布4个新功能Julia是一门赢得了成千上万程序员青睐的语言,因为它结合了C语言的速度、Ruby的灵活性和Python的通用性。福利来了~Julia团队发布了一款全新的全功能调试器,可以多种姿势调试代码,节省你的工作量。在这个新调试器的加持下,你可以使用Julia实现以前无法实现的惊人效果,包括:直接进入函数并手动运行代码,同时检查其状态设置断点(breakpoints),捕获错误,并检测是否它以交互方式更新和替换现有代码,无需重启即可快速修复错误。借助Juno中的全功能IDE,将所有这些功能捆绑在一个易于使用的图形界面中是不是有点诱人?这个全功能调试器的核心作用之所以这么好,Julia官网解释说是因为它有一个核心作用在里面:强大的编译器。官方解释说这个编译器可以运行Julia代码,同时支持各种前端控件来控制具体的执行。每个前端都是自己的包:JunoIDE结合调试器,Debugger提供REPL文本UI,Debugger负责提供通用的step/next/continue命令行界面。所有这些调试功能都与Revise无缝集成,因此您可以在单个会话中连续分析和修改代码。调试器新特性×2来看看新特性的具体介绍吧~JunoJuno为编译器提供了丰富的接口,支持设置断点,也可以直接在源码中执行。调试器REPL可以在本地环境中执行任意代码,工作区可以帮助您检查本地变量。下图是gcd调试环节:Juno.@run宏指令负责解释你的代码。如果遇到断点,Juno.@enter支持你从***行重启。Debugger和Rebugger是两个REPL接口。Debugger提供了类似于gdb的“step、next、continue”界面,而Rebugger则提供了类似于IDE的控制界面。Debugger可以提供一些其他接口没有的功能,比如对步进的细粒度控制,比如执行生成函数的generator,所以Debugger在很多情况下可以成为你最好的选择。令人惊叹的一体式新调试器不仅带来了全新的功能,还为一些已发布的Julia包带来了新功能。它们可能不是您熟悉的包。Julia中形成了一个新的包“生态系统”,由四组将军组成,分别是JuliaInterpreter、LoweredCodeUtils、CodeTracking、Revise和Rebugger。JuliaInterpreterJuliaInterpreter是整个堆栈中的关键角色,包含评估和检查Julia代码运行的各种逻辑。现在,JuliaInterpreter在Julia1.0的基础上扩展了许多新的功能,包括:默认递归:通过编译器运行几乎所有的代码,更直接的实现断点和捕获错误。性能增强:现在逐步运行代码的速度比原来快50倍。新获得编译“***代码”的能力:现在连定义包和创建测试套件的代码都可以用它编译。支持断点:您可以将其视为编译器本身的另一种控制流形式。现在支持在特定源代码行或特定方法的入口上设置断点,并自动识别错误。LoweredCodeUtilsLoweredCodeUtils可以用来在多个协作方法之间建立联系,从而起到桥梁的作用。然而LoweredCodeUtils是***包中最深入也最难理解的,让很多人应接不暇。比如下面这个看似简单的定义,实际上创建了五个方法,分别是一个body方法,两个定位参数方法和两个关键字函数方法。CodeTrackingCodeTracking是一个简单、轻量级的查询API,可用于从Revise中检索。一般的工作场景是LoweredCodeUtils进行分析,Revise负责随时间变化的各种变化,CodeTracking负责将这些变化通知其他组件。三者分工明确,方便易用。Revise和Rebugger包最大的变化就是一眼就能发现编译后的界面变了。此外,Rebugger还获得了一些新的能力,例如在REPL中定义处理方法。从长远来看,它对JuliaInterpreter和LoweredCodeUtils的深入分析可能会启用更多以前无法实现的功能。