Neue Programmiersprachen

11 Wege, Ihre Softwareentwicklung neu zu definieren

20.05.2022
Von 
Peter Wayner schreibt unter anderem für unsere US-Schwesterpublikation InfoWorld.com und ist Autor verschiedener Bücher - unter anderem zu den Themen Open Source Software, autonomes Fahren und digitale Transaktionen.
Diese elf neuen Programmiersprachen könnten die Art und Weise, wie Sie Software entwickeln, grundlegend verändern.
Diese 11 Programmiersprachen könnten Ihre Softwareentwicklung bereichern.
Diese 11 Programmiersprachen könnten Ihre Softwareentwicklung bereichern.
Foto: Chaosamran Studio - shutterstock.com

Die meisten Entwickler verrichten ihre tägliche Programmierarbeit in einer - oder mehreren - traditionellen und etablierten Sprachen. Dennoch steigt der Anteil derer, die nach neuen Werkzeugen lechzen, um Programmierprobleme zu lösen. Diese Tendenz manifestiert sich im Aufstieg domänenspezifischer Programmiersprachen (Domain Specific Languages = DSLs), die sich vor allem dadurch auszeichnen, dass sie kompakt, fokussiert - und nicht für allgemeine Zwecke gedacht sind. Dennoch könnten diese Programmiersprachen auf Dauer einen besonderen Platz in ihrem Entwicklungs-Werkzeugkasten einnehmen.

11 Programmiersprachen, die Sie kennen sollten

Wir haben ein knappes Dutzend neue(rer) Programmiersprachen für Sie zusammengestellt, die ihre Nische gefunden haben.

Reactive Clojure

Wenn Sie Clojure mit React verbinden, erhalten Sie ein System, das alle Möglichkeiten reaktiver Frontends mit der soliden, funktionalen Stärke von Clojure verbindet. Reactive Clojure ermöglicht, eine komplexe Sammlung von Frontend-Komponenten anzulegen und sie mit Funktionen zu verknüpfen. Das Reactive-Framework kümmert sich um die Details und stellt sicher, dass die Anwendungsdaten reibungslos zwischen Ihren Komponenten und der Datenbank fließen. Clojure bringt die funktionale Grundlage mit, um auch ungewöhnliche Use Cases zu realisieren.

Reactive Clojure ist eine gute Option, um Code zu schreiben, der die Frontend-Komponenten zusammenhält. Sein Multithreading-Modell eignet sich perfekt für komplexe und reaktive Dashboards, die mehrere Tasks parallel reporten.

Nickel

Ein Großteil der Programmierarbeit spielt sich heute in Konfigurationsdateien ab. Diese Dateien, die oft in JSON, YAML oder sogar XML kodiert sind, haben sich von einer guten Idee zu einem komplexen Ritual entwickelt. In einigen Fällen geht das soweit, dass die Entwickler gar nicht mehr programmieren, sondern sich endlosen Konfigurationsdatei-Marathons hingeben, um ihr Ziel zu erreichen.

Eine Programmiersprache, um Konfigurationsdateien zu erstellen, hat also in jedem Fall eine Daseinsberechtigung. Nickel ist eine Art Template mit eingebetteter Logik, mit der sich nicht-statische Konfigurationsdateien anlegen lassen. Ein Parameter könnte beispielsweise unter der Woche einen anderen Wert aufweisen als am Wochenende. Kommt Nickel zum Einsatz, erstellt es eine neue Konfigurationsdatei, die zu allen empfangenen Parametern passt.

Die Struktur der Programmiersprache ist größtenteils funktional - Type Checking steht jedoch bei Bedarf zur Verfügung. Dabei ist "Korrektheit" ein großes Thema, denn gut geschriebener Nickel-Code garantiert, dass der Output sowohl den Syntax- als auch allen anderen Regeln, die Sie durchsetzen müssen, entspricht. Der Compiler von Nickel ermöglicht die Erstellung von Verträgen und überprüft im Anschluss, ob diese regelkonform funktionieren. Nickel ist eine sehr praktische Lösung für moderne IT-Architekturen.

Kobra

Die Schöpfer von Kobra wollten eine Sprache erschaffen, die Ingenieuren, Wissenschaftlern und anderen nicht-professionellen Programmierern Zugang zu Machine Learning ermöglicht. Das Ergebnis ist eine visuelle Sprache für maschinelles Lernen.

Der Kobra-Editor setzt codeähnliche Sequenzen mit Drag-and-Drop-Kacheln zusammen, die gängige integrierte Routinen für statistische Analysen und Machine Learning darstellen. Der Prozess fühlt sich ein wenig an wie R mit Data Frames, die aus tabellarischen Daten konstruiert werden, gepaart mit einer Kollektion grafischer Display-Funktionen, um beispielsweise Dashboards zu erstellen.

Bicep

Eine der nützlichsten Cloud-Funktionen ist die Möglichkeit, Server nach Bedarf zu nutzen, um Lastspitzen abzufedern.

Viele Devops-Teams schreiben inzwischen Code für die diversen APIs, die von den unterschiedlichen Clouds unterstützt werden. Microsoft hat hingegen beschlossen, noch einen Schritt weiterzugehen und im Rahmen seiner Infrastructure-as-Code-Philosophie eine vereinfachte Programmiersprache entwickelt, um Server in Azure zu starten: Bicep.

Bicep selbst ist für Infrastrukturüberlegungen auf höherer Ebene konzipiert und weist eine stark deklarative Struktur auf, die es ermöglicht, Anweisungen in beliebiger Reihenfolge zu integrieren und anschließend vom Azure Resource Manager optimieren zu lassen. Eine Type-Safety-Funktion unterstützt dabei, Fehler zu vermeiden.

Frink

Es soll Menschen geben, die bei der Wahl ihrer Bank darauf achten, dass die eingesetzte Buchhaltungssoftware ganze Zahlen statt Fließkommazahlen verwendet. Schließlich ist die Fehlerquote bei letzteren bekanntermaßen groß.

Bei Frink handelt es sich um eine "einheitenbewusste" Programmiersprache, die für dieses spezifische Problem entwickelt wurde. Jede Variable in Frink enthält nicht nur eine Zahl, sondern auch eine Angabe über die Maßeinheit. Die Umrechnung der Einheiten ist dank der Frink-Konfigurationsdatei einfach. Der Kernmechanismus verwendet auch Zahlen mit beliebiger Genauigkeit, um Probleme mit Auf- und Abrundungen zu vermeiden - quasi Type Checking für numerische Maßeinheiten.

Faust

Klangsynthese mag erst einmal wie ein relativ spitzer Anwendungsfall erscheinen - ist aber in vielen Fällen äußerst nützlich, etwa wenn es um Game Development, Virtual Reality oder jede andere Art von Applikation geht, bei der gute Soundqualität eine tragende Rolle spielt.

An dieser Stelle kommt die DSL Faust ins Spiel, deren Nomenklatur dem Begriff "functional audio stream" entspringt. Die Struktur von Faust ist rein funktional, alle Funktionen bilden eine Sound-Processing-Pipeline. Das Backend stellt eingehende Töne numerisch dar - der Code selbst ist ein Funktionsset das zu einem Endergebnis zusammengestellt oder kombiniert werden kann. So lassen sich beispielsweise Echo- oder Halleffekte erzeugen, indem der Code Output aufgesplittet und um eine Verzögerung ergänzt wird. Faust-Programmcode lässt sich in C++, C, LLVM-Bitcode, WebAssembly, Rust und einige andere Sprachen übertragen. Er ist also nahezu universell anwendbar.

Melrose und Glicol

Wenn ein Programmierer eine Musik-Band gründen wollte, würde er wahrscheinlich keinen Schlagzeuger per Annonce suchen. Er würde vielmehr einen Code schreiben, um die Rhythmen für eine Drum-Maschine vorzugeben. Wenn er das erledigt hätte, würde er auch die anderen Bandmitglieder durch Subroutinen ersetzen. Auf diese Weise könnte er sogar ein ganzes Sinfonieorchester aufbauen.

Melrose und Glicol sind zwei Programmiersprachen, die für diese Art der Musikproduktion entwickelt wurden. Beide ermöglichen, mit nur wenigen Tastenanschlägen umfangreiche Kompositionen zu erstellen. Melrose arbeitet dabei auf einer höheren Ebene mit der in der westlichen Musik üblichen Zwölfton-Oktave. Die Noten werden in Sequenzen gruppiert und die Software übernimmt einen Großteil der Routinearbeiten, etwa die Transposition. Der Output kann an jedes MIDI-fähige Instrument übertragen werden. Dabei ist der Programmcode auch in der Lage, auf eingehende Signale über den MIDI-Port zu reagieren.

Bei Glicol handelt es sich um ein Tool auf Rust-Basis, das viele Tasks erfüllt, die auch Melrose beherrscht - allerdings auf einem niedrigeren Niveau. Glicol-Code ist in die digitale Signalverarbeitung integriert und bietet eine breite Palette musikalischer Optionen. Das Tool arbeitet mit einer Open-Source-Audio-Engine.

WebAssembly und Wase

Die effizienteste Art, Anweisungen an einen Computer zu übermitteln, besteht darin, sie in Binärform zu kodieren und auf die grundlegenden CPU-Operationen zu beschränken. Jeder Chip hat seine eigene bevorzugte Binärsyntax und einige Sprachen wie Pascal oder Java weisen ein neutrales Binärformat auf, das für lokale, virtuelle Maschinen gedacht ist. WebAssembly tritt in diese Fußstapfen und bietet Webbrowsern vorverarbeiteten Binärcode kombiniert mit Text in einem Standardformat. Das Ziel: Den verkleinerten JavaScript-Code, der das Rückgrat von Webanwendungen bildet, durch etwas zu ersetzen, das noch lauffähiger ist und nahezu native Geschwindigkeit realisiert.

Dabei verwenden viele Entwickler WebAssembly, ohne es direkt zu programmieren. Sie nutzen Compiler, die höhere Sprachen in WebAssembly konvertieren, das in Browsern ausgeführt werden kann. Es gibt auch Bestrebungen, Low-Level-Sprachen zu entwickeln, die einen Großteil der Grundstruktur von WebAssembly in einer für Menschen lesbaren Form darstellen. Eine solche Option ist beispielsweise Wase, das eine C-ähnliche Syntax mit starker Typisierung bietet.

WebAssembly findet auch außerhalb von Webbrowsern Verwendung - und zwar als allgemeine Methode zur Kodierung von Anweisungen mit einer Stack-Maschine, ähnlich der JVM von Java. Redpanda ist beispielsweise eine Plattform für Streaming-Daten, die Entwicklern die Möglichkeit bietet, die Daten während der Übertragung mit in WebAssembly geschriebenem Code zu optimieren oder zu ändern.

Java 17

Technisch gesehen ist Java keine neue Programmiersprache. Einer der größten Vorteile von Java ist seine Rückwärtskompatibilität zu älteren Versionen. Das macht es in der Regel ziemlich einfach, zehn oder sogar 20 Jahre alten Code für die neuesten JVMs zu kompilieren.

Java 17 ist in dieser Auflistung enthalten, weil die Sprache inzwischen so stark modernisiert wurde, dass sie für einen Zeitreisenden aus den 1990er Jahren kaum wiederzuerkennen wäre. Einige der vielen zusätzlichen Funktionen und Erweiterungen, wie der verbesserte Zufallszahlengenerator oder die strengere Semantik für die Fließkommamathematik, fokussieren auf die Herausforderungen, die bei der Arbeit mit komplexem, numerischem Code entstehen. Andere, wie die starke Kapselung und die erweiterte Switch-Semantik, bringen eine Mischung aus Disziplin und Flexibilität in die Kernsprache. Alles in allem ist es dank all dieser Verbesserungen einfacher denn je, sicheren und zuverlässigen Code zu schreiben. (fm)

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.