百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

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

citgpt 2024-08-10 15:16 8 浏览 0 评论

铜灵 编译整理

量子位 出品 | 公众号 QbitAI

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

Julia这门语言,因为集合了C语言的速度、Ruby的灵活、Python的通用于一身,获得了万千程序员的喜爱。

福利来了~Julia团队又发布了新的全功能调试器,可以以多种姿势调试代码,节省你的工作量。

有了这个新调试器的加持,你可以用Julia完成此前达不到的惊奇效果,包括:

  • 直接进入函数并手动运行代码,同时检查它的状态
  • 设置断点(breakpoint)、捕捉error,检测到底是哪里出现了错误
  • 交互式地更新和替换现有代码,并且还能无需重新启动快速修复bug
  • 用Juno中的全功能IDE,在易于使用的图形界面中将这些功能捆在一起

是不是有点跃跃欲试了?



核心角色

这个全功能调试器为何如此秀,Julia官网解释说,这是因为里面有一个核心角色:

一个强大的编译器。

官方解释说,这个编译器可以运行Julia代码,同时支持各种前端控件控制具体执行。

每一个前端都是自己的包(package):Juno IDE中就结合了调试器,Rebugger提供了一种REPL文本的UI, Debugger负责提供一般的step/next/continue命令行接口。

所有这些调试功能都可以与Revise无缝集成,所以,你可以在单独的session中连续分析和修改代码。

调试器新功能×2

下面一起来看新功能具体介绍~

Juno

Juno为编译器提供了丰富的接口,支持设置断点,还可以在源代码中直接执行。调试器REPL可以在本地环境中执行任意代码,Workspace可以帮助你检查局部变量。

下面这张图就展示的是gcd调试环节:



Juno.@run宏指令负责解释你的代码,如果遇到断点,则Juno.@enter支持你从第一行重新开始。

Debugger和Rebugger

这是两个REPL接口,Debugger提供类似gdb的 “step, next, continue”接口,而Rebugger提供的是类似IDE一样的控制接口。

Debugger能提供一些其他接口没有的功能,比如对stepping的精细控制,比如执行生成函数的生成器,所以很多情况下Debugger可以成为你的首选。



神奇的包

全能新调试器不仅带来了全新的功能,还为一些已经发布的Julia包赋予了新功能。

它们可能已经不是你熟悉的包了,Julia中已经形成了新的包“生态系统”,由四组大将组成,分别是JuliaInterpreter、LoweredCodeUtils、CodeTracking、Revise和Rebugger。

JuliaInterpreter

JuliaInterpreter是整个堆栈的关键角色,包含各种评估和检查Julia代码运行情况的各种逻辑。

现在,JuliaInterpreter已经在Julia 1.0的基础上扩展了很多新功能,包括:

  • 默认递归:通过编译器运行几乎所有代码,实现断点和捕捉error更加直接。
  • 性能增强:现在通过代码运行step-wise的速度是原始速度的50倍。
  • 新获得了编译“顶级代码”的能力:现在,连定义包和创造测试套件的代码,也可以用它来编译了。
  • 支持断点:你可以把它当作编译器自身另一种形式的控制流。现在可以支持在特定源代码行或特定方法的入口处设置断点,还能自动识别错误。

LoweredCodeUtils

LoweredCodeUtils可以用于建立多种协作方法间的联系,从而起到桥梁的作用。

不过,LoweredCodeUtils是最新包中最深入最难懂的,让不少人头大。

举个例子,下面这个看似简单定义,实际上创建了五种方法,分别是一种body method,两种定位参数方法和两种关键字函数法。



CodeTracking

CodeTracking是一个简单、轻量级的查询API,可以用于从Revise中进行检索。

一般的工作场景是LoweredCodeUtils执行分析,Revise掌管随时间推移出现的各种变化,而CodeTracking负责将这些变化通知到其他组件。

三者分工明确,方便好用。

Revise和Rebugger

这个包最大的变化莫过于一眼看过去,可以发现编译的界面产生了变化。此外,Rebugger还获得了一些新的能力,比如在REPL中定义处理方法。

从长远来看,它对JuliaInterpreter和LoweredCodeUtils的深入分析可能会实现更多以前无法实现的功能。

传送门

https://julialang.org/blog/2019/03/debuggers

作者系网易新闻·网易号“各有态度”签约作者

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

?'?' ? 追踪AI技术和产品新动态

相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: