Polyglot - das Notebook, das (fast) alle Sprachen spricht!

post-thumb

Das Konzept eines Notebooks vereint die interaktive Programmierung mit der gleichzeitigen Speicherung von Text als Markdown. Der Vorteil ist, dass man alles an einer Stelle hat und somit Programmierblöcke besser gliedern sowie mit passendem Text als Markdown unterstützen kann.

Bekannt dürfte das Konzept insbesondere bei Jupyter sein. Hier kann man blockweise Python-Code programmieren und mit Markdown dokumentieren. Vielen Studierenden mit Data-Science/Machine-Learning-Hintergrund kommt das bestimmt bekannt vor, wird Jupyter-Notebook doch gerne für die Lehre an der Universität oder Fachhochschule verwendet.

Mit Polyglot haben wir nun The New Kid on the Block oder ist es eher eine Copy Cat? Genau das schauen wir uns in diesem Blogbeitrag an, was ist gleich, was unterscheidet sich?

Was ist Polyglot?

Mit Polyglot soll die Verwendung von Notebooks deutlich verbessert werden. Wie erwähnt, ist man bei Jupyter-Notebooks auf Python als einzige Sprache beschränkt. Mit Polyglot erhält man nicht nur die Unterstützung von mehreren Programmiersprachen wie C# oder JavaScript sondern es können auch Variablen untereinander geteilt werden. Dadurch ergeben sich völlig neue Möglichkeiten in der Verwendung des Notebooks: So kann beispielsweise eine Tabelle des Microsoft-SQL-Servers abgefragt werden und das Abfrageergebnis via JavaScript visualisiert werden.

Vollständige Liste der unterstützten Programmiersprachen von Polyglot:

  • C#
  • F#
  • PowerShell
  • JavaScript
  • HTML*
  • Mermaid*
  • SQL
  • KQL (Kusto Query Language)

Die mit einem * markierten Sprachen unterstützen kein Teilen von Variablen untereinander.

Verwendet werden können Polyglot-Notebooks in VS Code mithilfe einer Extension (mehr dazu später). Als technische Basis kommt hier .NET Interactive zum Einsatz, um Code interaktiv ausführen zu können.

Getting started mit Polyglot

Das klingt alles sehr vielversprechend, also schauen wir uns doch mal an, wie das Ganze funktioniert.

Voraussetzungen, bevor es los geht:

  1. Visual Studio Code ist in der neuesten Version verfügbar.
  2. .NET 7 ist in der aktuellsten Version verfügbar.
  3. Die Polyglot-Notebook-Extension ist über den Marketplace installiert.

Polyglot-Extension

Polyglot: Erstellen eines Notebooks

Um ein Notebook zu erstellen, kann man entweder die Command-Palette öffnen (F1) oder man startet den Prozess mit STRG+UMSCHALT+ALT+N.

Notebook erstellen

Als Notebook-Typ wählt man .ipynb aus.

Notebook-Typ

Anschließend wählt man die Standardsprache aus, in der die Code-Blöcke ausgeführt werden sollen. Diese kann im Nachhinein natürlich nochmal angepasst werden.

Programmiersprachen Polyglot

Nach dem Erstellen erscheint der erste (Code-) Block und man kann direkt loslegen.

Notebook über Polyglot

  1. Menüband: Hierüber können neue Code-/Markdown-Blöcke hinzugefügt und das gesamte Notebook ausgeführt werden. Außerdem kann hierüber die Verwaltungsübersicht der Variablen des Notebooks geöffnet werden.
  2. Neben jedem Code-Block erscheint ein Run-Button, welcher nur diesen Block ausführt. Das jeweilige Ergebnis (falls vorhanden) wird entsprechend ausgegeben.
  3. Die Programmiersprache kann hierüber geändert werden. Außerdem kann zwischen Code- und Markdown-Block gewechselt werden.
  4. Vor und nach jedem Block erscheint beim Hovern mit der Maus die Option, einen Code- oder Markdown-Block hinzuzufügen.

Polyglot: Features

Für mich interessante Features sind z.B., dass ich hier ganz normal in C# entwickeln kann. So ist es möglich, in einem Codeblock eine Klasse und Methoden zu definieren und in einem anderen Codeblock darauf zuzugreifen:

Custom-Klasse

Außerdem kann ich über den Codeblock z.B. direkt auf eine MS-SQL-Datenbank zugreifen. Was ich hierzu zunächst benötige, ist die Installation eines NuGet-Pakets:

// Code to Copy
#r "nuget:Microsoft.DotNet.Interactive.SqlServer,*-*"

SQL-Nuget

Anschließend verbindet man sich mit der Datenbank. Hierdurch wird ein Kernel hinzugefügt. Darüber spezifiziert man später die Datenbank bei entsprechenden Datenbank-Operationen:

// Code to Copy
#!connect mssql --kernel-name wf-sample "Persist Security Info=False; Integrated Security=true; Initial Catalog=wf-sample; Data Source=(LocalDb)\MSSQLLocalDB;"

SQL-Datenbank

Das SELECT-Statement liefert dann eine Ergebnisübersicht:

SQL-Select

Auch hier kann man via SQL jegliche Operationen ausführen, wie z. B. ein INSERT INTO:

SQL-Insert

Ein anderes sehr interessantes Feature ist das Teilen von Variablen über die Grenzen der Programmiersprachen hinweg. Unterstützt wird dies durch die Verwaltung aller Variablen, die über das Menüband geöffnet werden können.

Variablen-Übersicht

In der Tabelle werden alle Variablen und der entsprechende Kernel (also in welcher Sprache diese initial definiert wurden) dargestellt. Über den Absprunglink bei “Actions” kann die Variable mit einer anderen Sprache geteilt (share) werden. Bei einem Klick erscheint eine Übersicht, mit welcher Sprache diese Variable geteilt werden kann:

Variablen sharen

Bei der Auswahl der Sprache wird ein neuer Codeblock samt der definition der Variablen hinzugefügt (zweiter Codeblock im nächsten Screenshot):

Variable-Convert

Wie man sieht, wird der Variableninhalt zunächst in C# und anschließend in JavaScript ausgegeben. Initial definiert wurde der Wert beim Erzeugen der Klasse zu Beginn dieses Abschnittes.

Fazit zu Polyglot

Der erste Eindruck von Polyglot hat mich bereits überzeugt. Man erhält mit einem Tool die Möglichkeit, in mehreren Sprachen zu entwickeln und zu dokumentieren. Und was besonders hervorsticht, ist das Teilen von Variablen über die Sprachgrenzen hinweg.

Für mich persönlich ergeben sich durch den Einsatz von C# völlig neue Herangehensweisen, wenn ich beispielsweise programmatisch eine (API-)Schnittstelle ansprechen möchte und einige Beispiel-Aufrufe hierdurch abbilden kann. Was vorher in einem separaten Konsolen-Projekt abgebildet wurde, kann ich nun komfortabel in einem Polyglot-Notebook machen. Hierdurch kann eine Wissenssammlung von Code-Snippets (und der dazugehörigen Dokumentation) angelegt und einfach mit anderen geteilt werden. Etwas, was ich in Zukunft öfter machen werde.

Übrigens: Ich hatte mich bei der Benennung Polyglot gewundert, wie Microsoft hierauf kommt. Beim Recherchieren ergab alles einen Sinn: “Polyglott (Adjektiv, vom Altgriechischen πολύγλωττος (polýglōttos) für mehrsprachig, das seinerseits auf πολυ (poly) für viel und γλῶττα (glōtta) für Zunge, Sprache zurückgeht) nennt man eine Person, die viele Sprachen spricht (auch Multilinguale, Mehrsprachige).” - (Zitat aus Wikipedia ).

Things i have learned today.

Lernen Sie uns kennen

Das sind wir

Wir sind ein Software-Unternehmen mit Hauptsitz in Karlsruhe und auf die Umsetzung von Digitalstrategien durch vernetzte Cloud-Anwendungen spezialisiert. Wir sind Microsoft-Partner und erweitern Standard-Anwendungen bei Bedarf – egal ob Modernisierung, Integration, Implementierung von CRM- oder ERP-Systemen, Cloud Security oder Identity- und Access-Management: Wir unterstützen Sie!

Mehr über uns

Der Objektkultur-Newsletter

Mit unserem Newsletter informieren wir Sie stets über die neuesten Blogbeiträge,
Webcasts und weiteren spannenden Themen rund um die Digitalisierung.

Newsletter abonnieren