diff --git a/Docs/1.0.0.开篇:概述与入门.ipynb b/Docs/1.0.0.开篇:概述与入门.ipynb new file mode 100644 index 0000000..5f1c982 --- /dev/null +++ b/Docs/1.0.0.开篇:概述与入门.ipynb @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "开篇:多语言笔记 `Polyglot Notebooks` 概要与使用 \n", + "==============================================" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 什么是 Polyglot Notebooks (多语言笔记)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 什么是 `Notebook`\n", + "Notebook(笔记)是一种混合`格式化文本`和`可执行代码`,创建`具有可运行示例`的特殊文档程序。Notebook 由多个单元格组成,它们是不同的文本区域。通常有三种:\n", + "+ 代码单元:包含可运行的代码\n", + "+ 输出单元格:包含上次执行关联代码单元格的结果\n", + "+ Markdown 单元格:用于编辑和显示格式丰富(但静态)的文本,包括超链接、图像、图表等\n", + " \n", + "Jupyter 是Notebook技术的代表,它已经从科学和学术环境的起源发展成为数据分析和数据科学行业的中流砥柱。" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 什么是 `Polyglot Notebooks`" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "简言之,就是可以混合使用多种语言的 notebook, 支持混合使用以下语言:\n", + "\n", + "![支持语言](./assets/images/SupportedLanguages.png)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 体系架构" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "大体上由三部分组成:前端UI(Jupyter、VSCode等)、交互协议(PMP、JMP)、执行器(.net interactive)和语言服务,如下图:\n", + "\n", + "![整体架构图](./assets/images/framework.svg)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 使用 Polyglot Notebooks(多语言笔记)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 方式一:`VS Code` + `Polyglot Notebooks 插件` + `.NET7`" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "步骤:\n", + "1. 下载安装 [.NET SDK 7](https://dotnet.microsoft.com/en-us/download)\n", + "2. 下载 [VS Code](https://code.visualstudio.com/)\n", + "3. 安装 VS Code [插件](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.dotnet-interactive-vscode) `Polyglot Notebooks `\n", + "4. 打开VS, 打开一个目录。\n", + "5. 新建一个笔记本文件:ctl+Shift+p create: new Jupyter Notebook 如图:\n", + " ![创建新笔记本](./assets/images/create.png)\n", + "6. 示例\n", + " ![示例](./assets/images/demo.png)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 方式二:与 `Jupyter` 结合, 直接在 `Juptye` 中使用" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将 .NET Interactive 注册为 Jupyter 的内核, 在 Jupyter Notebook、JupyterLab 和其他 Jupyter 前端中将 .NET Interactive 内核用于多语言笔记本,使Jupyter Notebook、JupyterLab等直接支持 C# F# Powershell 语言类型。 " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "步骤:\n", + "1. [.Net 7 SDK](https://dotnet.microsoft.com/en-us/download)\n", + "2. Jupyter 安装Jupyter的一个简单方法是通过 [Anaconda](https://www.anaconda.com/products/distribution)\n", + "3. 可以通过打开 Anaconda 提示符 (Windows) 或终端(macOS、Linux)并运行以下命令来验证安装,以确保 Jupyter 和 .NET 已安装并存在于路径上:\n", + " ```shell\n", + " jupyter kernelspec list\n", + " 输出类似:python3 ~\\jupyter\\kernels\\python3\n", + "\n", + " dotnet --version\n", + " 输出类似:7.0.200\n", + " ```\n", + "4. 在控制台中,安装全局工具:dotnet interactive\n", + " ```shell\n", + " dotnet tool install -g Microsoft.dotnet-interactive\n", + " ```\n", + "5. 切换回 Anaconda 提示符并通过运行以下命令安装 .NET Interactive:dotnet interactive jupyter install\n", + " ```shell\n", + " > dotnet interactive jupyter install\n", + " Installing using jupyter kernelspec module.\n", + " Installed \".NET (C#)\" kernel.\n", + " Installing using jupyter kernelspec module.\n", + " Installed \".NET (F#)\" kernel.\n", + " Installing using jupyter kernelspec module.\n", + " Installed \".NET (PowerShell)\" kernel.\n", + " ```\n", + "6. 可以通过在 Anaconda 提示符中再次运行以下命令来验证安装。现在,应会看到每种默认支持的 .NET 语言的条目:kernelspec\n", + " ```shell\n", + " > jupyter kernelspec list\n", + " .net-csharp ~\\jupyter\\kernels\\.net-csharp\n", + " .net-fsharp ~\\jupyter\\kernels\\.net-fsharp\n", + " .net-powershell ~\\jupyter\\kernels\\.net-powershell\n", + " python3 ~\\jupyter\\kernels\\python3\n", + " ```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "更新 .net interactive\n", + "+ 打开控制台并运行以下代码:\n", + " ```shell\n", + " > dotnet tool update -g Microsoft.dotnet-interactive\n", + " ```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "运行 .NET Interactive的 Jupyter\n", + "+ 启动 Jupyter:执行 Anaconda 提示符或从 Anaconda 提示符执行,或者你可以使用 Anaconda Navigator启动 jupyter 或者 labjupyter notebook\n", + "+ 在浏览器中启动 Jupyter 后,可以选择使用 C#、F# 或 PowerShell 创建笔记本,如图:![Jupyter](./assets/images/UseJupyter.png)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 方式三:`NET Repl` + `Notebooks文件`" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "使用Net Repl交互式执行或者直接执行Notebooks文件\n", + "步骤:\n", + "1. 安装 .net tool 全局工具 [dotnet-repl](https://github.com/jonsequitur/dotnet-repl) 如图:![install](./assets/images/install.dotnet-repl.png)\n", + "2. 启动dotnet repl, 如图: ![使用REPL](./assets/images/UseReplClient.png)\n", + "3. 执行一个现有的笔记本文件,如图:![使用REPL](./assets/images/ReplRunFile.png)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".NET (C#)", + "language": "C#", + "name": ".net-csharp" + }, + "language_info": { + "name": "polyglot-notebook" + }, + "polyglot_notebook": { + "kernelInfo": { + "defaultKernelName": "csharp", + "items": [ + { + "aliases": [], + "name": ".NET" + }, + { + "aliases": [ + "C#", + "c#" + ], + "languageName": "C#", + "name": "csharp" + }, + { + "aliases": [ + "js" + ], + "languageName": "JavaScript", + "name": "javascript" + }, + { + "aliases": [], + "languageName": "KQL", + "name": "kql" + }, + { + "aliases": [ + "frontend" + ], + "name": "vscode" + }, + { + "aliases": [], + "name": "webview" + } + ] + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Docs/assets/images/Framework.png b/Docs/assets/images/Framework.png new file mode 100644 index 0000000..52f2680 Binary files /dev/null and b/Docs/assets/images/Framework.png differ diff --git a/Docs/assets/images/ReplRunFile.png b/Docs/assets/images/ReplRunFile.png new file mode 100644 index 0000000..8108975 Binary files /dev/null and b/Docs/assets/images/ReplRunFile.png differ diff --git a/Docs/assets/images/SupportedLanguages.png b/Docs/assets/images/SupportedLanguages.png new file mode 100644 index 0000000..17a5b8b Binary files /dev/null and b/Docs/assets/images/SupportedLanguages.png differ diff --git a/Docs/assets/images/UseJupyter.png b/Docs/assets/images/UseJupyter.png new file mode 100644 index 0000000..93b13c6 Binary files /dev/null and b/Docs/assets/images/UseJupyter.png differ diff --git a/Docs/assets/images/UseReplClient.png b/Docs/assets/images/UseReplClient.png new file mode 100644 index 0000000..d65c3c7 Binary files /dev/null and b/Docs/assets/images/UseReplClient.png differ diff --git a/Docs/assets/images/create.png b/Docs/assets/images/create.png new file mode 100644 index 0000000..33d4645 Binary files /dev/null and b/Docs/assets/images/create.png differ diff --git a/Docs/assets/images/demo.png b/Docs/assets/images/demo.png new file mode 100644 index 0000000..0419383 Binary files /dev/null and b/Docs/assets/images/demo.png differ diff --git a/Docs/assets/images/framework.svg b/Docs/assets/images/framework.svg new file mode 100644 index 0000000..0a31b03 --- /dev/null +++ b/Docs/assets/images/framework.svg @@ -0,0 +1,4 @@ + + + +
用户端界面
用户端界面
消息协议
消息协议
交互式内核:执行代码、语言服务
交互式内核:执行代码、语言服务
VS Code
.net Interactive
VS Code...
CodeSpaces
CodeSpaces
Azure Data Studio
Azure Data Studio
Try.NET
Try.NET
Jupyter
Jupyter
Azure Notebooks
Azure Notebooks
VS Code
基于 Jupyter
VS Code...
nteract
nteract
dotnet-repl
dotnet-repl
PMP
基于Json的消息协议
PMP...
JMP
Jupyter 消息协议
JMP...
  C#
  C#
  F#
  F#
  Power
  Shell
Power...
dotnet-interactive
dotnet-interactive
连接到运行时
连接到运行时
Roslyn
Roslyn
FSI
FSI
PWSH
SHELL

PWSH...
Mermaid
Mermaid
BYO
language
BYO...
Standed
I/O
Standed...
PMP
PMP
JMP
JMP
Kusto
Kusto
SQL
SQL
代理内核
代理内核
SQL Tools
Service
SQL Tools...
  R
  R
IRKernel
IRKernel
  Julia
  Julia
julia
julia
Python
Python
IPyKernel
IPyKernel
 HTML
 HTML
浏览器
浏览器
Java
 Script
Java...
浏览器
浏览器
其它内核
其它内核
dotnet interactive
(远程)
dotnet interactive...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/Docs/assets/images/install.dotnet-repl.png b/Docs/assets/images/install.dotnet-repl.png new file mode 100644 index 0000000..ec02e3c Binary files /dev/null and b/Docs/assets/images/install.dotnet-repl.png differ diff --git a/Docs/assets/images/kernels.png b/Docs/assets/images/kernels.png new file mode 100644 index 0000000..d59a1d5 Binary files /dev/null and b/Docs/assets/images/kernels.png differ diff --git a/Docs/assets/images/架构图.drawio b/Docs/assets/images/架构图.drawio new file mode 100644 index 0000000..159f6d0 --- /dev/null +++ b/Docs/assets/images/架构图.drawio @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Docs/多语言笔记.1.1.入门说明.ipynb b/Docs/多语言笔记.1.1.入门说明.ipynb index 39cef9c..e6d3fb3 100644 --- a/Docs/多语言笔记.1.1.入门说明.ipynb +++ b/Docs/多语言笔记.1.1.入门说明.ipynb @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -86,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -95,16 +95,7 @@ "kernelName": "csharp" } }, - "outputs": [ - { - "ename": "Error", - "evalue": "(2,13): error CS0246: 未能找到类型或命名空间名“Person”(是否缺少 using 指令或程序集引用?)", - "output_type": "error", - "traceback": [ - "(2,13): error CS0246: 未能找到类型或命名空间名“Person”(是否缺少 using 指令或程序集引用?)" - ] - } - ], + "outputs": [], "source": [ "//单纯引用.cs文件,不能直接使用,解决方法待查找\n", "var p = new Person()\n", @@ -123,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -132,48 +123,7 @@ "kernelName": "csharp" } }, - "outputs": [ - { - "data": { - "text/html": [ - "
{ Name = xx, Agx = 33 }
Namexx
Agx
33
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "var x = new {Name=\"xx\",Agx=33};\n", "display(x);" @@ -190,7 +140,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -199,48 +149,7 @@ "kernelName": "csharp" } }, - "outputs": [ - { - "data": { - "text/html": [ - "
NotebookStudy.ConsoleApp.Person
Id
2
Name本山
Address
<null>
Age
55
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "//如果找不到文件,需要先生成 NotebookStudy.ConsoleApp 项目\n", "\n", @@ -268,7 +177,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -277,26 +186,7 @@ "kernelName": "csharp" } }, - "outputs": [ - { - "data": { - "text/html": [ - "
Installed Packages
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "{\"Id\":2,\"Name\":\"newtonsoft类库\",\"Age\":6}" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "//安装库的最新版本\n", "#r \"nuget:newtonsoft.json\"\n", @@ -309,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -318,26 +208,7 @@ "kernelName": "csharp" } }, - "outputs": [ - { - "data": { - "text/html": [ - "
Installed Packages
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "{\"Id\":2,\"Name\":\"System.Text.Json\\u7C7B\\u5E93\",\"Age\":6}" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "//安装库的指定版本\n", "#r \"nuget:System.Text.Json,4.7.2\"\n", @@ -350,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -359,17 +230,7 @@ "kernelName": "csharp" } }, - "outputs": [ - { - "data": { - "text/html": [ - "
Installed Packages
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "//安装最新的预览版库\n", "#r \"nuget:xunit,*-*\"\n", @@ -401,8 +262,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "+ 默认 Nuget 包源\n", - " > 默认包源可能是:https://api.nuget.org/v3/index.json 使用默认包源的话,可以不添加包源引用。当然也可以添加。" + "+ 在线包源\n", + " > 默认包源:https://api.nuget.org/v3/index.json 使用默认包源的话,可以不添加包源引用。当然也可以添加。" ] }, { @@ -418,7 +279,8 @@ }, "outputs": [], "source": [ - "#r \"nuget:AutoFixture.Xunit2\"" + "//添加包源:可以添加多个\n", + "#i \"nuget:https://api.nuget.org/v3/index.json\"" ] }, { @@ -434,8 +296,7 @@ }, "outputs": [], "source": [ - "//也可以指定默认包源\n", - "#i \"nuget:https://api.nuget.org/v3/index.json\"\n", + "//使用包源\n", "\n", "#r \"nuget:AutoFixture.Xunit2\"" ] diff --git a/Docs/多语言笔记.1.3.多语言.ipynb b/Docs/多语言笔记.1.3.多语言.ipynb index 2656e28..928c6d6 100644 --- a/Docs/多语言笔记.1.3.多语言.ipynb +++ b/Docs/多语言笔记.1.3.多语言.ipynb @@ -13,7 +13,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 使用C#" + "## C# 例子" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "var student = new {Id=1, Name=\"张三\",Age=18};\n", + "student.Display();" ] }, { @@ -21,7 +41,26 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 使用 F#" + "## F# 例子" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "dotnet_interactive": { + "language": "fsharp" + }, + "polyglot_notebook": { + "kernelName": "fsharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "printfn \"Hello World from F#\"" ] }, { @@ -29,7 +68,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 使用Powershell" + "## Powershell 例子" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "dotnet_interactive": { + "language": "pwsh" + }, + "polyglot_notebook": { + "kernelName": "pwsh" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "#! powershell\n", + "Write-Host \"hellow powershell\"" ] }, {