找回密码
 立即注册
首页 业界区 业界 .NET程序员的多语言笔记本:Polyglot Notebook ...

.NET程序员的多语言笔记本:Polyglot Notebook

捷荀讷 6 天前
大家好,我是Edison。
之前在学习机器学习的时候,使用了Jupyter Notebook这个笔记本工具,我就在想.NET这边有没有类似的,今天就跟你介绍下Polyglot Notebook这个工具。
Notebook是什么鬼?

Notebook是一种混合格式化文本和可执行代码,创建具有可运行示例的特殊文档程序。Notebook由多个单元格组成,它们是不同的文本区域,通常有三种区域:

  • 代码单元:包含可执行的代码示例
  • 输出单元格:包含上次执行关联代码单元格的结果
  • Markdown单元格:用于编辑和显示文本内容,包含符合markdown格式的文本、图像、图表等
Jupyter是Notebook技术的经典代表,基本我们学习Python相关的内容如数据科学都会用到它,非常好用。
1.png

Polyglot Notebook

Polyglot Notebook是一个由Microsoft开发的交互式编程环境,它允许用户在同一个笔记本中混合使用多种编程语言,旨在提高开发者在处理复杂数据分析和机器学习任务时的效率和灵活性。
一句话总结:Polyglot Notebook = 交互式编程笔记本 + Markdown + Coding
目前,它支持混合使用以下编程语言:
2.png

我们目前可以在Visual Studio Code中通过安装这个扩展来进行安装它:
3.png

快速开始

(1)准备工作


  • 安装.NET SDK 以及 VS Code
  • 安装Polyglot Notebook扩展插件
注意:目前Polyglot插件要求安装.NET 9 SDK才可以运行。
(2)Hello World

创建一个hello-world.dib文件(jupyter是.ipynb文件),选择C# Script内核,开始写出第一句代码,点击下图中的1号红色区域按钮即可实现代码执行输出。
4.png

你可以通过点击上图中2号红色区域,从C# 切换到另一种 编程语言,比如切换到 JavaScript:
5.png

除了添加代码示例,我们还可以添加文本内容,例如下图中的1号和2号红色区域所示。此外,点击下图中的3号红色按钮即可实现预览。
6.png

再来一个复杂一点的代码:
  1. var displayRef =  "initial value".Display();
  2. System.Threading.Thread.Sleep(5000);
  3. displayRef.Update("different value");
复制代码
点击执行效果演示,在阻塞两秒后发生value改变:
7.gif

(3)变量共享

有时候我们在编写多语言代码时,想要从上一个A语言的上下文中传递某个变量到下一个B语言的上下文中。这时候,我们就可以使用 set 命令来实现。
例如,我们在C#语言中写了如下代码:
  1. var cars = new []{"Saab", "Volvo","BMW" };
  2. Console.WriteLine(cars[0]);
复制代码
然后,我们添加一个JavaScript的代码块,通过set命令来获取到共享的变量cars:
  1. #!set --value @csharp:cars --name carsFromCSharp
  2. console.log(carsFromCSharp)
复制代码
效果如下图所示:
8.png

 Polyglot还提供了一个变量视图,你可以通过点击下面的按钮进行查看:
9.png

 (4)用户输入

有时候我们想要让代码更加灵活,往往会依赖于用户输入的值,如输入密码,Key等信息。Polyglot提供了@input前缀来实现。例如,弹出一个框让用户输入一个url,并将用户输入存储到变量url中。
  1. #!set --name url --value @input:"Please enter a URL"
复制代码
效果如下图所示:
10.png

此外,.NET交互内核也提供了一些预置的交互式输入方法供直接使用:
  1. using PolyglotKernel = Microsoft.DotNet.Interactive.Kernel;
  2. # Number Input
  3. var input1 = await PolyglotKernel.GetInputAsync("Pick a number");
  4. input1.Display();
  5. # Password Input
  6. var input2 = await PolyglotKernel.GetPasswordAsync("Pick a password");
  7. input2.Display();
复制代码
(5)安装NuGet包

我们的C#代码会使用很多组件,就会需要安装一些NuGet包,可以通过Polyglot提供的下列命令来实现:
  1. #r "nuget:<package_name>[,<package_version>]"
复制代码
例如,我们安装SemanticKernel 1.11.1这个包:
11.png

如果不指定版本号,就是安装最新版本。
此外,如果你想添加自定义的NuGet源,则可以使用以下命令:
  1. #i "nuget:https://your-nuget-source/v3/index.json
复制代码
(6)引入外部文件

我们想要一个代码示例块中引用某个类文件定义的帮助类,实现某个功能的演示,可以使用Polyglot提供的import命令来实现。
例如,我们在某个类文件中定义了一个GetDescription的方法,我们可以这样使用:
  1. #!import Utils/EnumHelper.cs
  2. enum DayOfWeek
  3. {
  4.     [Description("Monday")]
  5.     Monday = 1,
  6.     [Description("Tuesday")]
  7.     Tuesday = 2,
  8.     [Description("Wednesday")]
  9.     Wednesday = 3,
  10.     [Description("Thursday")]
  11.     Thursday = 4,
  12.     [Description("Friday")]
  13.     Friday = 5,
  14.     [Description("Saturday")]
  15.     Saturday = 6,
  16.     [Description("Sunday")]
  17.     Sunday = 7
  18. }
  19. var desc = EnumHelper.GetDescription(DayOfWeek.Friday);
  20. desc.Display();
复制代码
(7)呈现Mermaid图

除了写代码块之外,我们还可以使用Mermaid记录代码流来呈现流程图,切换到Mermaid内核即可:
12.png

例如,我们有三个class:CheckoutService, CardService 和 ShippingService 共同完成了一个电商系统结账的功能。我们可以通过切换到Mermaid代码环境,通过下面的Mermaid代码完成一个流程图/时序图的绘制,十分方便:
  1. sequenceDiagram
  2.     CheckoutService ->> CardService: Charge(card)
  3.     CardService -->> CheckoutService: OK, payment cleared
  4.     CheckoutService -) ShippingService: Ship(cart)
  5.     ShippingService -->> CheckoutService: OK, "shipping cart content"
复制代码
绘制出来的流程图如下图所示:
13.png

推荐内容

Microsoft Learn学习社区: 《多语言笔记本 Polyglot Notebook》
VS Code官方文档:《Polyglot Notebooks in VS Code》
圣杰:《.NET+AI | Semantic Kernel入门到精通》(课程)
 
14.jpeg

作者:周旭龙
出处:https://edisonchou.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册