資料科學家愛用的程式語言Julia,釋出了全新功能完整的偵錯器(Debugger),可以讓開發者輕鬆地偵錯和內省(Introspect)程式碼,可以深入函式手動走訪程式碼,並檢查狀態,也能在不需要重新啟動的狀況下,以互動的方式更新和替換現有程式碼,或是設置中斷點和陷阱錯誤,幫助開發者捕捉故障發生的問題。

官方提到,偵錯器本身就是一組各種功能集合的工具,而其核心功能則是由直譯器支援,該直譯器不只能夠執行Julia程式碼,也能以各種前端控制直譯器的執行。每個前端都有其可用的套件,Juno將偵錯器整合進IDE中,Rebugger則提供REPL文字使用者介面,而偵錯器提供傳統的命令介面。這些偵錯功能都與套件Revise無縫整合,開發者可以在同一個對話(Session)中,連續分析和修改程式碼。

Juno為直譯器提供了豐富的使用者介面,讓開發者可以設定中斷點,並直接在原始程式碼中逐步執行。偵錯器REPL能夠在本地上下文執行任意程式碼,開發者可以在Workspace中檢查區域變數,使用巨集Juno.@run開始直譯開發者的程式碼,或是Juno.@enter可以從第一行開始逐步進行。

當開發者使用Atom之外的編輯器,或是透過控制臺介面在遠端對話中工作,可以使用REPL進行偵錯,REPL有兩種介面,其一是偵錯器提供類似gdb的逐步、下一步和繼續介面,另一種Rebugger則是提供IDE形式的控制臺介面。偵錯器具有一些其他介面都沒有的功能,像是調控逐步執行的精細度,以及執行生成函式的生成子等。

而Julia這些新的偵錯功能都來自新版的JuliaInterpreter,官方提到,JuliaInterpreter是整個堆疊的關鍵,其包含評估和檢查Julia程式碼的邏輯,也能用於逐步進行程式碼評估以及中斷點的實作。JuliaInterpreter是從ASTInterpreter2套件改進而來,順應Julia 1.0的需要,加入了許多改變,在效能上也獲得了大幅度的改進,約是原本的50倍速度。

JuliaInterpreter改進新增對中斷點的支援,官方提到,嚴格說來雖然不是直譯器功能,但卻是建構偵錯器必要的功能,並且也可以被視作直譯器控制流的一種形式,這些中斷點可以用中斷點函式和巨集設置,或在Juno、Rebugger與偵錯器中操作,或是甚至在程式碼中以巨集設置。

官方提到,雖然直譯器的速度加快了,但是比起編譯的程式碼執行速度,仍然差距了幾個量級,他們會在幾個月內縮小這個差距,但是終究直譯程式碼仍然比編譯過的程式碼慢。


Advertisement

更多 iThome相關內容