.NET程序員的多語言筆記本:Polyglot Notebook
大(da)家好,我是Edison。
之前(qian)在學習(xi)機器學習(xi)的時(shi)候,使用了Jupyter Notebook這個筆(bi)記本工具(ju),我就在想.NET這邊有(you)沒有(you)類似(si)的,今天就跟你介紹下Polyglot Notebook這個工具(ju)。
Notebook是什么鬼?
Notebook是一種混合格式化文本和可執行代碼,創建具有可運行示例的特殊文檔程序。Notebook由多個單元格組成,它們是不同的文本區域,通常有三種區域:- 代碼單元:包含可執行的代碼示例
- 輸出單元格:包含上次執行關聯代碼單元格的結果
- Markdown單元格:用于編輯和顯示文本內容,包含符合markdown格式的文本、圖像、圖表等
Jupyter是Notebook技術的經典代表,基本(ben)我們學(xue)習Python相(xiang)關的內容(rong)如數據科學(xue)都會用到(dao)它,非常好用。

Polyglot Notebook
Polyglot Notebook是一個由(you)Microsoft開發的(de)(de)交互式編程環(huan)境,它允(yun)許用戶在(zai)同一個筆(bi)記本中混合使用多種編程語言,旨在(zai)提(ti)高(gao)開發者在(zai)處(chu)理復雜(za)數據分析和機器學習任(ren)務時(shi)的(de)(de)效率和靈活性。
一句話總結:Polyglot Notebook = 交互式編程筆記本 + Markdown + Coding
目前(qian),它支持混(hun)合使用(yong)以下編程語言:

我們目(mu)前(qian)可以在Visual Studio Code中通過安(an)(an)裝這個擴展來進行安(an)(an)裝它(ta):

快速開始
(1)準備工(gong)作
- 安裝.NET SDK 以及 VS Code
- 安裝Polyglot Notebook擴展插件
注意:目前Polyglot插件要求安裝.NET 9 SDK才可以運行。
(2)Hello World
創建一個hello-world.dib文(wen)件(jupyter是.ipynb文(wen)件),選擇C# Script內(nei)核,開始寫出(chu)第一句(ju)代碼,點(dian)擊下圖中的1號紅色(se)區域按鈕即可實(shi)現代碼執行(xing)輸出(chu)。

你(ni)可(ke)以通(tong)過點擊(ji)上圖(tu)中2號(hao)紅色區域,從C# 切換到(dao)另一種 編程(cheng)語言,比如切換到(dao) JavaScript:

除(chu)了添(tian)加代碼示例(li),我們還可(ke)以添(tian)加文本內容(rong),例(li)如下(xia)(xia)圖(tu)(tu)中(zhong)的(de)1號和(he)2號紅色區域所示。此外,點(dian)擊下(xia)(xia)圖(tu)(tu)中(zhong)的(de)3號紅色按鈕即可(ke)實現預(yu)覽。

再來一(yi)個(ge)復雜一(yi)點的代碼:
var displayRef = "initial value".Display(); System.Threading.Thread.Sleep(5000); displayRef.Update("different value");
點(dian)擊執行(xing)效果演示,在阻(zu)塞兩秒(miao)后發(fa)生(sheng)value改變:

(3)變(bian)量共(gong)享
有時候我們(men)(men)在編寫多語(yu)(yu)言(yan)代碼(ma)時,想要從上一個(ge)A語(yu)(yu)言(yan)的上下文中傳遞某個(ge)變量到(dao)下一個(ge)B語(yu)(yu)言(yan)的上下文中。這時候,我們(men)(men)就可以使用 set 命令來實現。
例如,我們在C#語言中寫了如下代碼:
var cars = new []{"Saab", "Volvo","BMW" }; Console.WriteLine(cars[0]);
然后,我們(men)添加一(yi)個JavaScript的(de)代(dai)碼(ma)塊(kuai),通過set命令來獲取到共(gong)享的(de)變量cars:
#!set --value @csharp:cars --name carsFromCSharp console.log(carsFromCSharp)
效果如下(xia)圖(tu)所示(shi):

Polyglot還提供了一個(ge)變(bian)量視圖,你可以通過點擊下面的按鈕進行查看:

(4)用戶輸入(ru)
有(you)時候我們想(xiang)要讓代(dai)碼更加(jia)靈活,往(wang)往(wang)會依賴于(yu)用戶輸(shu)(shu)入(ru)的值(zhi),如輸(shu)(shu)入(ru)密碼,Key等信息。Polyglot提供了@input前綴來實現。例(li)如,彈出一個(ge)框(kuang)讓用戶輸(shu)(shu)入(ru)一個(ge)url,并將用戶輸(shu)(shu)入(ru)存儲到變量(liang)url中。
#!set --name url --value @input:"Please enter a URL"
效果如下圖所示:

此外,.NET交互內(nei)核也提供(gong)了一些預置(zhi)的交互式輸(shu)入(ru)方法供(gong)直接使用:
using PolyglotKernel = Microsoft.DotNet.Interactive.Kernel; # Number Input var input1 = await PolyglotKernel.GetInputAsync("Pick a number"); input1.Display(); # Password Input var input2 = await PolyglotKernel.GetPasswordAsync("Pick a password"); input2.Display();
(5)安裝NuGet包
我們的C#代碼會使用很多組件,就會需要安裝一些NuGet包,可以(yi)通過Polyglot提供的(de)下列命令來實現(xian):
#r "nuget:<package_name>[,<package_version>]"
例如(ru),我們安(an)裝SemanticKernel 1.11.1這個包(bao):

如果不指定版本號,就是安裝最新版本。
此外,如果(guo)你想添加(jia)自定義(yi)的NuGet源,則(ze)可以使用以下命(ming)令:
#i "nuget://your-nuget-source/v3/index.json
(6)引入外部文件
我們想要一個(ge)代(dai)碼(ma)示例塊中(zhong)引用某個(ge)類文件定義的(de)(de)幫助類,實(shi)現某個(ge)功能(neng)的(de)(de)演示,可以使用Polyglot提供的(de)(de)import命令來實(shi)現。
例如,我們在某個類文件中(zhong)定(ding)義了一個GetDescription的方法,我們可以這樣使用(yong):
#!import Utils/EnumHelper.cs enum DayOfWeek { [Description("Monday")] Monday = 1, [Description("Tuesday")] Tuesday = 2, [Description("Wednesday")] Wednesday = 3, [Description("Thursday")] Thursday = 4, [Description("Friday")] Friday = 5, [Description("Saturday")] Saturday = 6, [Description("Sunday")] Sunday = 7 } var desc = EnumHelper.GetDescription(DayOfWeek.Friday); desc.Display();
(7)呈現Mermaid圖(tu)
除了寫代碼塊(kuai)之(zhi)外,我們還可(ke)(ke)以使用(yong)Mermaid記錄代碼流(liu)來呈現(xian)流(liu)程圖,切換(huan)到Mermaid內(nei)核即(ji)可(ke)(ke):

例(li)如,我們有三個class:CheckoutService, CardService 和 ShippingService 共同完成了(le)一個電商系統結(jie)賬的功能。我們可以(yi)通過切換(huan)到Mermaid代(dai)(dai)碼環境,通過下面的Mermaid代(dai)(dai)碼完成一個流程圖/時(shi)序圖的繪制,十分方便:
sequenceDiagram CheckoutService ->> CardService: Charge(card) CardService -->> CheckoutService: OK, payment cleared CheckoutService -) ShippingService: Ship(cart) ShippingService -->> CheckoutService: OK, "shipping cart content"
繪制(zhi)出來的流程圖如下(xia)圖所示:

推薦內容
Microsoft Learn學習社區: 《》
VS Code官(guan)方文檔:《》
圣杰:《》(課程(cheng))

作者:
出處:
本(ben)文版權歸作(zuo)者和(he)博客(ke)園共有,歡迎轉載,但未(wei)經作(zuo)者同意(yi)必須保留此段聲明,且在文章頁面明顯位置給出(chu)原(yuan)文鏈接。

之前在學習機器學習的時候,使用了Jupyter Notebook這個筆記本工具,感覺十分好用。于是我就在想.NET這邊有沒有類似的,今天就跟你介紹下Polyglot Notebook這個多語言筆記本工具。Polyglot Notebook是一個由Microsoft開發的交互式編程環境,它允許用戶在同一個筆記本中混合使用多種編程語言,旨在提高開發者在處理復雜數據分析和機器學習任務時的效率和靈活性。