書接上回
上回六年前的文章VSCode + CMake編譯C/C++教程寫于多年前剛工作的第二年,當(dāng)時(shí)vscode還剛處于巨硬爸爸用超能力請(qǐng)了js大佬過來做語言支持并席卷前段開發(fā)的階段?,F(xiàn)今工作第八年,使用vscode高強(qiáng)度工作三年多,回讀這篇時(shí)還有不少東西可以聊,就羅列在這里。
程序員之劍的挑戰(zhàn)者
編輯器的圣戰(zhàn)是自從我分別使用了emacs和vim很久之后常常吃的瓜。曾經(jīng)有一幅吐槽IDE的漫畫,里面Visual Studio是航母、JetBrains IDEA是未來科技武器,其他嘲諷了一堆,no offence 手動(dòng)狗頭,諸如eclipse、codeblocks、qtcreator,最后vim是一把太刀。vim作為后起之秀來勢兇猛,以簡練的多按鍵操作與豐富的插件庫迅速傳播。然后,某一天臺(tái)灣的vim用戶站站長公開發(fā)了一篇文章然后退群,宣稱vim已經(jīng)是古董,應(yīng)該抬進(jìn)博物館,并呼吁大家都來使用vscode這個(gè)現(xiàn)代化人性化的編輯器。好家伙,這直接舉肩即位了!
拉長時(shí)間跨度
當(dāng)時(shí)正值想換工作,就順道研究了下vscode+cmake編譯c++的配置,就有了上回文章。一晃這么多年過去,回頭望去,世界潮流浩浩蕩蕩。
- vscode在borrow vim的插件體系后,通過增加了python的友好支持,迅速占領(lǐng)了前段開發(fā)和人工智能兩大程序員群體,用戶基數(shù)指數(shù)級(jí)爆炸。比如在python端的虛擬環(huán)境支持和notebook支持,對(duì)于小白用戶學(xué)習(xí)python為主的工具庫的體驗(yàn)是killer級(jí)別。
- emacs繼續(xù)保持低調(diào)奢華的位置,畢竟
evil-mode下眾生平等。挺佩服elisp這個(gè)語言,盡管語法結(jié)構(gòu)古老,但是功能的想象力方面還是沒有上限的。 - vim這邊不得不提下
Shougo的neovim項(xiàng)目,一直是黑魔法的最前線??上ё约簺]有靜下心來啃他的新體系。neovim通過lua語言(腳本語言之王)配置后,插件更加百花齊放。目前在遠(yuǎn)程端bash界面下vim還是有著獨(dú)一檔的表現(xiàn)。僅有vscode remote插件可以一戰(zhàn)。 - jetbrains全家桶一直是個(gè)桶,java搭起來的城堡。學(xué)生許可過期后用的少了,當(dāng)年使用IDEA寫rust、goland寫go做項(xiàng)目是真的舒服。畢竟六年前他家就有參數(shù)類型推導(dǎo)和出色的自動(dòng)補(bǔ)全了。缺點(diǎn)就是資源吃的多,開了low-power模式那體驗(yàn)不如別開這個(gè)IDE。
- Visual Studio值得一提,因?yàn)?019之后兼容了cmake項(xiàng)目的配置,可以直接開編了!windows平臺(tái)寫C++真可以用回VS,特別是內(nèi)網(wǎng)coding環(huán)境。
C++ coding這塊VSCode的建樹
很簡單,巨硬爸爸出官方 c/cpp 插件,用于語法分析和代碼補(bǔ)全。
調(diào)試上還是老一套的配置json,可以參考上回文章。這里感覺就是給Visual Studio留的護(hù)城河。
remote插件、wsl插件和dev container插件/docker插件,這四個(gè)可以完整地覆蓋C++地編譯過程。嵌入式的C++就是掛docker用交叉編譯工具鏈手動(dòng)編譯的。windows用戶可以使用wsl做編譯環(huán)境。dev container則是支持本地、遠(yuǎn)端、docker等不同的容器間的連接,一切對(duì)標(biāo)linux完成!除了類似打贏war3必須先打敗網(wǎng)絡(luò)爸爸之外,理論上remote可以將你的代碼和所需的目標(biāo)編譯環(huán)境“零距離”。
屠龍者VSCode
remote插件下的VSCode有了“空間投射”能力,裝備c/c++這個(gè)插件對(duì)語法補(bǔ)全一站式解決。實(shí)際使用中還有哪些灰色地帶呢?
-
大和炮 c/c++插件本質(zhì)上還是LSP server。有server就有db/cache,這個(gè)db的覆蓋率就難免有瑕疵。
- 比如docker交叉編譯,remote到docker中需要在docker中再裝一遍插件,而且并不是全部插件都支持remote。c/c++這樣的插件安裝后的cache parse和intellisense緩存,在最近一年的版本上經(jīng)常出現(xiàn)巨額的內(nèi)存占用。(最近可以通過切換nightly版本+手動(dòng)設(shè)置所有max緩存為1024緩解內(nèi)存占用)在remote端的內(nèi)存耗盡不如本地機(jī)器你可以上各種手段排查問題,bring back的成本通常比較高。
- 本地開發(fā)時(shí)對(duì)于編譯環(huán)境中才有的庫通常會(huì)提示找不到定義。如果依賴源代碼在同級(jí)目錄下,可以把以來文件夾加入當(dāng)前workspace,這樣c/c++插件會(huì)一同cache。
- c/c++只是根據(jù)用戶配置里面指定的目錄cache,而并不是理解cmake。(如果哪一個(gè)c/c++插件可以理解cmake并自動(dòng)化建立cache,記得喊我!各種定義可以跳轉(zhuǎn)直接讀源代碼,amazing)
tesseract
remote插件的本質(zhì)是一層ssh。所以你的本地環(huán)境再豐富,就是個(gè)shell。要啥功能遠(yuǎn)端請(qǐng)重新裝一遍。畢竟remote列出了遠(yuǎn)端可以安裝的插件列表,并增加了一個(gè)“遠(yuǎn)程安裝”的按鈕代碼調(diào)試
用了三年vscode寫C++,所有的調(diào)試都是printf。本質(zhì)原因還是一層ssh shell的鍋。所幸基本習(xí)慣寫logging system了,有了copilot打印再多東西就是敲一下tab。
Copilot:VSCode AI-completed
4202年,誰寫代碼還不用AI生成?(可能都不需要寫,只需要neural link+腦子想...)
Copilot作為巨硬爸爸在AI時(shí)代最亮眼的核心,諸如注入VSCode之后明顯跟emacs vim拉開了差距。以至于現(xiàn)在都有言論說“只要get things done,vim這類真落后了”。顯然這人沒分清楚GTD和使用編輯器的區(qū)別,畢竟高手的程序員之劍叫Microsoft Word。
目前Copilot只需要github賬戶即可免費(fèi)使用!
Copilot出道以后就是網(wǎng)絡(luò)條件和大模型版本的拉鋸戰(zhàn)。Copilot也出現(xiàn)了較多的競品。However,有個(gè)editor叫Cursor,是VSCode的fork/套殼。你不需要自己去買copilot的付費(fèi)會(huì)員了,來買cursor pro吧。(hhhh....) OpenAI、Claude、Copilot 還有其他可以提供補(bǔ)全的API都可以接。本來Cursor形勢一片大好,然后最近官方上了個(gè)0.43版本直接炸了。只能眼疾手快切0.42,雖然又光速更新了0.44,但到現(xiàn)在論壇上還有一堆bug report,真下頭。
且看明年
編輯器已經(jīng)遠(yuǎn)遠(yuǎn)超過了以前有經(jīng)驗(yàn)的程序員快樂地創(chuàng)作/摸魚的工具,2023年底OpenAI宣告AI元年后,很多coding的界限被打破,比如寫個(gè)網(wǎng)站、快速寫代碼、快速修bug,但有幾點(diǎn)還是AI暫時(shí)不能超越人類的。
如網(wǎng)上一位博士自嘲,“我可能比AI便宜”。畢竟open AI萬億美元的基建計(jì)劃和 pro 200刀/月的價(jià)格已經(jīng)開始篩選用戶。OpenAI COO所說的“最好的AI一定是free的”對(duì)應(yīng)的各種前提條件開始顯現(xiàn)。如此龐大的模型、服務(wù)集群和能源消耗,除了賺錢,能否在改變世界的重要議題上以free的回報(bào)發(fā)揮價(jià)值,還是一個(gè)問號(hào)。
兩步安裝。我自己用cursor,使用前記得先安裝vscode并同步你的插件列表,然后才能打開cursor導(dǎo)入配置。這一點(diǎn)很好笑,要不出個(gè)cursor插件得了,還不用處理編輯器的bug??罩袠情w般的"AI-editor"除了一個(gè)GPT接口都是別人的。(保時(shí)泰:侵權(quán)?。?/p>
Debug修復(fù)。相較于copilot,cursor對(duì)于當(dāng)前的文件還是有作為context進(jìn)行分析的。比如你修改某個(gè)變量名,通過連續(xù)tab按鈕就可以連續(xù)修改,vscode+copilot并沒有這種體驗(yàn)。這個(gè)操作其實(shí)很cheap,哪天copilot追一下競品體驗(yàn)多好。
業(yè)務(wù)到框架的設(shè)計(jì)。程序員混久了基本都是做設(shè)計(jì)的,就光開會(huì)和理解領(lǐng)導(dǎo)們的真正需求,至少在國內(nèi)對(duì)AI非常不友好。這一點(diǎn)估計(jì)明年能蹲一下,畢竟AI自己寫代碼,約等于2000年的電腦病毒。從病毒的角度來講,感覺全世界都在養(yǎng)瓶中小人。鋼煉和機(jī)械公敵的劇情還歷歷在目,鋼煉用不過時(shí)。
寫在最后
“這是一個(gè)最好的時(shí)代。這是一個(gè)最壞的時(shí)代?!?/p>
鋼煉中人們研究煉金術(shù)制造了瓶中小人,借由煉金術(shù)開啟了對(duì)世界的征服,甚至試圖吞噬kami?!跋M褪墙o予最正確的絕望”,瓶中小人沒有吞噬kami。愛德華用自己的生命樹之門戰(zhàn)勝了命運(yùn)/kami。這是動(dòng)漫,同時(shí)又特別像現(xiàn)在,以及身處其間的你和我。