online gambling singapore online gambling singapore online slot malaysia online slot malaysia mega888 malaysia slot gacor live casino malaysia online betting malaysia mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 GitHub現在能夠提供精確的程式碼導覽功能

摘要: GitHub運用堆疊圖(Stack Graphs),創建一個適用各種程式語言、自動化且可大規模應用的程式碼導覽功能


images/20211213-4.png

▲圖片標題(來源:iThome)

GitHub宣布對所有公共和私有的Python儲存庫,啟用更加精確的程式碼導覽功能。這個新的精確程式碼導覽功能,底層應用由GitHub所建立的堆疊圖(Stack Graphs)開源框架,能以宣告式的領域特定語言(DSL),替程式語言定義名稱綁定規則。藉由使用堆疊圖,不需要儲存所有者的配置,也不須進入建置和其他CI作業,GitHub就能對儲存庫生成程式碼導覽資料。

程式碼導覽是指一系列的功能,可讓開發者深入探索程式碼中的關係和相依項目,基本的程式碼導覽功能像是跳轉到定義,以及查詢所有參照。兩者的功能都是基於程式碼中的名稱,程式語言讓開發者能夠定義函式、類別、模組、方法和變數名稱,這些物件都具有名稱,使得開發者可以在程式碼其他部分參照。

程式碼導覽的查詢參照功能,如同下圖,在這個Python模組中,檔案末端的broil,是對檔案中藍色broil函式定義的參照,而GitHub的目標,是收集關於定義和參照列表的資訊,並且確保每個參照都能對應到GitHub上託管的程式碼定義。

不過,這項工作卻充滿挑戰,官方提到,上圖的例子因為情況比較簡單,能夠直覺地看出定義和參照的關係,不過在實際情況,並不總是那麼簡單。像是可能存在多個同名定義,因為在Python中,名稱可以相互遮蔽,這代表broil參照必會是兩個定義中的後者。

不過這些規則又因程式語言不同而相異,像是在Rust中,頂級定義不允許相互遮蔽,但是局部變數卻可以,因此如果根據Rust語言規範,將上述案例從Python轉換到Rust上便是錯誤的。而這只是單個檔案的案例,在實際的情況,程式碼更可能被拆分成多個檔案、套件甚至是存在不同儲存庫中,程式語言允許開發者引用位置遙遠的定義,而且這同樣在不同的語言,有不同的行為。

另一個困難是規模,GitHub想對所有託管的儲存庫都提供程式碼導覽服務,並希望儲存庫擁有者不需要手動進行配置。在GitHub中,每分每秒都有大量的程式碼提交到平臺上,且不少提交可能只有少量檔案被修改,因此這項新功能還必須要能支援增量處理和儲存。

面對這些建立程式碼導覽功能的挑戰,GitHub運用台夫特理工大學Eelco Visser研究小組的範圍圖(Scope Graphs)框架,藉由創建堆疊圖來解決這些問題。運用堆疊圖,GitHub實現了跳轉到定義功能,當用戶點擊參照,GitHub會載入提交中每個檔案的堆疊圖,並且合併這些堆疊圖,接著從參照節點開始執行路徑搜尋,演算法會確保過程不產生無效路徑。

轉貼自: iThome

若喜歡本文,請關注我們的臉書 Please Like our Facebook Page: Big Data In Finance


留下你的回應

以訪客張貼回應

0
  • 找不到回應