delphi xe10.4新功能介紹


原鏈接 此文為使用 DeepL 機翻並進行了略微的調整。

在10.4中,我們重新實現了代碼完成和其他功能,這是IDE十年來最重要的變化之一。

什么是 Code Insight

首先是一些背景。如果你對Code Insight很熟悉,請跳過前面……

Code Insight 是我們對編輯器中的一組 IDE 生產力功能的命名。在這篇博文中,這些功能是這樣的:

  • 代碼完成:下拉列表框,預測你要輸入的內容。當你在標識符后面輸入一個句號(.),或者按Ctrl+Space鍵時出現。

  • 參數完成:顯示一個方法的參數的提示,包括重載方法的多個變體。Ctrl+Shift+空格在方法的括號()內。

  • 查找聲明:右鍵單擊標識符,點擊查找聲明,會帶你到該方法、變量、類型等定義的地方。你也可以按住Control鍵,在編輯器中移動鼠標,適用的標識符會變成超鏈接,你可以點擊它來查找它們的聲明,這就是所謂的代碼瀏覽。
  • Tooltip Insight:將鼠標懸停在一個變量或類型上,就會顯示出有關它的信息。有時這包括了XMLDoc,被稱為幫助洞察(Help Insight)。(我們需要在doc中明確名稱)。 Error Insight:在你編譯之前顯示你的代碼中的錯誤。這些錯誤也被稱為 “紅色方格線”,很多人喜歡用的術語–你的代碼下面的紅色人字形線。錯誤也會在結構視圖中的 “錯誤 “節點中顯示。

這些功能在Delphi中已經有很多年了。像這樣的功能是你在IDE中編碼時的一個重要好處。尤其是代碼的完成,可以節省大量的打字時間,而錯誤的洞察力可以幫助你在花時間編譯之前,確保你的代碼正常工作。

經典代碼洞察力

隨着語言的發展和時間的流逝,這些功能已經不再像我們所希望的那樣,能發揮出應有的作用。當它被引入的時候,技術是最前沿的,但今天我們可以做一些明確的改進。

我們經常看到關於虛假錯誤的bug報告(即在編輯器或結構視圖中報告的錯誤,而源代碼實際上是完全正確的代碼)。或者是IDE在主線程中工作,所以在工作時不會響應按鍵顯示代碼完成列表。(你只能按Escape取消。)有時候,對於巨大的項目,計算代碼完成的數據可能會占用IDE中大量的內存。此外,這些功能是用多個代碼解析器來實現的:代碼完成和錯誤洞察各自對代碼的理解不同。最后,代碼洞察在調試時被禁用了,所以如果你在調試時寫代碼,就沒有生產力的幫助。

我們不希望這樣的情況繼續下去。我們對10.4的目標是:

  • 使Code Insight異步運行,即在另一個線程上或在另一個進程中運行(或兩者兼而有之),這樣,當你輸入代碼時,即使IDE在后台工作,它也能始終響應
  • 減少甚至完全消除(你可以看到這一點),從IDE中完成代碼的潛在內存使用量(你可以看到這一點)。
  • 確保Error Insight始終給出正確的結果—-也就是說,它應該准確地給出編譯器的錯誤,而正確的代碼應該不會顯示錯誤。
  • 幫助我們更接近於在IDE中擁有一個單一的Delphi源代碼解析器,以便在IDE中對Delphi代碼的含義有一個 “單一的真理之源 “或單一的理解。
  • 使Delphi的代碼工具化方法現代化,使用現代技術。
  • 同時解決一些代碼完成中的BUG
  • 至少增加一個代碼完成功能…… 等等!同時增加兩個新的代碼完成功能!這兩個新的代碼完成功能是什么?

所有這些都是在Delphi 10.4中。

興奮了嗎?我們很興奮。這是Delphi IDE十五年來最大、最好的變化之一。

(別擔心–如果你需要的話,經典的代碼洞察力仍然存在,並且有一些新的bug修復,如果你想的話,可以在10.4中打開)。

Delphi 10.4中的代碼洞察技術

在10.4中,上述代碼洞察功能是通過 “LSP服務器 “來實現的。你可能聽說過這個技術,如果沒有聽說過,LSP指的是語言服務器協議,它是一種為許多語言實現類似代碼洞察功能的標准化方式。一個IDE與 “語言服務器 “對話,它是一個小型的輔助程序,負責計算並生成IDE顯示的信息。它使用一個定義的協議來實現,這就是語言服務器協議。

換句話說,當你做一些事情,比如打開一個項目,或者在文件中鍵入一個按鍵時,IDE現在會和一個輔助程序對話,IDE可以定期向它提出問題,比如。’這個位置的完成結果是什么?”。這個輔助程序會跟蹤你的代碼,並將問題的答案,以及在代碼中遇到的任何錯誤發回。

我們的服務器應用是圍繞着編譯器構建的,將編譯器作為一種服務來提供LSP結果。這意味着IDE顯示給你的,包括 “紅色方塊狀 “錯誤,都是來自於編譯器本身的數據。

這意味着一些事情。

  • 與另一個進程的通信是異步的。在IDE中,它是在另一個線程中實現的。你可以繼續打字,甚至關閉你的文件或打開另一個項目,而IDE正在等待它所請求的數據的反饋。
  • 工作是在另一個進程中完成的。這意味着所有用於計算結果的內存使用量都不再是IDE本身。IDE有了更多的內存,幫助程序可以使用其全部的內存空間專門用於提供結果
  • 它使用一種適用於多種語言的現代標准化協議。 你在屏幕上看到的就是編譯器看到的。這意味着它應該是准確的。如果你的代碼能夠編譯,你就不會看到任何 Error Insight 錯誤;反之,如果你在代碼中或結構視圖中看到紅色的下划線,你的代碼將無法編譯。
  • 你可以在調試的同時繼續使用代碼完成功能。

這些都是非常好的東西。

但是文字已經夠多了。讓我們來看看它在實際操作中的樣子吧!

現代 Delphi Code Insight 動作

在博客中很難表現出響應性。在這些靜態的截圖中,只要想象一下,你在打字的時候,永遠看不到Windows的等待光標。

當我們在10.4版本出貨后,想象力將成為現實!

調試時的 Code Insight

第一個新功能是一個大功能,不需要多說什么。你可以在調試的同時使用Code Insight。

想一邊調試你的APP,一邊輸入代碼,並獲得代碼完成度?你可以。

是的,你所看到的是正確的–這就是在你主動調試應用程序的同時,代碼完成和錯誤洞察都在工作。

完整結果

獲取代碼完成的方式和10.3.3中一樣,只是在10.4中IDE仍然是響應式的。但我們增加了另一個新的功能,讓你可以更容易地通過代碼完成找到你想要的東西。在10.4中,代碼完成將比過去顯示更多有用的結果–但同時仍然將10.3.3.3的項目保留在結果列表的最前面。

下面是10.3.3.3的代碼完成,在VCL TButton實例后鍵入 “act”。

請注意,10.3.3.3顯示的結果很少–實際上只有一個。經典的代碼完成,只列出了以你輸入的內容開頭的項目。

下面是10.4的動作(雙關語),同樣的完成方式。

在 10.4 版本中,代碼完成后會列出所有包含你輸入的內容的項目。其他IDE也是這樣做的,例如 Visual Studio,但直到現在 Delphi 還顯示了一個比較有限的列表。這很有用,因為它允許你通過完成度搜索。

例如,假設你記得一個控件有一個something-Rect屬性,但你不記得它叫什么。在10.3.3.3中,你得去搜索。在10.4中,只要輸入’rect’,你就會看到。

你可以通過鍵盤來探索你的代碼。

擁有更多的結果可能並不總是你所追求的,你可能只期待以你輸入的東西開頭的項目。默認情況下,為了保持與你熟悉的10.3.3中的行為接近,我們會對完成列表進行排序,使所有以標識符開頭的項目都放在所有包含標識符的上方。換句話說,這個列表將給出與10.3.3.3相同的結果,但附加了額外的結果。如果你不想使用這些結果,你不需要使用這些結果;它們位於10.3.3.3會顯示給你的項目之后。

如果你想像其他IDE一樣,把所有結果一起列出,我們有一個設置:目前是注冊表鍵,但我們可能會把它作為UI顯示出來。這意味着,如果你更習慣於 VSCode 提供的東西,你也可以得到它。

在10.4中,將所有以你輸入的內容開頭的項目一起排序,放在列表的最前面。這是你在10.3.3中看到的,也是10.4中的默認情況。

在10.4中,僅按范圍排序,這樣,所有包含你輸入的內容的項目都會一起顯示。這與Visual Studio或其他IDE比較相似,默認情況下是關閉的。

在完成列表中的選取

代碼完成后會自動為你選擇列表中最好的項目(所以你只需按回車鍵或空格鍵或’.’或類似於’.’或類似於選擇該項目並繼續編碼),順序如下。

  • 與你輸入的內容完全匹配。如果沒有匹配,那么就按下面的順序來選擇。
  • 在以你輸入的內容開頭的項目中,選擇最短的標識符。如果沒有開頭的項目,那么就用最短的標識符。
  • 在包含您輸入的內容的項目中,最短的標識符。

優先選擇從頭開始而不是包含表示完成列表將自動選擇 ‘Parent’ 而不是 ‘SetParent’。選擇最短的匹配意味着它將選擇’Parent’而不是’ParentFont'(你可以在上面的截圖中看到)。一般來說,我們發現這與你最可能輸入的內容相匹配。當然,你可以滾動並按上下箭頭來選擇你想要的任何東西。

Error  Insight

請注意,在這些屏幕截圖中,你可以看到實時的錯誤洞察,它會隨着你的輸入而更新。部分鍵入的標識符’pare’是無效的代碼,它被正確地用紅色下划線標示出來(當你從完成列表中選擇一個項目時,下划線會消失)。Error Insight的結果來自於編譯器本身,它准確地反映並報告了編譯器所看到的錯誤。

你不應該在編輯器或結構窗格中看到不正確的錯誤。你在屏幕上看到的是准確的。

多進程架構

下面的內容對於功能來說並不重要,但在技術層面上可能會讓你感興趣。

我提到了LSP服務器作為一個獨立的進程運行,這有很多好處,包括專門的4GB內存地址空間用於代碼洞察。如果你看一下10.4在Windows任務管理器中運行,你會看到多個DelphiLSP進程。第一個控制多個代理,我們有一個代理專門負責提供完成和其他結果,一個代理專門負責提供錯誤洞察。

就我所知,我們是唯一一個使用多進程架構的LSP服務器。

質量

在實施的同時,我們也發現並修復了一些過去影響代碼完成的問題。

下一步

新的代碼完成方式與10.3.3及更早的代碼完成方式不同。我們努力使其盡可能的相似,包括調整諸如將開始項排序在其他項目之上,讓你在第一次使用時就能熟悉它。我們希望在幾分鍾內,你會習慣於它,以至於你永遠不想回到10.3.3.3的版本。但是,我們不想把它表現得一模一樣:你會發現其中的不同之處。

Delphi 10.4 中的新的 Code Insight 解決了很多問題,讓你在使用 IDE 時也能有更愉快和更快的響應速度。更不用說額外的結果了,這可能是非常有用的。我們計划繼續努力,按照上面寫的目標前進。雖然在 10.4 中,我們和我們的beta測試人員都發現它是IDE的一個很好的補充。

此外,我們甚至還增加了兩個新的功能:允許你通過代碼完成探索代碼,以及在調試時使用包括代碼完成和其他 Code Insight 功能在內的Code Insight功能。

我們對這個功能真的很興奮,異步、響應式IDE、現代協議、對其他語言的支持、在調試的同時完成代碼。這是偉大的東西。我們已經迫不及待地等着你拿到10.4,並親自試用。

新的基於 LSP 的 CodeInsight 非常棒,這將會徹底改變產品。

Nick Hodges,他已經使用了一個 Beta 預覽版

如果你有更新訂閱,其中一個好處是可以獲得即將發布的測試版。現在還有時間加入我們的10.4測試版計划!

這是即將發布的RAD Studio的預覽版。可能會有最后一分鍾的bug或更改。在正式發布之前,這里的內容都不是最終版本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM